Я хочу, чтобы моя сборка Maven завершилась неудачей, когда я забыл объявить serialVersionUID в классе Serializable
. С 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
получает только один аргумент, содержащий -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-элементов, не нарушая плагин release?