Jak przekazać wiele argumentów wiersza polecenia javac, z których niektóre obejmują dwukropek, bez łamania wtyczki wydania Maven?
Chcę, aby moja kompilacja Maven nie powiodła się, gdy zapomnę zadeklarować serialVersionUID w aSerializable
klasa. Zjavac
, to łatwe:
$ javac -Xlint:serial -Werror Source.java
Bezpośrednie tłumaczenie tego na Maven nie działa:
<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>
ThecompilerArgument
jest cytowany, takjavac
otrzymuje tylko jeden argument zawierający-Xlint:serial -Werror
, zamiast-Xlint:serial
i-Werror
jako oddzielne argumenty. Więc czytasz dokumenty i znajdź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>
To wygląda dziwnie - robi dwukropekserial
element wXlint
przestrzeń nazw, która nie jest nigdzie zadeklarowana - ale działa ... dopóki nie chcesz zrobić wydania:
$ 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.
Najwyraźniej zwykły czytnik POM obsługuje przestrzenie nazw XML w inny sposób niż ten używany przez wtyczkę wydania.
Więc jak mam przejśćjavac
wiele przełączników wiersza polecenia, gdy niektóre z tych przełączników zawierają znaki, które nie są poprawne dla zwykłych elementów XML, bez zrywania wtyczki wydania?