Jor*_*orn 8 java annotation-processing
我有一个简单的注释处理器,需要从与注释类相同的项目中读取配置文件.结构示例:
- myproject
- src
- main
- java
- my.package.SourceFile
- resources
- config.json
Run Code Online (Sandbox Code Playgroud)
在注释处理器中,我尝试读取文件:
FileObject resource = processingEnv.getFiler().getResource(StandardLocation.SOURCE_PATH, "", "config.json");
Run Code Online (Sandbox Code Playgroud)
但它会抛出FileNotFoundException.我也尝试过其他路径,例如../resources/config.json(抛出Invalid relative name: ../resources/config.json).我尝试将配置文件放入src/main/java(甚至src/main/java/my/package),我不喜欢,但仍然会抛出FileNotFoundException.
如果我可以filer.getResource()告诉我它在哪里,它会有所帮助.为了找到答案,我尝试生成一个文件:
filer.createResource(StandardLocation.SOURCE_OUTPUT, "", "dummy");
Run Code Online (Sandbox Code Playgroud)
产生于myproject/build/classes/main/dummy.不幸的是,我无法生成SOURCE_PATH,因此无法找到它.
我希望在构建过程中(注释处理之前)将内容从中src/main/resources复制到target/classes。在这种情况下,您可以这样打开它们:
ProcessingEnvironment pe = ...;
FileObject fileObject = pe.getFiler()
.getResource( StandardLocation.CLASS_OUTPUT, "", "config.json" );
InputStream jsonStream = fileObject.openInputStream();
Run Code Online (Sandbox Code Playgroud)
我和一位 Lombok 项目开发人员一起研究过这个问题。如果有人知道注释处理,那就是他们了;)
我们的结论是,JavacFileManager内部处理请求的方法没有解决路径StandardLocation.SOURCE_PATH。我们不确定,但这可能与使用 Gradle 构建有关。
| 归档时间: |
|
| 查看次数: |
1919 次 |
| 最近记录: |