如何从另一个目录(没有CD到项目目录)运行Maven?


247

假设我的maven项目位于/some/location/project并且我当前的位置是/another/location/如何在不更改项目位置的情况下运行maven build cd /some/location/project


4
@khmarbaise-我正在尝试使用一些Shell脚本来自动化构建和部署,总是使用cd来更改dir是不直接的。
Ali Shakiba 2011年

@khmarbaise-您可能要引用一个目录中或附近的多个文件或文件夹,但是您引用的pom和文件在另一个目录中。
jyoungdev

Answers:


431

您可以使用参数-f并指定pom文件的路径,例如mvn -f /path/to/pom.xml

这会像/path/to在工作目录中一样运行maven 。


39
不,-f使用该特定的pom启动Maven,根据定义,该pom所在的目录是Maven的工作目录。我在CI服务器中使用它在子目录中构建特定的模块,并且可以向您保证,它可以工作。
dunni

15
使用点作为相对路径。例如./path/pom.xml
Snekse 2013年

3
正如dunni所说,这是行不通的。当前目录就是您所在的位置。你只是在另一个目录中使用pom。Maven不支持此功能。
薄雾

1
java.lang.IllegalArgumentException:参数“ directory”不是目录
Damir Olejar

适用于我的大多数项目。不幸的是,某些使用exec插件的项目无法以这种方式构建,因为即使配置了工作目录,该插件也找不到可执行文件。
user2043553

15

我不认为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并不熟悉,尽管您也应该在那里能够找到类似的解决方案。

问候


4
优秀的。mvn -f param不适用于使用相对路径引用子poms的多模块项目。谢谢,这就是我想要的。
redochka 2015年

1
可以在Mac上运行(我知道它将在Linux上运行)。在Windows(或任何平台)上,您应该能够保存当前路径,将cd保存到您的项目中,在其中执行mvn内容,然后将cd放回脚本中。唯一的问题是脚本中途停止。
Erk


0

您可以尝试以下方法:

pushd ../
maven install [...]
popd
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.