You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 20:50:26