我正在使用注释处理器在编译时生成一些源文件,这是一个非常强大的功能。但我也想生成一些facelets组件。我不知道如何在webapp文件夹中创建非java文件。我知道创建一个maven插件可以做到这一点,但我想用javac注释处理器来实现。有可能吗?有什么建议吗?
Clarifications:
这个想法是基于JPA实体在源代码(maven项目)的webapp文件夹下生成一些xhtml文件(facelets、标签和组件)。所以我已经创建了一个AnnotationProcessor,它是由javac在编译时自动触发的,并且使用javax.annotation.processing应用程序接口,我只能在目标/生成的源码下生成文件。
我已经找到了一个解决方法,在target/generated-sources下创建一个虚拟文件,并使用它的URI来解析src/main/webapp,但是如果有任何使用API的更优雅的解决方案,它将是受欢迎的。
发布于 2018-09-27 06:33:41
我找到了一个难看但有效的解决方案:在SOURCE_OUTPUT中创建一个虚拟文件,并从FileObject URI获取路径,然后导航到项目根目录。
FileObject f = processingEnv.getFiler().createResource(StandardLocation.SOURCE_OUTPUT, "", "DUMMY");
Path p = Paths.get(f.toUri())
.getParent() // {PROJECT_ROOT}/target/generated-sources/annotations
.getParent() // {PROJECT_ROOT}/target/generated-sources
.getParent() // {PROJECT_ROOT}/target
.getParent(); // {PROJECT_ROOT}
FileWriter fw = new FileWriter(new File(p.toFile(), "src/main/webapp/generated.xhtml"));
fw.append("some content...");
fw.close();
我把这个答案留到更好的答案出现之前:)
https://stackoverflow.com/questions/52525655
复制相似问题