当我构建我的项目时,我收到如下错误:
[INFO] SomeClass.java: Some input files use or override a deprecated API.
[INFO] SomeClass.java: Recompile with -Xlint:deprecation for details.
[INFO] SomeClass.java: Some input files use unchecked or unsafe operations.
[INFO] SomeClass.java: Recompile with -Xlint:unchecked for details.
Run Code Online (Sandbox Code Playgroud)
但是当我放入-Xlint:deprecation或-Xlint:unchecked放入我的MAVEN_OPTS或.mvn/maven.config我得到:
$ MAVEN_OPTS="-Xlint:unchecked " mvn -B clean test
Unrecognized option: -Xlint:unchecked
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?
-Xlint 是编译器选项,而不是 maven 选项或 jvm 选项。
在命令行 maven 接受,-Xlint但它将其视为-Xmaven 选项(“调试”)并忽略其余部分。所以没有达到预期的效果。
在这两个编译器选项的特定情况下,您可以设置 Maven 属性,从而设置所需的编译器选项。将这些放在项目的.mvn/maven.config、MAVEN_OPTSenv var 或命令行中:
-Dmaven.compiler.showWarnings=true
-Dmaven.compiler.showDeprecation=true
Run Code Online (Sandbox Code Playgroud)
请参阅maven 编译器插件。
您还可以compilerArgs在您的pom.xml或 Mavensettings.xml用户定义的配置文件中使用该属性。我没有看到将 List 值属性设置为系统属性的方法。你不能使用compilerArgument,compilerArguments或者,他们没有用户属性。
您可能还会发现控制编译器的日志级别很有用;例如,您可以通过以下方式使这些警告静音:
-Dorg.slf4j.simpleLogger.log.org.apache.maven.plugin.compiler.CompilerMojo=warn
Run Code Online (Sandbox Code Playgroud)
需要注意的是明确设置-Dmaven.compiler.showWarnings=false将无法抑制-Xlint的消息。请参阅如何抑制有关已弃用 api 的 javac 警告?. Maven 似乎没有提供-Xlint:-deprecated -Xlint:-unchecked在命令行上设置相关属性的方法。您也不能直接设置它们 settings.xml,因为您无法设置单个插件属性。它必须是pom.xml.