Определите список модулей, которые будут построены в многопроектной сборке Maven.

Я хотел бы использовать опцию Maven -pl, чтобы определить, какие конкретные модули должны быть включены в реактор. Опция работает, если указан список путей к модулям. К сожалению, предоставление artifactIds модуля вообще не работает. В документах Sonatype 'Maven: The Complete Reference' используется пример мультипроекта, в котором имена каталогов совпадают с идентификаторами артефактов:

http://books.sonatype.com/mvnref-book/reference/_using_advanced_reactor_options.html

Можно ли использовать параметр -pl с artifactId?


person Piotr Oktaba    schedule 17.10.2014    source источник
comment
Какую версию maven вы используете? как вы это назвали? Как выглядит ваш pom-файл?   -  person khmarbaise    schedule 17.10.2014
comment
Для справки: Пример Maven: < i> каждый элемент модуля соответствует подкаталогу каталога simple-parent /. Разве не считается лучшей практикой называть каталоги проектов в соответствии с их artifactIds? Я не знаю ни одного подпроекта, в котором этого не было бы в нашем проекте с 15 проектами верхнего уровня и сотнями подпроектов.   -  person Gerold Broser    schedule 17.10.2014
comment
И подумайте о производительности. При необходимости анализировать POM в каждом подкаталоге, чтобы проверить, применяется ли artifactId - даже если большинство из них не подходит для определенной сборки. Принятие абсолютных имен каталогов, ограниченных до необходимого, выполняется намного быстрее.   -  person Gerold Broser    schedule 17.10.2014


Ответы (2)


Да, это возможно. Взгляните на mvn --help:

 -pl,--projects <arg>                   Comma-delimited list of specified
                                        reactor projects to build instead
                                        of all projects. A project can be
                                        specified by [groupId]:artifactId
                                        or by its relative path.

Обратите внимание, в частности, что artifactId без начального groupId по-прежнему имеет начальное двоеточие.

Так, например, в случае, когда artifactId совпадает с именем каталога, все эти три строки будут относиться к одному и тому же модулю в Maven:

  • mvn -pl maven-core
  • mvn -pl :maven-core
  • mvn -pl org.apache.maven:maven-core
person Joe    schedule 18.10.2014

mvn, кажется, принимает к сердцу список, который вы предоставляете с -pl, и не строит никаких зависимостей автоматически.

Итак, в дополнение к ответу Джо: если проект / модуль, который вы пытаетесь построить, зависит от других модулей, вы можете попросить mvn построить их также с помощью -am.

-am,--also-make
       If project list is specified, also build projects required by the list

Если указан список проектов = если используется опция -pl

Итак, примеры становятся:

  • mvn -pl maven-core -am
  • mvn -pl :maven-core -am
  • mvn -pl org.apache.maven:maven-core -am
person Kashyap    schedule 14.02.2019