Определение плагина maven в подмодуле в многомодульном проекте maven может привести к ошибке «Плагин не найден». Особенно, если у нас есть многомодульный проект, и мы хотим применить плагин maven только в одном конкретном модуле, эта ошибка возникает довольно часто.
Допустим, у нас есть многомодульная корневая помпа, которая выглядит следующим образом.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
<modelVersion>4.0.0</modelVersion> <groupId>com.jdriven.blog</groupId> <artifactId>maven-plugin-multimodule</artifactId> <version>0.1-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>module1</module> <!-- Module1 is a regular jar --> <module>module2</module> <!-- Module2 has tomcat7 plugin configured --> </modules></project> |
Инстинктивно мы добавляем плагин (например, tomcat7) к этому конкретному модулю module2 , вот так.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
<modelVersion>4.0.0</modelVersion> <artifactId>maven-plugin-multimodule-module2</artifactId> <packaging>war</packaging> <parent> <groupId>com.jdriven.blog</groupId> <artifactId>maven-plugin-multimodule</artifactId> <version>0.1-SNAPSHOT</version> <relativePath>../</relativePath> </parent> <build> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <!-- This is where our specific configuration goes --> </configuration> </plugin> </plugins> </build></project> |
Когда мы запускаем команду mvn tomcat7:help для многомодульного корневого модуля pom, мы получаем следующую ошибку:
|
1
2
3
|
[ERROR] No plugin found for prefix 'tomcat7' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories |
Решение очень простое: мы указываем плагин в разделе pluginManagement нашего многомодульного корневого модуля.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
<modelVersion>4.0.0</modelVersion> <groupId>com.jdriven.blog</groupId> <artifactId>maven-plugin-multimodule</artifactId> <version>0.1-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>module1</module> <!-- Module1 is a regular jar --> <module>module2</module> <!-- Module2 has tomcat7 plugin configured --> </modules> <build> <!-- In the multi-module root pom, use the pluginManagement to define the version of the maven-plugin --> <pluginManagement> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> </plugin> </plugins> </pluginManagement> </build></project> |
И в нашем конкретном модуле module2 мы module2 версию плагина, так как он уже определен в многомодульном корневом pom (родительском).
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
<modelVersion>4.0.0</modelVersion> <artifactId>maven-plugin-multimodule-module2</artifactId> <packaging>war</packaging> <parent> <groupId>com.jdriven.blog</groupId> <artifactId>maven-plugin-multimodule</artifactId> <version>0.1-SNAPSHOT</version> <relativePath>../</relativePath> </parent> <build> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <!-- No version needed here, it is already defined in the multi-module root pom --> <configuration> <!-- This is where our specific configuration goes --> </configuration> </plugin> </plugins> </build></project> |
Теперь, когда можно выполнить команду mvn tomcat7:help и не получите ошибки. Мы готовы настроить плагин в нашем подмодуле.
| Ссылка: | Предотвратите ‘Плагин не найден’ в многомодульном maven от нашего партнера JCG Виллема Чейзоо в блоге JDriven . |