![](/img/trans.png)
[英]How to read file from src/main/resources with annotation processor?
[英]How to create a resource with spaces in file name from Annotation Processor
在編譯時使用javax.annotation.processing.Processor
生成資源文件時,無法創建文件名中帶有空格的文件。
重現問題的簡化代碼:
public class SampleAnnotationProcessor extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment env) {
for (Element element : env.getElementsAnnotatedWith(SampleAnnotation.class)) {
FileObject resource = processingEnv.getFiler()
.createResource(StandardLocation.CLASS_OUTPUT, "configs.generated", "file name with spaces.xml", element);
// ...
}
return true;
}
}
在jdk1.8.0_212.jdk
它失敗了:
java.lang.IllegalArgumentException: Invalid relative name: file name with spaces.xml
由於如果存在於src/resources
中,此類資源將被很好地打包到 jar 中,我認為在自動生成時也應該可以。
有沒有辦法逃避空格,或者做其他事情來在編譯時生成這樣的文件?
作為蠻力方法,重命名生成的文件可以解決問題:
String nameWithoutSpaces = desiredFilename.replace(" ", "-");
FileObject resource = processingEnv.getFiler()
.createResource(StandardLocation.CLASS_OUTPUT, "configs.generated", nameWithoutSpaces, element);
Path generatedResourcePath = Paths.get(resource.toUri());
Path desiredPath = generatedResourcePath.getParent().resolve(desiredFilename);
Files.move(generatedResourcePath, desiredPath, StandardCopyOption.REPLACE_EXISTING);
仍在尋找更傳統的方法。 參考解釋為什么資源不能有空間工作的錯誤/票證或規范說明。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.