如何从Java中的注释处理器获取项目的工作目录

如何从Java中的注释处理器获取项目的工作目录,java,working-directory,annotation-processing,Java,Working Directory,Annotation Processing,我正在用Java编写一个注释处理器,在这个注释处理器中,我希望能够在使用这个注释处理器的项目的项目层次结构中找到一个文件。通过注释,我可以传递我正在搜索的文件相对于项目根的路径,但是我无法检索项目的工作目录 假设处理器是MyCustomProcessor,我正在MyProject项目中使用它。我希望能够通过MyCustomProcessor的“process”方法从MyProject的项目结构中访问(读取)文件(属性文件) 我已经读过这个链接,但是当我使用他们的解决方案时,我从StandardJ

我正在用Java编写一个注释处理器,在这个注释处理器中,我希望能够在使用这个注释处理器的项目的项目层次结构中找到一个文件。通过注释,我可以传递我正在搜索的文件相对于项目根的路径,但是我无法检索项目的工作目录

假设处理器是MyCustomProcessor,我正在MyProject项目中使用它。我希望能够通过MyCustomProcessor的“process”方法从MyProject的项目结构中访问(读取)文件(属性文件)

我已经读过这个链接,但是当我使用他们的解决方案时,我从
StandardJavaFileManager.getLocation(StandardLocation.SOURCE\u PATH)
调用中得到一个空值

有关实施的更多详细信息:

MyAnnotationProcessor:

@SupportedAnnotationTypes(value = {"MyAnnotation" })
@SupportedSourceVersion(RELEASE_6)
public class MyCustomProcessor extends AbstractProcessor {
...

@Override
public boolean process(final Set<? extends TypeElement> annotations, final RoundEnvironment roundEnv) {
    for (final Element element : roundEnv.getElementsAnnotatedWith(MyAnnotation.class)) {
<!-- Here is where I would like to get the working directory !-->
}
 }
}
@SupportedAnnotationTypes(值={“MyAnnotation”})
@SupportedSourceVersion(第6版)
公共类MyCustomProcessor扩展了AbstractProcessor{
...
@凌驾

公共布尔过程(最终集)对该答案的评论指向这个问题作为解决方案:


有些工具没有在JRE中实现,只能在JDK中使用。Eclipse似乎默认使用JRE运行处理器,因此您需要将项目配置为使用JDK作为运行时。

谢谢您的回答。事实上,在此期间,我从JRE 1.7切换到JDK 1.7,并将tools.jar从lib文件夹添加到了j不幸的是,我没有得到一个空的JavaCompiler,只有一个空的
StandardJavaFileManager.getLocation(StandardLocation.SOURCE\u PATH)
,这意味着我无法得到源路径。使用maven处理器插件2.2.4.fm.getLocation(StandardLocation.SOURCE\u PATH)对我也不起作用返回null。只有返回非null的标准位置是无用的:CLASS_路径包含location/opt/buildmanagement/hudson/slaves/slave_1/maven3-agent.jar和/opt/buildmanagement/hudson/tools/apache-maven-3.0.5/boot/plexus-classworlds-2.4‌​.jar;PLATFORM_CLASS_PATH包含一些jar。其余为空。这是一个老问题,但仅供参考:我使用这个.getClass().getClassLoader().getResource(“.”).getFile()来获取类文件放置的目录,至少在netbeans上,它位于项目根目录下,并且资源文件也会复制到此位置(即使发生更改)