如何在不修改pom.xml的情况下运行pom与源码分离的Maven
问题:Maven如何在不修改pom.xml的情况下,使用与pom不同目录的源码?
我的项目目录结构如下:
. ├── etc │ └── pom.xml └── src └── main ├── java │ └── org │ └── example │ └── Main.java └── resources
当在项目根目录执行mvn compile -f etc/pom.xml时,Maven会默认到etc/src下查找源码,这不符合需求。
我知道可以在pom.xml里通过配置指定源码和输出目录:
<build> <sourceDirectory>../src</sourceDirectory> <directory>../target</directory> </build>
但这种方式不可靠,因为其他插件可能依赖src之外的目录,手动配置容易引发兼容问题。
我需要一种无需修改pom.xml的方案,让Maven使用命令执行目录下的源码,或者直接指定项目根目录——这么做是因为我在用Just工具,它会在运行时生成自定义pom.xml,目前是放在项目目录里的临时文件,理想状态下想把它放到/tmp目录。
解决方案
可以通过Maven的系统属性maven.multiModuleProjectDirectory指定项目根目录,让Maven基于该目录解析所有默认路径(比如src、target等),而非pom.xml所在的目录。
执行命令的格式如下:
mvn compile -f /tmp/pom.xml.tmp -Dmaven.multiModuleProjectDirectory=$(pwd)
其中:
-f /tmp/pom.xml.tmp指定临时pom文件的路径-Dmaven.multiModuleProjectDirectory=$(pwd)把当前执行命令的目录(项目根目录)设为Maven的项目基础目录
针对开头的示例目录,执行这条命令就能让Maven自动在当前目录的src下查找源码,输出的target目录也会生成在项目根目录下,完全不需要修改pom.xml的任何配置,所有插件都会基于指定的项目根目录工作,避免了手动配置路径带来的兼容性问题。
内容的提问来源于stack exchange,提问作者Maciej Walkowiak
相关产品推荐
相关产品推荐

