Java命令直接运行源码时,是否有类似-no warn/Xlint:none的警告抑制选项?
Java直接运行源码时如何抑制警告
问题场景
我们知道javac可以用-Xlint:none或-nowarn压制警告,但如果用java命令直接编译并运行源码(基于JEP-330、JEP-458的特性),有没有不用改源码就能压制警告的方法?
比如这段示例代码:
public class UncheckedWarning { public static void main(String[] args) throws Exception { System.out.println(Object.class.newInstance()); } }
直接执行java UncheckedWarning.java会输出 deprecation 警告:
$ java UncheckedWarning.java UncheckedWarning.java:3: warning: [deprecation] newInstance() in Class has been deprecated System.out.println(Object.class.newInstance()); ^ where T is a type-variable: T extends Object declared in class Class 1 warning java.lang.Object@3c0a50da
可行方案
当然有,java命令支持通过--compile-option(缩写-C)参数,把javac的警告控制选项传递给底层的编译流程,具体用法如下:
压制所有警告:直接传递
-nowarn给javacjava -C -nowarn UncheckedWarning.java仅压制特定类型警告:比如只关闭 deprecation 警告
java -C -Xlint:-deprecation UncheckedWarning.java全局生效(不推荐):如果不想每次都加参数,可以设置环境变量
JAVA_TOOL_OPTIONS,让所有java命令都自动带上编译参数export JAVA_TOOL_OPTIONS="-C -nowarn" java UncheckedWarning.java
简单来说,就是用-C把javac的警告抑制选项透传进去,实现和单独编译时一样的效果,完全不用修改源码。
内容的提问来源于stack exchange,提问作者Maciej Mikosik
相关产品推荐
相关产品推荐

