Maven enforcerのEnforcer rules have failed


最近はScalaデベロッパーなのでビルドツールはsbtを使っているのですが、やはりたまにmavenにお目にかかるときがあります。MavenのOSSをビルドするから、という理由なのですが。

local環境ではmvn deployが通っても、なぜかCircleCI上では通らない。こういうエラーが出ます。

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:1.4.1:enforce (enforce-versions) on project spark-parent_2.10: Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed. -> [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/MojoExecutionException

Maven enforcerというのが失敗しています。Maven enforcerはJavaやMavenなどのバージョンの制約を定義して、意図しないビルドを防ぐものです。

具体的には例えばこれ。

https://github.com/cloudera/spark/blob/cdh5-1.6.0_5.8.2/pom.xml#L1931-L1933

mavenのversionを制限してます。

実際にエラーのところでLook above for specific messagesと言っているので、少し上のログを見ると・・・

[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireMavenVersion failed with message:
Detected Maven Version: 3.2.5 is not in the allowed range 3.3.3.

CircleCI上のmavenのversionが3.2.5で、pom.xmlの方は3.3.3を要求してるからNGということでした。簡単ですね。

強制的に無視したい場合は-Denforcer.skip=trueをmvnコマンドにつければOKです。どうなるかわかりませんけども。

以上です