
Annotation Processor
Annotation Processor主要是用来根据注解生成代码, 主要发生编译时。
Javac、或者apt都支持调用预处理器来进行预处理、代码生成。
Javac默认启用了apt,除非通过 -proc:none 选项关闭。处理器的搜索路径可以通过-processorpath 来指定的;不指定的话,会使用user class path 。具体的预处理器类通过搜索路径下的META-INF/services/javax.annotation.processing.Processor 来定义;或者通过-processor 选项来指定。
javac - Java programming language compiler
启用H1
MavenH2
Maven中可以使用apt-maven-plugin插件或者maven-compiler-plugin来处理。
apt-maven-plugin可以声明processor类
xml
<project><build><plugins>...<plugin><groupId>com.mysema.maven</groupId><artifactId>apt-maven-plugin</artifactId><version>1.1.3</version><executions><execution><goals><goal>process</goal></goals><configuration><outputDirectory>target/generated-sources/java</outputDirectory><processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor><options><querydsl.entityAccessors>true</querydsl.entityAccessors><querydsl.useFields>false</querydsl.useFields></options></configuration></execution></executions></plugin>...</plugins></build></project>
maven-compiler-plugin 需要通过META-INF/services/javax.annotation.processing.Processor 来寻找处理类;可以单独指定apt的搜索路径
xml
<project><build><plugins>...<plugin><artifactId>maven-compiler-plugin</artifactId><configuration><generatedSourcesDirectory>target/generated-sources/java</generatedSourcesDirectory><compilerArgs><arg>-Aquerydsl.entityAccessors=true</arg><arg>-Aquerydsl.useFields=false</arg></compilerArgs></configuration><dependencies><dependency><groupId>com.querydsl</groupId><artifactId>querydsl-apt</artifactId><version>${querydsl.version}</version><classifier>jpa</classifier></dependency><dependency><groupId>org.hibernate.javax.persistence</groupId><artifactId>hibernate-jpa-2.1-api</artifactId><version>1.0.0.Final</version></dependency></dependencies></plugin>...</plugins></build></project>
GradleH2
Gradle不支持手动指定processor,因此Jar包必须声明META-INF/services/javax.annotation.processing.Processor 。Gradle可以通过annotationProcessor 配置来指定的apt的类路径来提高apt的性能(类文件少了,搜索更快),即javac的processorpath 。
Annotation processors in Gradle with the annotationProcessor dependency configuration
IDEAH2
IDEA根据Idea或者Maven配置决定是否启用apt,也可以在设置中启用。启用后,apt的类路径默认为user classpath,可以指定;处理类会自动搜索,也可以指定。
Apt库H1
常用的需要apt支持的库
- lombok
- querydsl
- mapstruct
QuerydslH2
Querydsl的apt库有带classfier和不带classfier的,主要区别是带classfier的库中声明了META-INF/services/javax.annotation.processing.Processor
评论
新的评论
上一篇
Junit TestInstance
测试的时候需要准备测试环境,通常通过 beforeAll 、 beforeEach 来初始化,他俩分别时在测试类初始化的时候以及每个Test方法执行前被调用。 一般情况下这不是什么问题,但是在Spring的测试环境下会遇到些问题,比如某个类依赖于Spring注入的某个实例,…
下一篇
ITMS-90809 Deprecated API Usage
iOS提交审核后,提示 ITMS-90809: Deprecated API Usage — New apps that use UIWebView are no longer accepted. Instead, use WKWebView for improved secu…
