¿Cómo paso varios argumentos de línea de comando de javac, algunos de los cuales incluyen dos puntos, sin romper el complemento de lanzamiento de Maven?
Quiero hacer que mi compilación de Maven falle cuando olvido declarar serialVersionUIDs en unaSerializable
clase. Conjavac
, eso es fácil:
$ javac -Xlint:serial -Werror Source.java
La traducción directa a Maven no funciona:
<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>
loscompilerArgument
se cita, entoncesjavac
recibe solo un argumento, que contiene-Xlint:serial -Werror
, en lugar de-Xlint:serial
y-Werror
como argumentos separados. Así que lees los documentos, y encuentrascompilerArguments
:
<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>
Esto se ve raro - el colon haceserial
elemento en elXlint
espacio de nombres, que no se declara en ninguna parte, pero funciona ... hasta que quiera hacer un lanzamiento:
$ 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.
Aparentemente, el lector POM regular maneja los espacios de nombres XML de una manera diferente a la utilizada por el complemento de lanzamiento.
Entonces, ¿cómo paso?javac
múltiples interruptores de línea de comandos cuando algunos de esos interruptores contienen caracteres que no son válidos para elementos XML simples, sin romper el complemento de lanzamiento?