无法在注释处理器中加载资源(不在类路径上)

CCH*_*HET 17 java eclipse annotation-processing

我有一个注释处理器,它将生成一个枚举,其中包含由接口的getter方法定义的键.

界面位于

MyProject的/ src目录/主/ JAVA/my.package.MyInterfaces.java.

我想验证驻留的属性文件,MyProject/src/main/resources/META-INF/resource-bundle/如果它们确实包含生成的枚举中定义的键.

我的问题是属性文件不能通过处理器的类加载器或Filer.getResource(...)获得.

  • 如何使该项目的源或类路径可供处理器使用,以便我可以加载属性文件?

  • 现在我只有处理器所在的jar中的资源可用.我尝试通过eclipse Project/Properties/Java编译器/ Annotation处理/处理器选项来定义-classpath和/或-sourcepath,但它没有成功.

有没有人遇到这样的问题,谁能给我一个关于如何为处理器提供资源的线索?

我确实有maven结构但不使用maven,因为应用程序中的旧依赖项.所以maven现在不适合我.

Eclipse 3.6 Helios似乎StandardLocation.SOURCE_PATH并且StandardLocation.CLASS_PATH没有在Filer#getResource()中实现,因此将生成的源文件或类文件写入SOURCE_PATHCLASS_PATH似乎不可能,同时访问任何文件SOURCE_PATHCLASS_PATH*

谢谢.

Gra*_*ray -1

我的问题是属性文件无法通过处理器的类加载器或通过Filer.getResource(...).

我不确定我是否理解你的问题。但也许这里的一些东西会有帮助。

如何使该项目的源或类路径可供处理器使用,以便我可以加载属性文件?

您需要将其添加src/main/resources为 Eclipse 中的“源文件夹”。Configure Build Path首先在 Eclipse 中选择您的 Java 项目。然后选择选项Source卡并单击Add Folder。您应该能够选择该src/main/resources文件夹并单击Ok。您现在应该src/main/resources在源文件夹列表中看到 。

如果您查看target/classes目录,您应该会看到资源目录中的所有文件,这让您知道它们已正确复制到类路径中。

# files in the src main resources
> ls src/main/resources/x/y/z
jgroups_udp.xml
# should compile into target/classes
> ls target/classes/x/y/z
jgroups_udp.xml org
# and should show up in the jar
> -tvf target/project.jar 
   0 Thu Nov 03 18:50:00 EDT 2016 META-INF/
 135 Thu Nov 03 18:49:58 EDT 2016 META-INF/MANIFEST.MF
 ...
3036 Thu Nov 03 18:49:36 EDT 2016 x/y/z/jgroups_udp.xml
Run Code Online (Sandbox Code Playgroud)

然后,您可以在代码中通过执行以下操作来引用该文件。这将从类路径的顶部加载文件。如果它位于子目录中,那么您可以使用:

InputStream stream =
    getClass().getClassLoader().getResourceAsStream("x/y/z/jgroups_udp.xml");
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果您使用Maven,您将添加如下内容pom.xml

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
</build>
Run Code Online (Sandbox Code Playgroud)