我使用maven发布插件。在我的pom exists和Ant任务中,它会自动修复一些带有附加信息的属性文件。此修复程序不应该在SCM中。 但maven没有成功完成错误:
Cannot prepare the release because you have local modifications
是否可以设置一些参数以不检查本地修改?
感谢。
答案 0 :(得分:30)
我对maven-release-plugin不是很熟悉,但我可以看到有一个 checkModificationExcludes 属性可以用于你的目的。配置应该有点像这样:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.2.2</version>
<configuration>
...
<checkModificationExcludes>
<checkModificationExclude>file_1</checkModificationExclude>
<checkModificationExclude>dir_1/file_2</checkModificationExclude>
</checkModificationExcludes>
</configuration>
</plugin>
答案 1 :(得分:3)
我们试图从jenkins运行发布但它总是以相同的消息失败...
Cannot prepare the release because you have local modifications
......这很奇怪,因为我们在发布之前使用jenkins检查并构建最新的资源。
我们终于发现问题是我们在Windows节点上构建并且一些文件路径太长导致maven-release-plugin抱怨本地修改。切换到linux节点解决了这个问题。
答案 2 :(得分:1)
我建议修复您的构建过程,以便它不会“修复”SCM下的文件。有几种方法可以做到这一点,最简单的方法是将有问题的属性文件复制到${project.build.outputDirectory}
下的某个目录,然后在这些文件上运行Ant脚本,而不是原件
答案 3 :(得分:1)
@AndrewLogvinov的答案就在那里。 The other half is mentioned in this:
我发现了这个比较 在org.apache.maven.shared.release.phase.ScmCheckModificationsPhase.execute()中 剥离路径并仅比较文件名。所以,我改变了我的pom而忽略了 application.properties而不是$ {thewholepath} / applications属性。 瞧,成功。
出于某种奇怪的原因,您无法在此标记中包含路径。您只能指定文件名。
答案 4 :(得分:1)
从源代码管理中删除我的项目target
文件夹为我解决了这个问题。
答案 5 :(得分:0)
就我而言,它在Windows上可以通过将作业名称重命名为较短的长度(约20个字符)来实现。
就我而言,詹金斯的工作名称和svn分支名称都更长(约40个字符)。 如果某些文件路径太长,则会导致Maven-release-plugin抱怨本地修改。詹金(Jenkin)用工作名称
创建一个本地工作区例如对于以下内容,Jenkins在发布时的工作将开始抱怨本地修改。
D:\dev.env\data\jenkins\jobs\<LongerJobName>\workspace\<LongerBranchName>\testCommonJar\src\main\java\com.example.webservice.service.TestServiceImpl.java