Не удалось выполнить многомодульный проект Maven с использованием exec-maven-plugin
У меня есть мультимодульный проект Maven здесь.
Родительский проект имеет 3 общих модуля, с-paranamer, без-paranamer.
Модули с-paranamer и без-paranamer не зависят друг от друга, и оба зависят от общего модуля.
В модуле без-paranamer я добавил зависимость к общему модулю, как это.
Ниже приведена структура проекта.
.
├── pom.xml
├── common
│ ├── pom.xml
│ ├─ src
│ ├── main
│ ├─ java
│ ├── ParanamerUtil.java
│ ├── PersonV03.java
│ └── TestCaseClasses.java
│
├── with-paranamer
│ ├── pom.xml
│ ├──src
│ ├── main
│ ├── java
│ └── ParanamerExample.java
|
└── without-paranamer
├── pom.xml
├─ src
├── main
├── java
└── ParametersExample.java
Я хочу выполнить ParametersExample
Класс в модуле без paranamer, используя exec-maven-plugin. Поэтому я добавил exec-maven-plugin под pluginManagement в родительском pom.xml здесь.
В модуль без-paranamer я добавил плагин, как это.
Я следовал приведенным выше инструкциям, как указано в сообщении stackru здесь.
Когда я бегу mvn verify
команда успешна
Но когда я пытаюсь запустить команду mvn exec:java -Dexec.mainClass=ParametersExample -pl without-paranamer
Я получаю ниже ошибки.
WARNING] The POM for paranamer-maven-demo:common:jar:1.0-SNAPSHOT is missing, no dependency information available
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.189 s
[INFO] Finished at: 2018-09-07T17:23:07-04:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project without-paranamer: Could not resolve dependencies for project paranamer-maven-demo:without-paranamer:jar:1.0-SNAPSHOT: Could not find artifact paranamer-maven-demo:common:jar:1.0-SNAPSHOT -> [Help 1]
Как я могу сделать мою программу успешной, используя exec-maven-plugin.
1 ответ
without-paranamer
модуль зависит от paranamer-maven-demo.common.1.0-SNAPSHOT
а где он может его найти? Самый очевидный ответ: в локальном хранилище. Но его там нет, если только вы его не установите (также вы должны установить POM родительского проекта).
mvn -N clean install
- устанавливает родительский пом.(-N
обозначает non recursive
, что означает, что цели будут выполняться только для родительского проекта, а не для дочерних модулей).
mvn -pl common clean install
- устанавливает common
модуль.
Теперь звоню exec:java
будет успешным (но не выводил вывод, из-за <skip>true</skip>
в настройках управления плагином)