java - maven-release-plugin 部署目标在 git 存储库中具有顶级文件夹的项目上失败

标签 java git maven maven-release-plugin

我们有一个在 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/

相关文章:

git - debian 包装信息的版本控制

git - 如何将一个本地 git 仓库推送到两个不同的 github 帐户

java - 使用 Maven 配置构建 Spring Boot 配置文件特定的属性

java - 依赖:copy mojo used in command line and configured same pulgin in pom file as build plugin有什么区别

java - windows 无法识别类路径和项目文件

javascript - 集合自然分为子集合的 REST API 设计

java - 不兼容的类型不允许在 JOOQ dsl 中合并子查询

java - 使用文档监听器时如何将文本设置为标题?

git - 如何永久设置 Git 插件超时的 Jenkins 系统属性?

apache - 在 Ubuntu 上安装 Mahout 时 Maven BUILD FAILURE