Maven如何处理重复插件声明?去警告且保原有构建行为咨询
解决Maven重复插件声明警告并保留原有构建行为
嘿,刚好对Maven插件声明的规则很熟,来帮你搞定这个问题!
首先明确你关心的核心规则:Maven对同一个插件(通过groupId+artifactId唯一识别,省略groupId时默认用org.apache.maven.plugins)的多个<plugin>声明,会采用「最后一个声明完全覆盖前面所有声明」的逻辑——注意是完全覆盖,不是XML节点合并!这也是你看到警告的原因,而且如果没处理的话,第一个插件里的webResources配置其实已经失效了(被第二个覆盖了)。
回到你的场景,这两个<plugin>块都是maven-war-plugin(第二个省略了groupId,Maven会自动补全为官方插件组),属于重复声明。要消除警告且保留原有所有构建行为,你需要把两个插件的配置合并到同一个<plugin>块里,把所有需要的配置项都放在一起:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <!-- 保留原第一个声明的web资源配置 --> <webResources> <resource> <directory>${project.basedir}/src/main/webapp</directory> </resource> </webResources> <!-- 加入原第二个声明的类附加配置 --> <attachClasses>true</attachClasses> <classesClassifier>classes</classesClassifier> </configuration> </plugin>
这样修改后,既解决了重复声明的警告,又完整保留了原来两个配置的所有功能:既会按第一个配置处理web资源,又会按第二个配置把类文件附加为分类器jar包。
额外提一句:如果是插件的<executions>块重复,规则会不一样(是合并执行逻辑),但你这里是插件本身的顶层配置重复,所以适用「最后一个覆盖前面」的规则。
内容的提问来源于stack exchange,提问作者bobah
相关产品推荐
相关产品推荐

