Maven多模块项目:构建后删除mod1的target文件夹方案咨询
解决方案
一、配置mod1构建后自动删除target文件夹
Maven的maven-clean-plugin可以在指定阶段执行清理操作,我们需要确保mod1先完成打包、安装到本地仓库(保证mod2能正常获取依赖),再清理target目录。修改mod1的pom.xml,在<build>标签中添加以下配置:
<build> <plugins> <!-- 若mod1无需打包成可执行Jar,可移除spring-boot-maven-plugin --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!-- 绑定clean操作到install之后的阶段 --> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.3.2</version> <executions> <execution> <id>post-install-clean</id> <phase>post-install</phase> <goals> <goal>clean</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
说明:post-install阶段在Maven的install流程完成后触发,此时mod1的Jar已被安装到本地仓库,mod2后续构建可正常引用,同时mod1的target文件夹会被自动删除。
二、配置mod2将mod1的Jar复制到自身lib目录
1. 先添加mod1依赖
在mod2的<dependencies>节点中引入mod1的依赖:
<dependency> <groupId>com.example</groupId> <artifactId>library-complete</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
2. 添加依赖复制插件配置
在mod2的<build>标签中加入maven-dependency-plugin,实现Jar复制:
<build> <plugins> <!-- 保留原有插件(如spring-boot-maven-plugin) --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.6.0</version> <executions> <execution> <id>copy-mod1-jar</id> <phase>package</phase> <goals> <goal>copy</goal> </goals> <configuration> <artifactItems> <artifactItem> <groupId>com.example</groupId> <artifactId>library-complete</artifactId> <version>0.0.1-SNAPSHOT</version> <outputDirectory>${project.build.directory}/lib</outputDirectory> </artifactItem> </artifactItems> </configuration> </execution> </executions> </plugin> </plugins> </build>
说明:执行mvn package时,mod1的Jar会被自动复制到mod2的target/lib目录下。
三、执行构建命令
在父项目根目录运行以下命令:
mvn clean install
此时:
- mod1会先完成打包、安装到本地仓库,随后自动清理target文件夹
- mod2会拉取mod1的依赖,并将其Jar复制到自身的lib目录中
注意:若不需要将mod1安装到本地仓库,也可使用
maven-dependency-plugin的copy-dependencies目标结合多模块 reactor 构建,但安装到本地仓库是最稳妥的方式,能避免模块间依赖路径问题。
内容的提问来源于stack exchange,提问作者Akash Jain
相关产品推荐
相关产品推荐

