我们有一个在 GIT 存储库中构建的 Maven 项目,其中包含以下文件夹:
Parent project folder
------> pom.xml
------> Child 1 project folder
------> ------> pom.xml
------> Child 2 project folder
------> ------> pom.xml
我们现在正尝试使用 maven-release-plugin 来发布代码。
当运行“mvn release:prepare release:perform”时,准备阶段工作正常,但是当执行阶段运行时,我们得到以下错误:
[INFO] --- maven-release-plugin:2.0:perform (default-cli) @ PARENTPROJECT ---
[INFO] Checking out the project to perform the release ...
[INFO] Executing: cmd.exe /X /C "git clone ssh://GITREPO.git "C:\CI\Jenkins\jobs\test 6\workspace\Parent project folder\target\checkout"
"
[INFO] Working directory: C:\CI\Jenkins\jobs\test 6\workspace\Parent project folder\target
[INFO] Executing: cmd.exe /X /C "git fetch ssh://GITREPO.git"
[INFO] Working directory: C:\CI\Jenkins\jobs\test 6\workspace\Parent project folder\target\checkout
[INFO] Executing: cmd.exe /X /C "git checkout PARENTPROJECT-0.0.0.0.2"
[INFO] Working directory: C:\CI\Jenkins\jobs\test 6\workspace\Parent project folder\target\checkout
[INFO] Executing: cmd.exe /X /C "git ls-files"
[INFO] Working directory: C:\CI\Jenkins\jobs\test 6\workspace\Parent project folder\target\checkout
[INFO] Executing goals 'deploy'...
[WARNING] Maven will be executed in interactive mode, but no input stream has been configured for this MavenInvoker instance.
[INFO] [INFO] Scanning for projects...
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] BUILD FAILURE
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] Total time: 0.063s
[INFO] [INFO] Finished at: Fri Feb 07 15:07:26 GMT 2014
[INFO] [INFO] Final Memory: 1M/15M
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [ERROR] The goal you specified requires a project to execute but there is no POM in this directory (C:\CI\Jenkins\jobs\test 6\workspace\Parent project folder\target\checkout). Please
verify you invoked Maven from the correct directory. -> [Help 1]
查看C:\CI\Jenkins\jobs\test 6\workspace\Parent project folder\target\checkout文件夹,里面确实没有POM文件。这是因为“git checkout”已经检查了针对“父项目文件夹”创建的标签。
因此,在 checkout 文件夹中,我们有“父项目文件夹”而没有 POM 文件,因为 POM 位于“父项目文件夹”中,而不是位于存储库的顶层。
我们知道这个问题的解决方案是将 POM 移动到存储库的顶层(即“父项目文件夹”之外),但我们想探索是否有任何替代解决方案。
我们在 SVN 中有一个类似的项目设置,发布插件工作正常。这似乎是因为在创建标签时,只有“父项目文件夹”中的内容出现在标签中,因此 POM 被 check out 到目标中。在 git 中,实际的“父项目文件夹”被标记,因此它被 check out 到目标中,POM 位于其中。
在实际运行发布插件时我们可以做些什么来告诉它运行目标,例如 deploy to run from 'C:\CI\Jenkins\jobs\test 6\workspace\Parent project folder\target\checkout\Parent project folder' 而不是 'C:\CI\Jenkins\jobs\test 6\workspace\Parent project folder\target\checkout'?
我预计这是一个不可能的事情,但我认为这值得一问。
最佳答案
所以如果我没看错的话,听起来问题是当 release:perform
进行内部调用时 mvn deploy
它找不到父级pom 文件,因为它在子目录中更深一层。
然后解决方案是告诉内部调用在哪里可以找到 pom 文件:
mvn release:perform
到
mvn release:perform -Dgoals='deploy -f parent_project_folder/pom.xml'
希望对您有所帮助。
关于java - maven-release-plugin 部署目标在 git 存储库中具有顶级文件夹的项目上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21632947/