当我忘记在类中声明 serialVersionUIDs 时,我想让我的 Maven 构建失败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 元素无效的字符时,如何在不破坏发布插件的情况下传递多个命令行开关?