Tag: annotation processing

如何在Maven 2中使用自定义注释处理器?

在我们的企业应用程序中,我们正在寻找一种从Java类中收集数据的动态方法。 我们创建了一个带有name属性的自定义注释接口( @interface )。 我们想从所有带注释的类中收集此属性的值。 我设法为自定义注释创建AnnotationProcessorFactory和AnnotationProcessor 。 由于我们使用的是Maven 2,因此我将以下内容添加到主项目的pom.xml中的插件中。 org.codehaus.mojo apt-maven-plugin 1.0-alpha-5 our.company.api.component.lister.ComponentAnnotationProcessFactory 这属于主项目,有几个子项目。 工厂和定制处理器属于这些子项目之一。 自定义注释分散在所有子项目中,这就是我将插件放在主项目的pom.xml中的原因。 问题是当我发出mvn apt:process命令时,我收到了关于没有处理器的注释的警告,我们的自定义注释就在其中。 我认为这意味着该插件无法找到工厂类。 我应该怎么做才能让插件找到工厂和处理器文件? 编辑: 项目层次结构非常简单: main_project |-sub_project1 |… |-sub_projectn 该插件位于main_project的pom.xml中。 假设工厂和处理器在sub_project1 ,自定义注释在sub_project2 , sub_project3 ,…, sub_projectn

注释处理器,获取方法参数的修饰符

我目前正处于一个使用Java自定义注释的项目中。 我想强制我的注释的用户,如果他用@Foo注释了方法,他必须在方法参数列表中至少声明一个final boolean b 。 所以看起来应该是这样的: @Foo public void foo(final boolean b) { } @Foo public void bar() { } // This should result in an error 使用我的注释处理器,我可以检索变量的类型, 但不能检索最终修饰符 。 如果我想检索修改器集,如下面的代码所示,虽然最终修饰符出现在参数上,但该集将始终为空。 for (VariableElement parameter : method.getParameters()) { Set modifiers = parameter.getModifiers(); // This set is always empty } 任何想法,为什么会这样? 我错过了什么吗?

eclipse java注释处理

我想在eclipse jdt中使用Annotation处理做一些事情。 Eclipse jdtapt帮助告诉我应该在java / compiler / annotation处理首选项页面上配置东西。 但是在我的安装(Indigo)上,编译器部分没有这个注释处理子部分。 它只有构建,错误/警告,javadoc,任务标记。 我的安装有问题吗?

处理方法体内的注释

我正在使用Pluggable Annotation Processing API处理java注释。 是否有可能同时处理方法体内使用的注释? 感谢帮助。 彼得

如何在Java中使用自定义类型注释

Java 8具有名为Type annotations( JSR 308 )的function。 我想将它用于简单的Object to Object映射器框架。 我想像这样定义注释@ExpectedType @Target({ElementType.TYPE_PARAMETER, ElementType.TYPE_USE}) @Retention(RetentionPolicy.RUNTIME) public @interface ExpectedType { public Class value(); } 然后在我的代码中使用它,如下所示: public class SomeServiceImpl() { public @ExpectedType(ObjectA_DTO.class) IObjectA doSomething(@ExpectedType(ObjectA_Entity.class) IObjectA obj) { return (ObjectA_Entity) obj; // it’s correct } } IObjectA是由ObjectA_DTO和ObjectA_Entity类实现的接口。 我想用这种方式服务: // it’s correct assert someService.doSomething(new ObjectA_DTO()).getClass() == ObjectA_DTO.class; 我想更改SomeServiceImpl方法的调用以使用Object mapper。 它可以通过使用JSR 269或AOP生成的代码来实现。 […]

向前兼容的Java 6注释处理器和SupportedSourceVersion

我正在为一个项目尝试Java 7并从这种注释处理器(Bindgen和Hibernate JPA modelgen)获得警告: warning: Supported source version ‘RELEASE_6’ from annotation processor ‘org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor’ less than -source ‘1.7’ 这是由注释处理器类上的@SupportedSourceVersion(SourceVersion.RELEASE_6)注释引起的。 由于它们是使用Java 6编译的,因此它们可用的SourceVersion最大值是RELEASE_6 。 SourceVersion的Java 7版本引入了RELEASE_7 。 我的问题:注释处理器如何处理前向兼容性? 是否必须有单独的jdk6和jdk7二进制版本? 我在这里不理解其他什么吗? 我只发现了有关此问题的以下信息: 使用的Querdydsl错误报告 @Override public SourceVersion getSupportedSourceVersion() { return SourceVersion.latest(); } Oracle博客 ,其中评论员建议支持最新的源版本

在Maven中为注释处理器设置生成的源目录

我正在尝试将使用注释处理器生成源的构建移动到Maven。 我尝试过如下配置maven-compiler-plugin: org.apache.maven.plugins maven-compiler-plugin true -s ${project.build.directory}/target/generated-sources/annotation-processing 但是javac失败了 [INFO] Compilation failure Failure executing javac, but could not parse the error: javac: invalid flag: -s /home/robert/workspaces/betbrain/sportsengine.common/sportsengine.bean.test/target/target/generated-sources/annotation-processing Usage: javac use -help for a list of possible options 据我所知,-s应该在源文件之前传递给javac,但maven之后传递它。 如何将-s标志正确传递给maven-compiler-plugin? 更新 : maven-annotation-plugin似乎不起作用。 配置为时 org.bsc.maven maven-processor-plugin 1.0-SNAPSHOT process process generate-sources ${generated.sources.directory} xxx.annotation.EnforceJavaBeansConventionsProcessor 执行失败 [INFO] [processor:process {execution: process}] error: […]

如何为java注释处理器编写自动化unit testing?

我正在尝试使用java注释处理器。 我能够使用“JavaCompiler”编写集成测试(实际上我现在正在使用“hickory”)。 我可以运行编译过程并分析输出。 问题:即使我的注释处理器中没有任何代码,单个测试也会运行大约半秒钟。 这在TDD风格中使用它太长了。 嘲笑依赖关系对我来说似乎很难(我必须模拟整个“javax.lang.model.element”包)。 有人成功为注释处理器(Java 6)编写unit testing吗? 如果不是……你的方法是什么?

Gradle中的注释处理器将源文件输出到构建/类,使javadoc失败。 怎么解决?

我有一个注释处理器,在构建时由Java编译器自动拾取(使用SPI)。 在gradle构建期间,此批注处理器的生成的java源放在构建/类中,因为Gradle告诉注释处理器这是输出生成的源文件的位置。 当运行标准的javadoc任务时,它会尝试为build / classes中的所有文件创建javadoc,包括* .java。 这很糟糕,因为javadoc只需要* .class文件,这使整个构建失败。 所以我的问题是: 这是Gradle bug /function吗? 我该如何解决它/使它工作?

注释处理器 – 如何获取正在处理的类

我正在尝试编写一个自定义的Anntoation处理器。 注释处理器将在编译时处理每个类文件以检查注释,但是我如何才能获得它当前正在处理的类? 我只能在以下代码中获取类名。 public class AnnotationProcessor extends AbstractProcessor { …… @Override public boolean process(Set annotations, RoundEnvironment roundEnv) { Set rootE=roundEnv.getRootElements(); for(Element e: rootE) { if(e.getKind()==ElementKind.CLASS) { String className= e.getSimpleName().toString(); processingEnv.getMessager().printMessage( javax.tools.Diagnostic.Kind.WARNING,className, e); } } }