美文网首页
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