【问题标题】:How do I pass -Xlint:deprecation or -Xlint:unchecked to Maven?如何将 -Xlint:deprecation 或 -Xlint:unchecked 传递给 Maven?
【发布时间】:2019-05-16 04:48:21
【问题描述】:

当我构建我的项目时,我收到如下错误:

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

但是当我将-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.

什么给了?

【问题讨论】:

    标签: java maven


    【解决方案1】:

    -Xlint 是编译器选项,不是 maven 选项或 jvm 选项。

    在命令行上,maven 接受-Xlint,但它会将其视为-X maven 选项(“调试”)并忽略其余部分。所以没有达到预期的效果。

    在这两个编译器选项的特定情况下,您可以设置 Maven 属性,从而设置所需的编译器选项。将这些放在项目的.mvn/maven.configMAVEN_OPTS env var 或命令行中:

    -Dmaven.compiler.showWarnings=true
    -Dmaven.compiler.showDeprecation=true
    

    maven compiler plugin

    您还可以在 pom.xml 或 Maven settings.xml 用户定义的配置文件中使用 compilerArgs 属性。我看不到将 List 值属性设置为系统属性的方法。您也不能使用compilerArgumentcompilerArguments,它们是don't have user properties

    您可能还会发现控制编译器的日志记录级别很有用;例如,您可以通过以下方式使这些警告静音:

    -Dorg.slf4j.simpleLogger.log.org.apache.maven.plugin.compiler.CompilerMojo=warn
    

    请注意,显式设置-Dmaven.compiler.showWarnings=false不会抑制-Xlint 消息。见How can I suppress javac warnings about deprecated api?。 Maven 似乎没有提供在命令行上设置相关属性-Xlint:-deprecated -Xlint:-unchecked 的方法。你也不能直接设置它们settings.xml,因为你不能设置单独的插件属性。它必须是pom.xml

    【讨论】:

      猜你喜欢
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 2011-09-18
      • 2020-11-06
      • 2013-02-18
      • 1970-01-01
      相关资源
      最近更新 更多