Mavenリリースプラグインを使用しています。私のpomには、追加情報でいくつかのプロパティファイルを自動的に修正するAntタスクが存在します。この修正はSCMには含まれないはずです。しかし、Mavenはエラーのために成功して終了しません:
Cannot prepare the release because you have local modifications
ローカルの変更をチェックしないようにいくつかのパラメーターを設定することは可能ですか?
ありがとう。
私は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>
Jenkinsからリリースを実行しようとしましたが、常に同じメッセージで失敗しました...
Cannot prepare the release because you have local modifications
...これは奇妙なことでした。リリースする前にjenkinsを使用して最新のソースをチェックアウトしてビルドしているからです。
最終的に、問題はWindowsノード上に構築していて、一部のファイルパスが長すぎて、maven-release-pluginがローカルの変更について文句を言う原因であることがわかりました。 Linuxノードに切り替えると、この問題は解決しました。
プロジェクトのtarget
フォルダーをソース管理から削除すると、この問題が修正されました。
@AndrewLogvinovの答えは途中です。 残りの半分はこれで言及されています :
Org.Apache.maven.shared.release.phase.ScmCheckModificationsPhase.execute()での比較により、パスが削除され、ファイル名のみが比較されることがわかりました。そこで、$ {thewholepath}/applicationsプロパティではなくapplication.propertiesを無視するようにpomを変更しました。見よ、成功。
奇妙な理由で、このタグにパスを含めることはできません。指定できるのはファイル名のみです。
SCMの下にあるファイルを「修正」しないように、ビルドプロセスを修正することをお勧めします。これを行うにはいくつかの方法があります。最も簡単な方法は、問題のプロパティファイルを${project.build.outputDirectory}
の下のディレクトリにコピーし、元のファイルではなく、これらのファイルに対してAntスクリプトを実行することです。
私の場合、ジョブ名の名前を短い長さ(約20文字)に変更することで、Windowsで機能しました。
私の場合、Jenkinsのジョブ名と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