Prevent ‘No plugin found’ in multi-module maven
Defining a maven plugin on a submodule in a multi-module maven project can give us a ‘No plugin found’ error. Especially if we have a multi-module project and we want to apply a maven plugin in only one specific module this error occur pretty often.
Let’s say we have a multi-module root pom which looks like this.
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<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>Instinctively we add the plugin (tomcat7 for example) to this specific module module2, like this.
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<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>When we run the command mvn tomcat7:help on the multi-module root pom we get the following error:
[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
The solution is very simple: We specify the plugin in the pluginManagement section of our multi-module root pom.
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<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>And in our specific module module2 we clear the version of the plugin, since it is already defined in the multi-module root pom (the parent).
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<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>Now when can run the command mvn tomcat7:help and get no error. We are ready to configure the plugin on our submodule.
| Reference: | Prevent ‘No plugin found’ in multi-module maven from our JCG partner Willem Cheizoo at the JDriven blog. |




