我们在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项目文件夹\ target \ checkout文件夹时,确实没有POM文件。这是因为'git checkout'检出了创建的标签,该标签是针对'父项目文件夹'的。
因此,在结帐文件夹中,我们有“父项目文件夹”而没有POM文件,因为POM位于“父项目文件夹”内,而不是位于存储库的顶层。
我们知道解决这个问题的方法是将POM移到存储库的顶层(即“父项目文件夹”之外),但是想探索是否有其他解决方案。
我们在SVN中有类似的项目设置,发布插件工作正常。这似乎是因为创建标记时,只有“父项目文件夹”中的内容出现在标记中,因此POM将被签出到目标中。在git中,标记了实际的“父项目文件夹”,因此将其签出到目标中并且POM存在于其中。
在实际运行发布插件时,我们可以做些什么来告诉它运行目标,例如从'C:\ CI \ Jenkins \ jobs \ test 6 \ workspace \ Parent项目文件夹\ target \ checkout运行部署\父项目文件夹'而不是'C:\ CI \ Jenkins \ jobs \ test 6 \ workspace \ Parent project folder \ target \ checkout'?
我希望这是一个很长的镜头,但我认为值得一提。
答案 0 :(得分:4)
所以,如果我正确地读你,听起来问题是当release:perform
使其内部调用mvn deploy
时它无法找到父pom文件,因为它被深埋在一层一个子目录。
然后解决方案是告诉内部调用在哪里找到pom文件:
mvn release:perform
到
mvn release:perform -Dgoals='deploy -f parent_project_folder/pom.xml'
希望有所帮助。