如何从另一个目录运行 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 到项目目录)?的主要内容,如果未能解决你的问题,请参考以下文章

从另一个目标中调用 maven 目标

如何避免此错误运行maven时没有这样的文件或目录

如何将 python 函数从另一个文件导入 django 视图

使用系统 gcc 命令从另一个运行 c 程序

从另一个目录运行的 JAR 文件?

Maven常用的构建命令