使用注释处理器将XML资源生成到类路径中

时间:2017-03-08 16:52:36

标签: annotation-processing

我目前正在使用Intellij 15.0.6中的Gradle 3.3项目。

我正在使用Gradle APT plugin向我的类路径添加注释处理器。

在生成Java类文件时它可以正常工作,但是我需要能够在构建目录生成的目录中等效的resources目录中生成XML源。

这是我目前的构建目录结构:

Project Build Directory Image

如您所见,它不包含resources目录,我怀疑这可能是导致此问题的原因。

我通过./gradlew assemble运行我的注释处理器时收到的当前异常是:java.lang.IllegalArgumentException: Resource creation not supported in location CLASS_PATH

我在注释处理器中使用的代码,用于生成xml文件:

FileObject source = processingEnv.getFiler() .createResource(StandardLocation.CLASS_PATH, "", "ap-test-2.html");

注意:我使用HTML扩展作为测试,XML应该产生相同的结果。

javax.tools.StandardLocation还有其他输出位置:

SOURCE_OUTPUT位置用于将XML放在与src/apt/main中生成的Java类相同的包中。然而,这不是我想要的行为。我需要它们驻留在类路径中。

经过广泛的研究,我没有在其他任何地方发现这个例外。

感谢任何帮助。感谢您阅读此问题。

1 个答案:

答案 0 :(得分:1)

StandardLocation.CLASS_PATH仅用于输入,不用于输出。唯一的输出位置是SOURCE_OUPUTbuild/generated/source/apt/…文件夹),CLASS_OUTPUT(标准Gradle build/classes/…)和NATIVE_HEADER_OUPUT。见https://docs.oracle.com/javase/8/docs/api/javax/tools/StandardLocation.html

JavaC没有类与资源输出的概念,但是如果在编译期间运行注释处理器,那么CLASS_OUTPUT应该可以工作(Gradle应该将所有内容复制到最终目录/ JAR中)。见https://docs.oracle.com/javase/8/docs/technotes/tools/unix/javac.html