我正在使用Maven的Ant-Run插件来构建我的项目。任务<groovyc>
使用Groovy编译器来编译我的代码。我进行了一些调查,似乎Groovy编译器没有像deprecation
那样的javac
标志。如果我们要调用用@Deprecated
答案 0 :(得分:2)
不幸的是,如果要调用已弃用的API,则无法选择降低?
的自由度。唯一的例外是使用Groovy编译器编译Java类时。默认情况下,它不会对过时的API调用发出警告-以下命令不会向控制台产生任何输出:
groovyc
但是,如果您使用联合编译(groovyc SomeClass.java
开关),那么在Java类的情况下,Groovy编译器将回退到Java编译器:
-j
输出:
groovyc -j SomeClass.java
然后,当您添加Note: /tmp/sandbox/src/main/groovy/SomeClass.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
时,您将获得关于所发生事件的更多详细输出:
-FXlint
输出:
groovyc -j -FXlint SomeClass.java
但是它仅适用于使用Groovy编译器编译的Java类。编译Groovy类不会产生相同的效果-所有已弃用的API调用都会被静默接受,无论您是否添加了/tmp/sandbox/src/main/groovy/SomeClass.java.java:6: warning: [deprecation] Date(int,int,int) in Date has been deprecated
System.out.println(new Date(2018, 3, 3).getYear());
^
/tmp/sandbox/src/main/groovy/SomeClass.java:6: warning: [deprecation] getYear() in Date has been deprecated
System.out.println(new Date(2018, 3, 3).getYear());
^
4 warnings
或/和@CompileStatic
来使最终字节码尽可能接近Java代码。