【问题标题】:How to run Maven from another directory (without cd to project dir)?如何从另一个目录运行 Maven(没有 cd 到项目目录)?
【发布时间】:2011-09-22 15:22:21
【问题描述】:

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

【问题讨论】:

  • @khmarbaise - 我正在尝试使用一些 shell 脚本自动构建和部署,但总是使用 cd 更改目录并不直接。
  • @khmarbaise - 您可能希望引用一个目录中或附近的多个文件或文件夹,但您的 pom 和它引用的文件在另一个目录中。

标签: maven


【解决方案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 回到脚本中。唯一的问题是脚本是否中途停止。
      猜你喜欢
      • 2019-06-14
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      • 2017-11-23
      • 2011-01-25
      • 1970-01-01
      相关资源
      最近更新 更多