Ant警告:隐式编译的文件不受注释处理

whi*_*der 7 java ant annotations javac

我在运行Ant构建脚本(Ant 1.8.2,Java 1.6)时收到此警告.

[javac] warning: Implicitly compiled files were not subject to annotation processing.
[javac] Use -proc:none to disable annotation processing or -implicit to specify a policy for implicit compilation.
[javac] 1 warning
Run Code Online (Sandbox Code Playgroud)

添加<compilerarg value="implicit" />产品:

[javac] error: Class names, 'implicit', are only accepted if annotation processing is explicitly requested
[javac] 1 error
Run Code Online (Sandbox Code Playgroud)

添加<compilerarg value="proc:none" />产品:

[javac] javac: invalid flag: proc:none
[javac] Usage: javac <options> <source files>
[javac] use -help for a list of possible options
Run Code Online (Sandbox Code Playgroud)

有人可以了解警告意味着什么,我该如何摆脱它?

Bec*_*ang 0

我创建一个简单的 build.xml

<?xml version="1.0" encoding="UTF-8"?>
<project name="test" default="build" basedir=".">
    <target name="build">
        <javac destdir="bin" srcdir="." includes="**/*.java">
        </javac>
    </target>
</project>
Run Code Online (Sandbox Code Playgroud)

使用引用自定义注释的简单 .java。但不提供源代码。

public class T {
    @TestAnn
    public void test() {
    }
}
Run Code Online (Sandbox Code Playgroud)

ant命令的输出与您的第一个输出相同。我尝试执行javac命令来编译它,但error: cannot find symbol @TestAnn被打印出来。我不知道为什么消息不一样。

然后我添加注释类并再次运行ant命令。构建成功,没有任何警告。

对于你的问题,可能的原因是:

  • java代码引用自定义注解,但找不到注解类
  • 如果注释需要处理器,则基于javac 的注释处理部分。但他们的 jar 不包含服务提供商配置文件。您应该指定-processorpath-processor选项,以便javac可以找到合适的处理器。