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

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

界面位于

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

我想validation驻留在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似乎在Filer#getResource()中没有实现StandardLocation.SOURCE_PATHStandardLocation.CLASS_PATH ,因此将生成的源文件或类文件写入SOURCE_PATHCLASS_PATH似乎是不可能的,同时访问SOURCE_PATHCLASS_PATH上的任何文件*

谢谢。

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

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

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

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

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

 # 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 

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

 InputStream stream = getClass().getClassLoader().getResourceAsStream("x/y/z/jgroups_udp.xml"); 

顺便说一下,如果您使用的是maven,您可以在pom.xml添加以下内容:

    src/main/resources    

作为一种解决方法,您可以尝试通过命令行参数-Xboothclasspath / a:path添加需要使用的类路径,/ a会将路径中的值附加到引导类路径。 您需要将此作为命令行选项添加到实际注释处理运行中,因此在Eclipse中将执行以下操作:右键单击项目,选择属性,Java编译器,注释处理,单击表中的新建并添加键-Xbootclasspath / a和要添加为值的路径。 我担心我没有尝试过这个用于注释处理,但值得一试!