Serializable
クラスで serialVersionUID を宣言するのを忘れたときに、Maven ビルドが失敗するようにしたいと考えています。を使えばjavac
簡単です:
$ javac -Xlint:serial -Werror Source.java
それをMavenに直接翻訳してもうまくいきません:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<compilerArgument>-Xlint:serial -Werror</compilerArgument>
</configuration>
</plugin>
はcompilerArgument
引用符で囲まれているため、個別の引数としてとの代わりにjavac
, を含む 1 つの引数のみを受け取ります。したがって、ドキュメントを読んで、次のことを見つけます。-Xlint:serial -Werror
-Xlint:serial
-Werror
compilerArguments
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<compilerArguments>
<Xlint:serial />
<Werror />
</compilerArguments>
</configuration>
</plugin>
これは奇妙に見えます-コロンは名前空間にserial
要素を作成しXlint
ますが、これはどこにも宣言されていません-しかし、それは機能します...リリースを行うまで:
$ mvn release:prepare
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.3.2:prepare (default-cli) on project my-project: Error reading POM: Error on line 58: The prefix "Xlint" for element "Xlint:serial" is not bound.
どうやら、通常の POM リーダーは、リリース プラグインで使用されるものとは別の方法で XML 名前空間を処理します。
javac
では、複数のコマンド ライン スイッチに、プレーンな XML 要素に対して有効でない文字が含まれている場合、リリース プラグインを壊さずに渡すにはどうすればよいでしょうか?