相关疑难解决方法(0)

如何在Java注释处理器中获取正确的JavaFileManager?

我已经编写了一个Java注释处理器,通过扩展javax.annotation.processing.AbstractProcessor在Eclipse上下文中调用它并且工作正常,除了我需要有关处理器工作的源路径和类路径的更多信息:

@SupportedAnnotationTypes({"MyAnno"})
@SupportedSourceVersion(SourceVersion.RELEASE_8)
public class Processor extends AbstractProcessor {

    @Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
        // this used to work in Java4 but not anymore (since Java6?):
        String sourcePath = processingEnv.getOptions().get("sourcepath");
        String classPath = processingEnv.getOptions().get("classpath");

        for (Element e : roundEnv.getElementsAnnotatedWith(MyAnno.class)) {
            myProcess(e, sourcePath, classPath); 
        }

        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是如何在注释处理上下文(实现process)中检索一个有效的JavaFileManager,它可以给出源路径和当前正在执行注释处理器的编译器的类路径.最好,我会找到一个不涉及对Eclipse/JDT特定接口的依赖的解决方案.

我已经试过这不以下工作:

DiagnosticCollector<JavaFileObject> diagnostics =
                   new DiagnosticCollector<JavaFileObject>();
StandardJavaFileManager fm = ToolProvider.getSystemJavaCompiler().getStandardFileManager(diagnostics, null, null);
fm.getLocation(StandardLocation.CLASS_PATH); // prints an empty class …
Run Code Online (Sandbox Code Playgroud)

java eclipse annotation-processing

8
推荐指数
1
解决办法
862
查看次数

从属性文件键生成字符串常量

我正在使用.properties文件进行邮件国际化.例如:

HELLO_WORLD = Hello World
HELLO_UNIVERSE = Hello Universe
Run Code Online (Sandbox Code Playgroud)

然后在Java代码中:

String foo = resourceBundle.getString("HELLO_WORLD");
Run Code Online (Sandbox Code Playgroud)

字符串文字是"HELLO_WORLD"有问题的,因为它们容易出错并且无法自动完成.我想从属性文件中的键生成代码,如下所示:

public interface Messages { // Or abstract class with private constructor
    public static final String HELLO_WORLD = "HELLO_WORLD";
    public static final String HELLO_UNIVERSE = "HELLO_UNIVERSE";
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

String foo = resourceBundle.getString(Messages.HELLO_WORLD);
Run Code Online (Sandbox Code Playgroud)

有没有标准的方法来做到这一点?我更喜欢Maven插件,但我可以手动运行的任何独立工具都足以满足我的需求.

java code-generation internationalization properties-file

6
推荐指数
1
解决办法
1440
查看次数

如何在eclipse jdt-apt环境中获得资源?

我正在开发一个注释处理器.这是一个经典的maven项目结构.

project
- src/main
  - java // SOURCE_PATH
  - resources // SOURCE_PATH
- target
  - classes // CLASS_PATH and CLASS_OUTPUT
  - generated-sources
    - annotations // SOURCE_OUTPUT
Run Code Online (Sandbox Code Playgroud)

在与javac的maven中一切都很好.但是当我想将它集成到eclipse中时,我发现eclipse只支持CLASS_OUTPUTSOURCE_OUTPUT.

我认为CLASS_OUTPUT也可以,因为它等于CLASS_PATH.然后我得到以下异常

org.eclipse.core.internal.resources.ResourceException: Resource '/test-annotation-use-processer/target/classes/config.properties' does not exist.
    at org.eclipse.core.internal.resources.Resource.checkExists(Resource.java:335)
    at org.eclipse.core.internal.resources.Resource.checkAccessible(Resource.java:209)
    at org.eclipse.core.internal.resources.File.getContents(File.java:275)
    at org.eclipse.core.internal.resources.File.getContents(File.java:268)
    at org.eclipse.jdt.internal.apt.pluggable.core.filer.IdeInputFileObject.openInputStream(IdeInputFileObject.java:86)
Run Code Online (Sandbox Code Playgroud)

那么,该文件确实存在于磁盘中.我不知道日食有什么不对.

有没有办法在eclipse apt中获取资源?

java eclipse annotation-processing eclipse-jdt

6
推荐指数
0
解决办法
106
查看次数

Eclipse - 注解处理器,获取项目路径

我正在为 Eclipse 构建一个注释处理器插件,我想做的是在处理过程中检查项目文件夹内的几个文件。

我想知道如何从我的处理器中获取项目路径。我相信这是可以完成的,因为项目源路径已提供给处理器 - 但我找不到到达它的方法。

我尝试查看 System.properties 和processingEnv.getOptions(),但那里没有有用的信息。

最终我也想在 Netbeans 上使用这个注释处理器,所以如果有一个公共 API 可以提供这些信息,那将是最好的 - 但任何帮助将不胜感激。

java eclipse eclipse-plugin annotation-processing

3
推荐指数
2
解决办法
3753
查看次数