美文网首页
Annotation Processor 在 Maven Gra

Annotation Processor 在 Maven Gra

作者: Yellowtail | 来源:发表于2019-02-19 17:14 被阅读0次

背景

最近项目组有一个需求是这样的:
同一份代码,被不同的工程引用,里面的POJO都是对应 MongoDB数据库里的集合对象
不同的工程使用的技术栈不太一样,对于 _id 的注解是不一样的
我们希望引入源码期间的注解来解决这个问题

本文章探讨的内容

注解、注解处理器都好写,我发现比较困难的是 如何执行注解处理器
(如何写注解处理器,网上很多博客了,不在此博客探讨范围内)
网上搜了一堆博客、文章,发现都是抄来抄去的,实践下来,一堆报错
研究了好久,终于把 Maven Gradle 里的配置弄清楚了,分享出来

如何编码实现注解处理器请看下一篇博客

Demo 代码

demo 代码我上传到了 github
大家可以自行查看

工程介绍

name descrption
yellow-proceesor 包含注解注解处理器的工程,以jar包形式对外提供服务
yellow-doc 使用了注解,并且希望在编译的时候,执行注解处理器进行一些操作的工程

yellow-proceesor

这个工程包含了 注解 注解处理器
当然了,这两个东西也可以在不同的工程里面,大家可以根据实际需要,灵活配置
注解com.yellow.anno.MyId
注解处理器com.yellow.anno.process.IdProcessor
(这个demo里有好几个注解处理器,是为了测试 javax.annotation.processing.Processor 这个文件的)

这个工程是 Maven的,需要先行 install 到本地仓库

yellow-doc

这个工程里面包含了两份打包脚本 Maven Gradle
大家可以根据项目需要,看不同的配置 pom.xml build.gradle

神奇的 javax.annotation.processing.Processor

网上看到大部分博客说需要这个 文件,小部分博客说不需要
有的博客说不需要这个文件,只是需要AutoService注解
经过我的实验,对于纯JavaAndroid工程, 这个文件是不需要的(Android我不懂,没有测过)
我们项目组的工程是Spring Boot类型

配置介绍

Maven

pom.xml

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
  <source>1.8</source>
  <target>1.8</target>
  <forceJavacCompilerUse>true</forceJavacCompilerUse>
  
  <annotationProcessorPaths>
    <path>
      <groupId>com.yellow</groupId>
      <artifactId>skmr-proceesor</artifactId>
      <version>1.6</version>
    </path>
    <!-- ... more ... -->
  </annotationProcessorPaths>
  
  <annotationProcessors>
    com.yellow.anno.process.BIdProcessor
  </annotationProcessors>              
  
</configuration>
</plugin>

这个用法在官网有介绍
path 里是注解处理器所在的jar
annotationProcessors注解处理器 全包名列表

需要注意的是,demo的pom.xmldependencies 也依赖了这个包
这个是因为注解也在这个包里,才需要依赖的,否则的话是不用的

maven截图

Gradle

build.gradle

dependencies {
    //注解所在的包
    compile group: 'com.yellow', name: 'skmr-proceesor', version:'1.6'
    
    //注解处理器所在的包
    annotationProcessor 'com.yellow:skmr-proceesor:1.6'
}
compileJava.options.compilerArgs << "-processor" << "com.yellow.anno.process.BIdProcessor"

这个答案是在 这里 看到的
亲测有效

Maven同理, compile 依赖这个包只是因为 注解在这个包里,否则 annotationProcessor 配置一下即可

gradle截图

更新于 2019年3月12日 09:54:30
Gradle里可以配置多个不同的注解处理器供使用

//选择生成C端使用的包
task selectCAnnotationProcessor << {
    println "select processor for C"
    
    compileJava.options.compilerArgs << "-processor" << "com.fanggeek.anno.process.CIdProcessor"
}

//选择生成B端使用的包
task selectBAnnotationProcessor << {
    println "select processor for B"

    compileJava.options.compilerArgs << "-processor" << "com.fanggeek.anno.process.BIdProcessor"
    
}

相关文章

网友评论

      本文标题:Annotation Processor 在 Maven Gra

      本文链接:https://www.haomeiwen.com/subject/xiefyqtx.html