Как выполнить плагин maven _ после завершения сборки всех модулей

#maven

#maven

Вопрос:

В частности, я пытаюсь запустить maven-javadoc-plugin, но всякий раз, когда я меняю номера версий в родительском / агрегаторном pom и всех дочерних элементах, при первом запуске сборки происходит сбой, потому что javadoc запускается первым и не может найти ни один из новых пакетов версий из модулей, потому что они не имеютеще не построен.

Обычно мне приходится комментировать javadoc для одной сборки, а затем добавлять его обратно, как только пакеты будут доступны в nexus для новой версии. Однако это, вероятно, означает, что я все время собирал javadoc на одной сборке старых исходных файлов.

Я читал предложения о добавлении другого модуля, который зависит от других, но я не думаю, что смогу получить модуль для сборки javadoc для одноранговых модулей. Наличие его в родительском файле создает весь javadoc для всех модулей, мне просто нужно, чтобы это произошло позже. Спасибо. Вот моя конфигурация плагина javadoc.

                     <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-javadoc-plugin</artifactId>
                    <inherited>false</inherited>
                    <executions>
                        <execution>
                            <id>generate-javadoc</id>
                            <phase>package</phase>
                            <goals>
                                <goal>aggregate</goal>
                            </goals>
                            <configuration>
                                <aggregate>true</aggregate>
                                <links>
                                    <link>http://java.sun.com/javase/6/docs/api</link>
                                    <link>http://java.sun.com/javaee/5/docs/api</link>
                                </links>
                                <maxmemory>512</maxmemory>
                                <doclet>org.umlgraph.doclet.UmlGraphDoc</doclet>
                                <docletArtifact>
                                    <groupId>org.umlgraph</groupId>
                                    <artifactId>doclet</artifactId>
                                    <version>5.2</version>
                                </docletArtifact>
                                <additionalparam>
                                    -inferrel -inferdep -outputencoding utf8 -hide
                                    java.* -collpackages
                                    java.util.*
                                    -qualify -postfixpackage
                                    -nodefontsize 9 -nodefontpackagesize 7
                                </additionalparam>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
  

Комментарии:

1. попробуйте phase install вместо package для выполнения

2. Похоже, что фаза установки не помогает, потому что родительский / агрегаторный проект создается первым в порядке реактора, поэтому все его фазы выполняются до сборки любого модуля. Итак, независимо от того, выполняется ли его установка или упаковка до сборки первого модуля, поэтому зависимость, которую javadoc имеет от модулей, не выполняется, потому что они не построены.

Ответ №1:

Один из способов обойти эту проблему — не вызывать плагин javadoc на обычной фазе жизненного цикла maven; вместо этого запустите его отдельно.

Чтобы быть точным, удалите <phase> тег из приведенного выше plugin определения.

Запуск mvn install javadoc:javadoc из родительского модуля.

Это позволит собрать и установить все модули и родительский модуль, а затем запустить на них javadoc.

Комментарии:

1. Спасибо за ответ, хотя, к сожалению, это не одно и то же. С помощью приведенной выше конфигурации я получаю каталог site / apidocs в целевом каталоге верхнего уровня со всеми модулями javadoc в одном месте. Если я сделаю то, что вы предлагаете, каждый модуль создает свой собственный javadoc, но для всех из них нет javadoc верхнего уровня.

2. @John. Я думаю javadoc:javadoc , не агрегируется. Возможно javadoc:aggregate , делает?

3. Большое спасибо за ответ. Это так, но поскольку pom верхнего уровня запускается первым в порядке реактора, ни один из других модулей еще не построен, и плагин javadoc считает, что все они являются зависимостями, поэтому он ломается, говоря, что не может найти необходимые банки. Я не уверен, как aggregate когда-либо будет работать, учитывая это. Есть ли способ сделать pom верхнего уровня ПОСЛЕДНИМ в порядке реактора? Если он первый, я не понимаю, почему он не всегда прерывается, пытаясь найти артефакты модулей, которые еще не были созданы.

4. @Джон, я имел в виду mvn clean install javadoc:aggregate

5. еще раз спасибо. Проблема, я думаю, в том, что порядок реактора для моих сборок — это сначала pom верхнего уровня, а затем все модули. Поэтому все, что я пытаюсь сделать в pom верхнего уровня (также родительском pom модулей), выполняется до того, как будут построены все модули. Сейчас я ищу способы переключения порядка реактора этого pom верхнего уровня, но у меня нет больших надежд. Я также пробую другой модуль, который зависит от всех остальных и создает javadoc, но это исключительно неубедительно. Ну что ж.

Ответ №2:

Является ли ваше объявление плагина javadoc <build> частью вашего pom. Вам следует рассмотреть возможность перемещения его в <reporting> часть, см. Эту ссылку.

Комментарии:

1. Вы не можете запускать произвольные плагины во время создания отчетов. <reporting><plugins><plugin><executions> даже недопустимо для схемы POM.

2. Кажется, вы правы. Я думал, что это такое же поведение для плагина javadoc между сборкой и отчетом, потому что в документе было написано, что в случае отчета о проекте вы должны поместить его в отчетную часть, но в этом случае это явно не работает, потому что xsd запрещает это. В официальном документе есть только часть конфигурации, а не часть выполнения. Мой плохой.