Groovy编译器是否能够生成有关弃用代码的警告?

Groovy编译器是否能够生成有关弃用代码的警告?,groovy,Groovy,我正在使用Maven的Ant Run插件来构建我的项目。任务使用Groovy编译器编译我的代码。我做了一些调查,Groovy编译器似乎不像javac那样有一个弃用标志。如果我们正在调用用@Deprecated修饰的方法,我需要我的编译失败,或者至少生成警告。不幸的是,在调用不推荐的API时,没有任何选项可以让groovyc不那么自由。唯一的例外是使用Groovy编译器编译Java类。默认情况下,它不会对不推荐的API调用发出警告-以下命令不会向控制台生成任何输出: groovyc SomeCla

我正在使用Maven的Ant Run插件来构建我的项目。任务
使用Groovy编译器编译我的代码。我做了一些调查,Groovy编译器似乎不像javac那样有一个
弃用
标志。如果我们正在调用用
@Deprecated

修饰的方法,我需要我的编译失败,或者至少生成警告。不幸的是,在调用不推荐的API时,没有任何选项可以让
groovyc
不那么自由。唯一的例外是使用Groovy编译器编译Java类。默认情况下,它不会对不推荐的API调用发出警告-以下命令不会向控制台生成任何输出:

groovyc SomeClass.java
但是如果您使用联合编译(
-j
开关),那么对于Java类,Groovy编译器将回退到Java编译器:

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.
/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
然后,当您添加
-FXlint
时,您将获得更多关于所发生事件的详细输出:

groovyc -j -FXlint SomeClass.java
输出:

Note: /tmp/sandbox/src/main/groovy/SomeClass.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
/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

但是它只适用于使用Groovy编译器编译的Java类。编译Groovy类不会产生相同的效果-所有不推荐的API调用都会被悄悄地接受,不管您是添加了
@CompileStatic
还是/和
@TypeChecked
,以使最终字节码尽可能接近Java字节码

groovyc有a-F和-J选项,您可以通过,例如groovyc-J-FXlint Test.groovy或groovyc-J-JXlint=deprecation。您试过了吗?这个选项似乎只适用于使用groovy编译器编译java文件的情况。