如何从另一个目录运行 Maven(没有 cd 到项目目录)?
Posted
技术标签:
【中文标题】如何从另一个目录运行 Maven(没有 cd 到项目目录)?【英文标题】:How to run Maven from another directory (without cd to project dir)? 【发布时间】:2011-09-22 15:22:21 【问题描述】:假设我的 maven 项目位于 /some/location/project
并且我当前的位置是 /another/location/
如何在不更改项目位置 cd /some/location/project
的情况下运行 maven build?
【问题讨论】:
@khmarbaise - 我正在尝试使用一些 shell 脚本自动构建和部署,但总是使用 cd 更改目录并不直接。 @khmarbaise - 您可能希望引用一个目录中或附近的多个文件或文件夹,但您的 pom 和它引用的文件在另一个目录中。 【参考方案1】:您可以使用参数-f
(或--file
)并指定您的pom文件的路径,例如mvn -f /path/to/pom.xml
这运行 maven “就好像”它在工作目录的 /path/to
中一样。
【讨论】:
不,-f 使用特定的 pom 启动 Maven,根据定义, pom 所在的目录是 Maven 的工作目录。我在我的 CI-Server 中使用它在子目录中构建特定模块,我可以向你保证,它可以工作。 相对路径使用点。例如./path/pom.xml
正如邓尼所说,这行不通。当前目录是您所在的位置。你只是在另一个目录中使用 pom。 Maven 不支持这个。
java.lang.IllegalArgumentException: 参数“目录”不是目录
适用于我的大部分项目。不幸的是,一些使用 exec 插件的项目无法以这种方式构建,因为即使配置了工作目录,插件也找不到可执行文件。【参考方案2】:
你可以试试这个:
pushd ../
maven install [...]
popd
【讨论】:
【参考方案3】:对我来说,这样工作:mvn -f /path/to/pom.xml [goals]
【讨论】:
【参考方案4】:我认为 maven 不支持这一点。如果您在 Unix 上,并且不想离开当前目录,您可以使用一个小的 shell 脚本、一个 shell 函数或只是一个子 shell:
user@host ~/project$ (cd ~/some/location; mvn install)
[ ... mvn build ... ]
user@host ~/project$
作为 bash 函数(您可以将其添加到 ~/.bashrc):
function mvn-there()
DIR="$1"
shift
(cd $DIR; mvn "$@")
user@host ~/project$ mvn-there ~/some/location install)
[ ... mvn build ... ]
user@host ~/project$
我知道这并不能回答具体问题,但可能会为您提供您所追求的。我对 Windows shell 不熟悉,但您应该也可以在那里找到类似的解决方案。
问候
【讨论】:
优秀。 mvn -f param 不适用于使用相对路径引用子 pom 的多模块项目。谢谢,这就是我想要的。 让它在 Mac 上运行(我知道它可以在 Linux 上运行)。在 Windows(或任何平台)上,你应该能够保存当前路径,cd 到你的项目,在那里做 mvn 的东西,然后 cd 回到脚本中。唯一的问题是脚本是否中途停止。以上是关于如何从另一个目录运行 Maven(没有 cd 到项目目录)?的主要内容,如果未能解决你的问题,请参考以下文章