使用注释处理器将 XML 资源生成到类路径中
Generating XML Resources into Classpath using Annotation Processors
我目前正在 Intellij 15.0.6 中开发 Gradle 3.3 项目。
我正在使用 Gradle APT plugin 将注释处理器添加到我的 class 路径。
它在生成 Java class 文件时工作正常,但是我需要能够在生成目录生成的 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 放置在与生成的 Java classes 相同的包中,在 src/apt/main
中。然而,这不是我想要的行为。我需要它们驻留在 class 路径中。
经过广泛研究,我没有发现在其他任何地方讨论过此异常。
感谢任何帮助。感谢您阅读此问题。
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 应该然后将所有内容复制到最终 directory/JAR)。参见 https://docs.oracle.com/javase/8/docs/technotes/tools/unix/javac.html
我目前正在 Intellij 15.0.6 中开发 Gradle 3.3 项目。
我正在使用 Gradle APT plugin 将注释处理器添加到我的 class 路径。
它在生成 Java class 文件时工作正常,但是我需要能够在生成目录生成的 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 放置在与生成的 Java classes 相同的包中,在 src/apt/main
中。然而,这不是我想要的行为。我需要它们驻留在 class 路径中。
经过广泛研究,我没有发现在其他任何地方讨论过此异常。
感谢任何帮助。感谢您阅读此问题。
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 应该然后将所有内容复制到最终 directory/JAR)。参见 https://docs.oracle.com/javase/8/docs/technotes/tools/unix/javac.html