Статьи

Запретить ‘Плагин не найден’ в мультимодульном maven

Определение плагина maven в подмодуле в многомодульном проекте maven может привести к ошибке «Плагин не найден». Особенно, если у нас есть многомодульный проект, и мы хотим применить плагин maven только в одном конкретном модуле, эта ошибка возникает довольно часто.

Допустим, у нас есть многомодульная корневая помпа, которая выглядит следующим образом.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  <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
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  <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
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  <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
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  <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 .