一、问题
通常情况下,我们把maven的各种plugins放在<pluginManagement>下,但是有时候并不生效。下例中我在其中添加了tomcat7的插件,但是右边栏却没有相应的运行工具。
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
···
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</pluginManagement>
二、了解pluginManagement和plugins
查阅了相关资料,了解到了pluginManagement和plugins的区别。
pluginManagement是表示插件声明,即你在项目中的pluginManagement下声明了插件,Maven不会加载该插件,pluginManagement声明可以被继承。
pluginManagement一般是用来在父POM中定义,提供给子POM使用,子POM也可以覆盖这个定义,而且你在父POM中定义了版本之后,子模块中直接应用groupId和artifactId,而不用指定版本,同时也方便统一管理;而在父POM中的pluginManagement并不会介入到Maven的生命周期。
plugins就是直接引入一个plugin,而且可以绑定到Maven相关的生命周期上。
pluginManagement主要是为了统一管理插件,确保所有子POM使用的插件版本保持一致,类似dependencies和dependencyManagement。
三、解决
解决办法很简单,直接在<pluginManagement>的同级目录下再添加<plugins>,将tomcat7的插件添加到<plugins>进去即可,如下面代码段:
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!--此处tomcat不生效-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<!--此处tomcat生效-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
点击右上角的刷新(idea) ,tomacat7就有了!