我目前正在使用Intellij 15.0.6中的Gradle 3.3项目。
我正在使用Gradle APT plugin向我的类路径添加注释处理器。
在生成Java类文件时它可以正常工作,但是我需要能够在构建目录生成的目录中等效的resources
目录中生成XML源。
这是我目前的构建目录结构:
如您所见,它不包含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类相同的包中。然而,这不是我想要的行为。我需要它们驻留在类路径中。
经过广泛的研究,我没有在其他任何地方发现这个例外。
感谢任何帮助。感谢您阅读此问题。
答案 0 :(得分:1)
StandardLocation.CLASS_PATH
仅用于输入,不用于输出。唯一的输出位置是SOURCE_OUPUT
(build/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