由于 jenkins 中的本地修改,Maven Release Plugin 中止准备
Maven Release Plugin aborts prepare because of local modifications in jenkins
问题:
当我执行 maven 发布插件的准备目标时出现错误
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.3.2:prepare (default-cli) on project my-artifact-id: Cannot prepare the release because you have local modifications :
[ERROR] [my-project-name\src\main\java\some\packages\SomeJavaSourceFile.java:modified]
...
[ERROR] [my-project-name\src\main\java\some\packages\SomeOtherJavaSourceFile.java:modified]
大约 20 个文件。
详情
- 发布插件是从 Jenkins 执行的。
- SVN配置为"always check out a fresh copy"
- Maven 发布插件与目标一起使用
-Dresume=false clean release:prepare release:perform
- 修改的文件是在上次提交中修改的。
- 执行准备目标时出现错误:
[INFO] --- maven-release-plugin:2.3.2:prepare (default-cli) @ artifact-id
- 发布插件运行过去11次成功(但有时第一次不行,第二次不行)
类似问题
为什么其他问题没有帮助:
- How to disable maven release plugin check local modifications?: 我不想忽略这个文件。他们应该是发布的一部分
- Maven release:prepare : Cannot prepare the release because you have local modifications: 修改的文件不在目标目录下,也不是修改的pom.xml-文件
日志
我试图匿名化,所以你发现一些部分被替换为[替换部分的含义]
Started by user Sergej Werfel
[EnvInject] - Loading node environment variables.
Building remotely on Build in workspace E:\Jenkins\Build\workspace\project-dir
Cleaning local Directory .
Checking out [svn-url] at revision '2016-09-09T10:12:55.444 +0200'
...
A some file
...
AU some other file
AU pom.xml
AU event more files
...
U .
At revision 1639745
no change for [svn-url] since the previous build
Injecting SonarQube environment variables using the configuration: Sonar 5
Parsing POMs
Injecting SonarQube environment variables using the configuration: Sonar 5
using global settings config with name MVN Settings [setting name]
Replacing all maven server entries not found in credentials list is true
Injecting SonarQube environment variables using the configuration: Sonar 5
Injecting SonarQube environment variables using the configuration: Sonar 5
Injecting SonarQube environment variables using the configuration: Sonar 5
Injecting SonarQube environment variables using the configuration: Sonar 5
Injecting SonarQube environment variables using the configuration: Sonar 5
Injecting SonarQube environment variables using the configuration: Sonar 5
Injecting SonarQube environment variables using the configuration: Sonar 5
Established TCP socket on 18423
maven32-agent.jar already up to date
maven32-interceptor.jar already up to date
maven3-interceptor-commons.jar already up to date
[project name] $ "C:\Program Files\Java\jdk1.8.0_51/bin/java" -cp E:\Jenkins\Build\maven32-agent.jar;C:\apache-maven-3.3.9\boot\plexus-classworlds-2.5.2.jar;C:\apache-maven-3.3.9/conf/logging jenkins.maven3.agent.Maven32Main C:\apache-maven-3.3.9 E:\Jenkins\Build\slave.jar E:\Jenkins\Build\maven32-interceptor.jar E:\Jenkins\Build\maven3-interceptor-commons.jar 18423
<===[JENKINS REMOTING CAPACITY]===>channel started
using global settings config with name MVN Settings [setting name]
Replacing all maven server entries not found in credentials list is true
Executing Maven: -B -f [path to root pom]\pom.xml -gs [path to settings]\global-settings1467677761792043752.xml -DdevelopmentVersion=0.1.13-SNAPSHOT -DreleaseVersion=0.1.12 -Dresume=false -DdryRun=true clean release:prepare
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] [project name]
[INFO] module-1
[INFO] module-2
[INFO] module-3
[INFO] module-4
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building root project name 0.1.12-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ root-project ---
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building module-1 0.1.12-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ module-1 ---
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building module-2 0.1.12-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ module-2 ---
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building module-3 0.1.12-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ module-3 ---
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building module-4 0.1.12-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ module-4 ---
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building project name 0.1.12-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-release-plugin:2.3.2:prepare (default-cli) @ root-project ---
[INFO] Verifying that there are no local modifications...
[INFO] ignoring changes on: **\pom.xml.next, **\release.properties, **\pom.xml.branch, **\pom.xml.tag, **\pom.xml.backup, **\pom.xml.releaseBackup
[INFO] Executing: cmd.exe /X /C "svn --non-interactive status"
[INFO] Working directory: E:\Jenkins\Build\workspace\project-dir
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] root-project ................................ FAILURE [ 1.016 s]
[INFO] module-1 .......................... SUCCESS [ 0.047 s]
[INFO] module-2 ............................ SUCCESS [ 0.049 s]
[INFO] module-3 ....................... SUCCESS [ 0.084 s]
[INFO] module-4 ........................ SUCCESS [ 0.068 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.089 s
[INFO] Finished at: 2016-09-09T10:13:08+02:00
[INFO] Final Memory: 15M/234M
[INFO] ------------------------------------------------------------------------
Waiting for Jenkins to finish collecting data
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.3.2:prepare (default-cli) on project root-project: Cannot prepare the release because you have local modifications :
[ERROR] [module-1\src\test\java\package\SomeJavaTest.java:modified]
[ERROR] [... some other files ...]
[ERROR] [module-2\src\main\java\package\SomeJavaFile.java:modified]
[ERROR] [... some other files ...]
[ERROR] [module-2\src\test\java\package\AnOtherTestTest.java:modified]
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[JENKINS] Archiving E:\Jenkins\Build\workspace\project-dir\module-1\pom.xml to [some path]/0.1.12-SNAPSHOT/module-1-0.1.12-SNAPSHOT.pom
[other modules]
[M2Release] its only a dryRun, no need to mark it for keep
channel stopped
Warning: you have no plugins providing access control for builds, so falling back to legacy behavior of permitting any downstream builds to be triggered
Finished: FAILURE
项目结构
- root-dir
|- module-1-dir
|'- module-1-pom
|- module-2-dir
|'- module-1-pom
| ...
'-root-pom
概览
提交的文件只有 \n
( = lf
= line feed
) 作为以 subversion 结尾的行。他们是在 windows 机器上签出的,所以结尾变成了 \r\n
(= crlf
= carriage return and line feed
)。因此文件已更改为 "modified"。要修复该文件,请直接以 \r\n
-ending 结尾。
查找方式
- 在 Jenkins 上重新签出后,您可以 运行 "svn status" 作为脚本查看,文件被标记为“已修改”的确切信息。
- 当您调用 "svn diff" 时,您会看到每个文件的每一行都不同,但您看不到任何差异 => 不可见的变化
- 从 jenkins 工作区打开一个这样修改过的文件,从 svn repo 打开一个这样的修改文件,并使用可以可视化不可见字符的编辑器查看它们(例如,工具栏中带有 "show all characters" 的 Notepad++)
理由
发生这种情况的原因是 git-svn 的错误使用。我在没有更改 "autocrlf" 设置的情况下使用 git-svn 检查了该文件。 Git 在提交到本地回购时将结尾更改为 \n
。当推送到 svn 时,行结尾仍然是 \n
.
修复
- 使用 svn 客户端结帐,更改行结尾,提交。
- 或在git中将"autocrlf"设置为
false
。使用 git-svn 检查,更改行尾,dcommit。
以后如何避免
Git 有一个设置 "autocrlf"。关闭它似乎可以解决问题
执行以下步骤后已解决
- scm 标签(连接、developerconnection 和 url)和发布插件从父 pom 移动到子 pom。
- 在 maven 命令中使用了
-B
选项
示例:mvn -B -f pom.xml -DdevelopmentVersion=<developmentVersion> -DreleaseVersion=<releaseVersion> -Dusername=<scmUserName> -Dtag=<releaseVersion> -Dresume=false release:prepare release:perform versions:use-latest-releases -Dpassword=<scmPassword>
问题:
当我执行 maven 发布插件的准备目标时出现错误
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.3.2:prepare (default-cli) on project my-artifact-id: Cannot prepare the release because you have local modifications :
[ERROR] [my-project-name\src\main\java\some\packages\SomeJavaSourceFile.java:modified]
...
[ERROR] [my-project-name\src\main\java\some\packages\SomeOtherJavaSourceFile.java:modified]
大约 20 个文件。
详情
- 发布插件是从 Jenkins 执行的。
- SVN配置为"always check out a fresh copy"
- Maven 发布插件与目标一起使用
-Dresume=false clean release:prepare release:perform
- 修改的文件是在上次提交中修改的。
- 执行准备目标时出现错误:
[INFO] --- maven-release-plugin:2.3.2:prepare (default-cli) @ artifact-id
- 发布插件运行过去11次成功(但有时第一次不行,第二次不行)
类似问题
为什么其他问题没有帮助:
- How to disable maven release plugin check local modifications?: 我不想忽略这个文件。他们应该是发布的一部分
- Maven release:prepare : Cannot prepare the release because you have local modifications: 修改的文件不在目标目录下,也不是修改的pom.xml-文件
日志
我试图匿名化,所以你发现一些部分被替换为[替换部分的含义]
Started by user Sergej Werfel
[EnvInject] - Loading node environment variables.
Building remotely on Build in workspace E:\Jenkins\Build\workspace\project-dir
Cleaning local Directory .
Checking out [svn-url] at revision '2016-09-09T10:12:55.444 +0200'
...
A some file
...
AU some other file
AU pom.xml
AU event more files
...
U .
At revision 1639745
no change for [svn-url] since the previous build
Injecting SonarQube environment variables using the configuration: Sonar 5
Parsing POMs
Injecting SonarQube environment variables using the configuration: Sonar 5
using global settings config with name MVN Settings [setting name]
Replacing all maven server entries not found in credentials list is true
Injecting SonarQube environment variables using the configuration: Sonar 5
Injecting SonarQube environment variables using the configuration: Sonar 5
Injecting SonarQube environment variables using the configuration: Sonar 5
Injecting SonarQube environment variables using the configuration: Sonar 5
Injecting SonarQube environment variables using the configuration: Sonar 5
Injecting SonarQube environment variables using the configuration: Sonar 5
Injecting SonarQube environment variables using the configuration: Sonar 5
Established TCP socket on 18423
maven32-agent.jar already up to date
maven32-interceptor.jar already up to date
maven3-interceptor-commons.jar already up to date
[project name] $ "C:\Program Files\Java\jdk1.8.0_51/bin/java" -cp E:\Jenkins\Build\maven32-agent.jar;C:\apache-maven-3.3.9\boot\plexus-classworlds-2.5.2.jar;C:\apache-maven-3.3.9/conf/logging jenkins.maven3.agent.Maven32Main C:\apache-maven-3.3.9 E:\Jenkins\Build\slave.jar E:\Jenkins\Build\maven32-interceptor.jar E:\Jenkins\Build\maven3-interceptor-commons.jar 18423
<===[JENKINS REMOTING CAPACITY]===>channel started
using global settings config with name MVN Settings [setting name]
Replacing all maven server entries not found in credentials list is true
Executing Maven: -B -f [path to root pom]\pom.xml -gs [path to settings]\global-settings1467677761792043752.xml -DdevelopmentVersion=0.1.13-SNAPSHOT -DreleaseVersion=0.1.12 -Dresume=false -DdryRun=true clean release:prepare
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] [project name]
[INFO] module-1
[INFO] module-2
[INFO] module-3
[INFO] module-4
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building root project name 0.1.12-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ root-project ---
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building module-1 0.1.12-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ module-1 ---
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building module-2 0.1.12-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ module-2 ---
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building module-3 0.1.12-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ module-3 ---
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building module-4 0.1.12-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ module-4 ---
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building project name 0.1.12-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-release-plugin:2.3.2:prepare (default-cli) @ root-project ---
[INFO] Verifying that there are no local modifications...
[INFO] ignoring changes on: **\pom.xml.next, **\release.properties, **\pom.xml.branch, **\pom.xml.tag, **\pom.xml.backup, **\pom.xml.releaseBackup
[INFO] Executing: cmd.exe /X /C "svn --non-interactive status"
[INFO] Working directory: E:\Jenkins\Build\workspace\project-dir
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] root-project ................................ FAILURE [ 1.016 s]
[INFO] module-1 .......................... SUCCESS [ 0.047 s]
[INFO] module-2 ............................ SUCCESS [ 0.049 s]
[INFO] module-3 ....................... SUCCESS [ 0.084 s]
[INFO] module-4 ........................ SUCCESS [ 0.068 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.089 s
[INFO] Finished at: 2016-09-09T10:13:08+02:00
[INFO] Final Memory: 15M/234M
[INFO] ------------------------------------------------------------------------
Waiting for Jenkins to finish collecting data
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.3.2:prepare (default-cli) on project root-project: Cannot prepare the release because you have local modifications :
[ERROR] [module-1\src\test\java\package\SomeJavaTest.java:modified]
[ERROR] [... some other files ...]
[ERROR] [module-2\src\main\java\package\SomeJavaFile.java:modified]
[ERROR] [... some other files ...]
[ERROR] [module-2\src\test\java\package\AnOtherTestTest.java:modified]
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[JENKINS] Archiving E:\Jenkins\Build\workspace\project-dir\module-1\pom.xml to [some path]/0.1.12-SNAPSHOT/module-1-0.1.12-SNAPSHOT.pom
[other modules]
[M2Release] its only a dryRun, no need to mark it for keep
channel stopped
Warning: you have no plugins providing access control for builds, so falling back to legacy behavior of permitting any downstream builds to be triggered
Finished: FAILURE
项目结构
- root-dir
|- module-1-dir
|'- module-1-pom
|- module-2-dir
|'- module-1-pom
| ...
'-root-pom
概览
提交的文件只有 \n
( = lf
= line feed
) 作为以 subversion 结尾的行。他们是在 windows 机器上签出的,所以结尾变成了 \r\n
(= crlf
= carriage return and line feed
)。因此文件已更改为 "modified"。要修复该文件,请直接以 \r\n
-ending 结尾。
查找方式
- 在 Jenkins 上重新签出后,您可以 运行 "svn status" 作为脚本查看,文件被标记为“已修改”的确切信息。
- 当您调用 "svn diff" 时,您会看到每个文件的每一行都不同,但您看不到任何差异 => 不可见的变化
- 从 jenkins 工作区打开一个这样修改过的文件,从 svn repo 打开一个这样的修改文件,并使用可以可视化不可见字符的编辑器查看它们(例如,工具栏中带有 "show all characters" 的 Notepad++)
理由
发生这种情况的原因是 git-svn 的错误使用。我在没有更改 "autocrlf" 设置的情况下使用 git-svn 检查了该文件。 Git 在提交到本地回购时将结尾更改为 \n
。当推送到 svn 时,行结尾仍然是 \n
.
修复
- 使用 svn 客户端结帐,更改行结尾,提交。
- 或在git中将"autocrlf"设置为
false
。使用 git-svn 检查,更改行尾,dcommit。
以后如何避免
Git 有一个设置 "autocrlf"。关闭它似乎可以解决问题
执行以下步骤后已解决
- scm 标签(连接、developerconnection 和 url)和发布插件从父 pom 移动到子 pom。
- 在 maven 命令中使用了
-B
选项 示例:mvn -B -f pom.xml -DdevelopmentVersion=<developmentVersion> -DreleaseVersion=<releaseVersion> -Dusername=<scmUserName> -Dtag=<releaseVersion> -Dresume=false release:prepare release:perform versions:use-latest-releases -Dpassword=<scmPassword>