Como faço para passar vários argumentos de linha de comando do javac, alguns dos quais incluem dois pontos, sem quebrar o plugin de liberação do Maven?

Eu quero fazer o meu Maven construir falhar quando me esqueço de declarar serialVersionUIDs em umSerializable classe. Comjavac, isso é fácil:

$ javac -Xlint:serial -Werror Source.java

Traduzir diretamente para o Maven não 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>

ocompilerArgument é citado, entãojavac recebe apenas um argumento, contendo-Xlint:serial -Werror, ao invés de-Xlint:serial e-Werror como argumentos separados. Então você lê os documentos e encontracompilerArguments:

        <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>

Isso parece estranho - o cólon fazserial elemento noXlint namespace, que não é declarado em nenhum lugar - mas funciona ... até que você queira fazer um release:

$ 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, o leitor POM normal manipula namespaces XML de uma maneira diferente daquela usada pelo plug-in de lançamento.

Então, como eu passojavac várias opções de linha de comando quando alguns desses switches contêm caracteres que não são válidos para elementos XML simples, sem interromper o plug-in de lançamento?

questionAnswers(4)

yourAnswerToTheQuestion