如何全局修改Maven默认target目录,统一指定所有项目构建输出路径
统一修改所有Maven项目构建输出目录的方案
嘿,这个需求我之前也折腾过,给你几个靠谱的方案,分分钟搞定所有Maven项目统一输出目录的问题!
方案1:全局配置(所有Maven项目自动生效)
这个方案一劳永逸,改完之后你本地所有Maven项目的构建输出都会自动走指定目录。
- 找到你的Maven配置文件
settings.xml,一般在${MAVEN_HOME}/conf目录下,或者用户目录的.m2/settings.xml(后者优先级更高)。 - 在
<settings>标签里添加<profiles>配置,指定全局的构建输出目录:
<settings> <profiles> <profile> <id>custom-build-dir</id> <properties> <!-- 这里配置你想要的统一输出路径,比如你说的temp/${项目名}/target --> <project.build.directory>${user.dir}/../temp/${project.artifactId}/target</project.build.directory> </properties> </profile> </profiles> <!-- 激活这个profile,让它默认生效 --> <activeProfiles> <activeProfile>custom-build-dir</activeProfile> </activeProfiles> </settings>
解释一下:
${user.dir}是当前项目的根目录路径,../temp就是项目同级的temp文件夹${project.artifactId}是每个项目的artifactId,这样每个项目的输出会自动分到temp/P1/target、temp/P2/target这种路径里
方案2:父POM统一管理(适合团队/自有项目)
如果不想影响所有项目(比如有些第三方项目你不想改输出目录),可以用父POM来统一配置,让自己的项目都继承这个父POM:
- 创建一个父POM项目,在它的
<properties>里定义构建目录:
<project> <groupId>com.your.group</groupId> <artifactId>parent-pom</artifactId> <version>1.0.0</version> <packaging>pom</packaging> <properties> <project.build.directory>${user.dir}/../temp/${project.artifactId}/target</project.build.directory> </properties> </project>
- 让你的P1、P2等项目继承这个父POM,在子项目的pom.xml里添加:
<parent> <groupId>com.your.group</groupId> <artifactId>parent-pom</artifactId> <version>1.0.0</version> </parent>
这样只有继承了这个父POM的项目才会用自定义的输出目录,第三方项目不受影响。
方案3:命令行临时指定(单次生效)
要是只是偶尔临时改一次输出目录,不想动配置文件,直接在构建命令里加参数就行:
mvn clean install -Dproject.build.directory=../temp/${项目名}/target
比如给P1项目构建时,就用:
mvn clean install -Dproject.build.directory=../temp/P1/target
小提示
- 如果你想要所有项目的输出都到同一个根目录下(比如
/temp),可以把路径写成/temp/${project.artifactId}/target(注意是绝对路径) - 改完配置后,记得先执行
mvn clean清理旧的target目录,避免缓存问题
内容的提问来源于stack exchange,提问作者WebComer




