簡體   English   中英

如何從注釋處理器創建文件名中帶有空格的資源

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM