Как развернуть SNAPSHOT с исходниками и JavaDoc?

92

Я хочу развернуть источники и javadocs со своими снимками. Это означает, что я хочу автоматизировать следующую команду:

mvn clean source:jar javadoc:jar deploy

Просто выполнить:

mvn clean deploy

Я не хочу, чтобы генерация javadoc / sources выполнялась во время installфазы (т.е. локальные сборки).

Я знаю, что плагины source / javadoc могут быть синхронизированы с выполнением releaseплагина, но я не могу понять, как связать его с выпусками моментальных снимков.

Хенрик Консек
источник

Ответы:

76
<build>
  <plugins> 
    <plugin>
      <artifactId>maven-source-plugin</artifactId>
      <executions>
        <execution>
          <id>attach-sources</id>
          <phase>deploy</phase>
          <goals><goal>jar-no-fork</goal></goals> 
        </execution>
      </executions>
    </plugin>
    <plugin> 
      <artifactId>maven-javadoc-plugin</artifactId> 
      <executions> 
        <execution> 
          <id>attach-javadocs</id>
          <phase>deploy</phase>
          <goals><goal>jar</goal></goals> 
        </execution> 
      </executions> 
    </plugin>
    <plugin> 
      <!-- explicitly define maven-deploy-plugin after other to force exec order -->
      <artifactId>maven-deploy-plugin</artifactId> 
      <executions> 
        <execution> 
          <id>deploy</id>
          <phase>deploy</phase>
          <goals><goal>deploy</goal></goals> 
        </execution> 
      </executions> 
    </plugin>
  </plugins> 
</build>

См. Полный пример в родительской POM OSS компании Sonatype .

сфуссенеггер
источник
1
Я использую эту установку, и она работает достаточно хорошо. Однако у меня были две небольшие проблемы: во-первых, сгенерированные источники не включены в цель «jar», вам понадобится «jar-no-fork». Во-вторых, в плагине релиза есть ошибка, из-за которой исходники релиза создаются дважды (и, следовательно, дважды отключаются, что приводит к проблемам с менеджерами репозиториев)
mglauche
1
maven-source-plugin:jarpackageпо умолчанию присоединяется к фазе, поэтому вы можете остановиться <phase>verify</phase>и выполнить то же самое. Кроме того, я не уверен, почему вы все равно прикрепили это для проверки, поскольку эта фаза предназначена для «упаковки проекта и запуска интеграционных тестов».
matt b
@mglauche @matt благодарим за комментарии. Я только что внес необходимые изменения.
sfussenegger
1
@Henryk Хорошо, я явно добавил maven-deploy-plugin, а также maven кажется (или пытается), чтобы гарантировать выполнение в том случае, если плагины определены в POM. Однако это может потребовать некоторых экспериментов.
sfussenegger
1
использование случайного идентификатора создает новое выполнение. Я подумал, что вы захотите «переназначить» одно выполнение по умолчанию
Hurda
48

Просто чтобы добавить альтернативу, которая не требует от вас возиться с настройкой плагина:

mvn -DperformRelease=true [goals]

Кредит принадлежит mcbeelen с http://sea36.blogspot.com/2009/02/attaching-javadocs-and-sources-to-maven.html?showComment=1314177874102#c6853460758692768998

Дэн
источник
4
Я хотел бы упомянуть, что эта функция может исчезнуть в будущем выпуске Maven (возможно, Maven-4?). Посмотрите комментарий здесь, в разделе профиля Maven Super POM: maven.apache.org/ref/3.1.1/maven-model-builder/super-pom.html
Дэн,
46

В статье, на которую ссылается Дэн, также упоминается другой подход, который работает без изменения помов и не исчезнет в ближайшее время:

mvn clean javadoc: источник jar: установка jar

Что отлично работает с Maven 3+ вместе с ...

mvn clean javadoc: источник jar: развернуть jar

Что я тестировал при развертывании Jenkins на Nexus.

Этот подход был хорош, потому что мне нужно было изменить только некоторые задания Дженкинса, и мне не нужно было возиться с моими помпонами.

HDave
источник
5
Спасибо за решение без помпонов! Обратите внимание, что javadoc: jar и / или source: jar должны появиться перед установкой или развертыванием , иначе дополнительные jar- файлы не будут «прикреплены» к развертыванию.
seanf 08
2
FWIW эти варианты также работают с package:mvn clean javadoc:jar source:jar package
ecoe
Это хороший ответ, поскольку он сообщает вам точную команду для создания и загрузки источников и javadoc в ваше репо.
russellhoff