maven-dependency-plugin父模块执行不生效,仅子模块执行问题求助
咱先捋清楚你遇到的核心问题:当子模块配置了maven-dependency-plugin的执行(executions)时,父模块的同插件执行会被完全覆盖,这是Maven插件继承的默认规则——子模块一旦定义了插件的<executions>节点,就会替换父模块中该插件的所有执行配置,而不是合并。另外你的父模块配置里还有个拼写错误,这也可能导致它执行失败。
下面分两步解决你的问题,既能保留父模块的通用配置供其他子项目复用,又能让当前子模块的自定义执行生效:
第一步:修正父模块的配置错误
你的父模块配置里有个明显的拼写错误:<outputFileterFile>多写了一个t,正确的标签应该是<outputFilterFile>。这个错误会直接导致父模块的build-classpath执行无法正常运行,先把它修正过来。
第二步:调整父模块插件的配置位置,实现执行合并
把父模块的maven-dependency-plugin配置放到<pluginManagement>节点下,这样子模块可以继承父模块的执行配置,同时添加自己的自定义执行,而不会覆盖父模块的内容。
修改后的父模块pom配置
<build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.8</version> <executions> <execution> <id>build-classpath</id> <phase>generate-sources</phase> <goals> <goal>build-classpath</goal> </goals> <configuration> <outputFilterFile>true</outputFilterFile> <includeScope/> <fileSeparator/> <outputDirectory>${project.build.directory}/lib</outputDirectory> </configuration> </execution> </executions> </plugin> </plugins> </pluginManagement> </build>
修改后的子模块pom配置
子模块只需要声明插件,并添加自己的copy-model执行即可,版本号可以继承父模块<pluginManagement>中的配置:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-model</id> <phase>package</phase> <goals> <goal>copy</goal> </goals> <configuration> <artifactItems> <artifactItem> <groupId>my.test.pkg</groupId> <artifactId>my-model</artifactId> <classifier>server</classifier> <version>1.0.3</version> <type>jar</type> </artifactItem> </artifactItems> <outputDirectory>${project.build.directory}/lib</outputDirectory> </configuration> </execution> </executions> </plugin> </plugins> </build>
为什么这样能生效?
Maven的<pluginManagement>节点是用来统一管理插件的版本、配置和执行规则的,子模块在<build><plugins>中声明插件时,会自动继承<pluginManagement>中的配置。当子模块添加自己的<executions>时,是在继承的基础上追加新的执行,而不是替换父模块的执行——这样父模块的build-classpath和子模块的copy-model就会同时运行了。
其他子项目如果只需要父模块的build-classpath执行,只需要在自己的pom中简单声明插件即可,不需要重复配置:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> </plugin> </plugins> </build>
内容的提问来源于stack exchange,提问作者pronane

