Groovy编译器是否能够生成有关不推荐使用的代码的警告?

时间:2018-07-30 19:17:38

标签: groovy

我正在使用Maven的Ant-Run插件来构建我的项目。任务<groovyc>使用Groovy编译器来编译我的代码。我进行了一些调查,似乎Groovy编译器没有像deprecation那样的javac标志。如果我们要调用用@Deprecated

装饰的方法,我需要使编译失败或至少生成警告。

1 个答案:

答案 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代码。