Развертывание в bintray из Maven не выполняется

Я настроил сборку maven для проекта Java в соответствии с Публикация релизов с помощью Github, Bintray и maven-release-plugin, запись в блоге Андреаса Вейтена.

Моя pom версия — 1.0.2-SNAPSHOT, и я создал соответствующую версию 1.0.2 в своем пакете bintray. Выполняю mvn -Prelease clean install, проблем нет. Выполняю mvn release:prepare, проблем нет. Но когда я выполняю mvn release:perform, сборка прерывается с сообщением об ошибке ниже.

Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy 
(default-deploy) on project [PROJECT]: Failed to deploy artifacts: Could not 
transfer artifact my.project:test:jar:1.0.2-20140408.154954-1 from/to bintray-
user-maven-package (https://api.bintray.com/maven/user/maven/package): Failed to 
transfer file: https://api.bintray.com/maven/user/maven/package/my/project/test/
1.0.2-SNAPSHOT/test-1.0.2-20140408.154954-1.jar. Return code is: 400, 
ReasonPhrase: Bad Request. -> [Help 1]

Я заметил, что подключаемый модуль выпуска пытается загрузить SNAPSHOT, и, конечно же, ему не место в bintray... Я бы подумал, что он попытается развернуть 1.0. .2? Как я могу убедить maven загрузить правильный артефакт, или что-то не так с моей настройкой?

Ниже приведены части POM, которые я считаю важными, полный POM находится в pastebin.

<modelVersion>4.0.0</modelVersion>
<groupId>my.tool</groupId>
<artifactId>util</artifactId>
<packaging>jar</packaging>
<version>1.0.2-SNAPSHOT</version>

<scm>
  <connection>scm:git:https://github.com/user/package.git</connection>
  <developerConnection>scm:git:[email protected]:user/package.git</developerConnection>
  <url>https://github.com/user/package</url>
  <tag>HEAD</tag>
</scm>

<distributionManagement>
  <repository>
    <id>bintray-user-maven-package</id>
    <name>user-maven-package</name>
    <url>https://api.bintray.com/maven/user/maven/package</url>
  </repository>
</distributionManagement>

<profile>
    <id>release</id>
    <build>
      <plugins>
        <plugin>
          <artifactId>maven-source-plugin</artifactId>
          <executions>
            <execution>
              <id>attach-sources</id>
              <goals>
                <goal>jar</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <artifactId>maven-javadoc-plugin</artifactId>
          <executions>
            <execution>
              <id>attach-javadocs</id>
              <goals>
                <goal>jar</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>
  </profile>
</profiles>

<build>
 <defaultGoal>install</defaultGoal>
 <plugins>
      <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-compiler-plugin</artifactId>
           <version>3.1</version>
           <configuration>
                <source>1.7</source>
                <target>1.7</target>
           </configuration>
      </plugin>
      <plugin>
            <groupId>com.mycila</groupId>
            <artifactId>license-maven-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <header>${basedir}/src/etc/header.txt</header>
                <includes>
                    <include>src/main/java/**</include>
                    <include>src/test/java/**</include>
                </includes>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>check</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
          <artifactId>maven-release-plugin</artifactId>
          <version>2.5</version>
          <configuration>
            <useReleaseProfile>false</useReleaseProfile>
            <releaseProfiles>release</releaseProfiles>
            <autoVersionSubmodules>true</autoVersionSubmodules>
          </configuration>
        </plugin>
  </plugins>
</build>

person s.d    schedule 08.04.2014    source источник
comment
Вы уверены, что пытаетесь выпустить 1.0.2, а не 1.0.1? Потому что я ожидаю, что Maven попытается развернуть 1.0.2-SNAPSHOT после выпуска 1.0.1.   -  person JBaruch    schedule 09.04.2014
comment
@JBaruch: Извините, я сделал несколько аппаратных сбросов и удалил теги после пары неудачных выпусков. Я снова изменил версию POM на 1.0.2-SNAPSHOT...   -  person s.d    schedule 09.04.2014


Ответы (3)


Вам нужно будет опубликовать свой pom, чтобы понять, что не так с конфигурацией вашего плагина выпуска maven.

Также учтите следующее: вы можете использовать oss.jfrog.org для размещения ваших снимков и автоматически конвертировать в релизы во время отправки в Bintray.

  • Недостаток - для проектов с открытым исходным кодом, которые связаны только с jcenter
  • Преимущество - все остальное :) Бесплатный экземпляр Artifactory для процесса разработки, интеграция с любым CI-сервером (размещенным или облачным), прозрачность релиз в Bintray с помощью одного вызова API паузы.
person JBaruch    schedule 09.04.2014
comment
Спасибо. Добавил в вопрос соответствующие выдержки из POM и разместил все это на pastebin. - person s.d; 09.04.2014

На этапе maven mvn release:perform файл должен быть передан в:

https://api.bintray.com/maven/user/maven/package/my/project/test/1.0.2

А не для:

https://api.bintray.com/maven/user/maven/package/my/project/test/1.0.2-SNAPSHOT

Вот почему Bintray правильно возвращает:

Return code is: 400, ReasonPhrase: Bad Request.

Обновление maven-release-plugin с (моей) версии 2.2.2 до последней на данный момент версии 2.5 исправило это для меня. После обновления шаг mvn release:prepare ведет себя по-другому.


Код возврата: 401

Как упоминалось в комментарии @vorburger, если (используя maven-deploy-plugin:2.7) Bintray возвращает:

Return code is: 401, ReasonPhrase: Unauthorized.

Тогда это «просто» означает, что у вас нет или неправильное имя пользователя и пароль для <server> в settings.xml:

<server>
  <id>{matching-id}</id>
  <username>{bintray-user}</username>
  <password>{bintray-api-key}</password>
</server>

Значение matching-id должно совпадать со значением, определенным в файле pom.xml (в разделе <distributionManagement> > <repository>).

Значение bintray-api-key можно сгенерировать в разделе API Key в настройках профиля Bintray.


Не используйте mvn deploy для выполнения выпуска

По ошибке я сначала попробовал mvn deploy (который пытался отправить *-SNAPSHOT) вместо mvn release:prepare + mvn release:perform (который правильно создает и отправляет релиз).

person vorburger    schedule 22.07.2014
comment
PS: Если вместо кода возврата: 400, ReasonPhrase: Bad Request. вы нажимаете код возврата: 401, ReasonPhrase: Unauthorized. из api.bintray.com/maven... (используя maven-deploy-plugin:2.7) , то это «просто» означает, что у вас нет имени пользователя и пароля для ‹сервера› (с соответствующим ‹id› ...) в файле settings.xml или они указаны неверно. - person vorburger; 21.09.2014

У меня такая же проблема. Понижение версии maven-release-plugin до версии 2.4 решило проблему для меня.

person Sebastian Schuth    schedule 30.05.2014