最近在和别的项目集成,需要在我们的pom中添加上对方的parent,打包的时候就遇到了问题,对方在parent中添加了一个插件,干啥的就不说了, 反正人家是用到了, 我们是用不到,但是还给我们打包带来了一些问题。
这时候就必须排除掉对方这个插件了
1,第一种方法是 有的插件提供了不加载配置,例如:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-xxx-plugin</artifactId>
<version>2.11</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
如果不想用这个插件,就把skip标签配置成true,这样在构建的时候就不会使用这个插件了。
可是有的插件并没有提供这样的配置,对方项目里的这个插件正好就没有提供这个配置。真的是:
然后只能另寻他法。
2,后来又找到一种方法,就是在子项目的pom里添加一个插件,覆盖掉parent中的插件,子项目插件的execution中phase设置为none,例如:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-xxx-plugin</artifactId>
<version>2.11</version>
<executions>
<execution>
<id>这里是parent里的插件id</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
这样插件在执行时,就会执行一个空的目标。
感觉找到了可行的方法。
兴致冲冲的打开对方的parent, 然后发现对象的插件没有设置id
我。。。。
本来以为柳暗花明,谁知道是一条死路。不过如果parent中的插件有id的话,这种方法还是可行的。
3,只能再次上路,路漫漫其修远兮,发现网上这样的搜索和资料并不多,看来遇到这样问题的问不是很多呀。
在stackOverflow上看到有讨论的帖子,也是几年前的了。研究了一番,最后是这样解决的:
和上面差不多,都是覆盖parent中的插件,如果parent中的插件没有id,先加一个空的execution, 执行phase为空, 然后再加一个自己的execution,需要有自己的id ,如下
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-xxx-plugin</artifactId>
<version>2.11</version>
<executions>
<!--加一个execution , phase设置成空-->
<execution>
<phase/>
</execution>
<!--加一个有自己id的execution,id随便,其余可以不写-->
<execution>
<id>myid</id>
</execution>
</executions>
</plugin>
这样插件再执行的时候就去只要myid了,但是myid什么都没有,使它空欢喜一场。
最终打包成功。