# Maven中調(diào)試Annotation Processor
[TOC]
## 簡(jiǎn)述
臨時(shí)寫的記錄,日后再補(bǔ)充完整;
不涉及處理器如何開發(fā),如有需要可以參考[ANNOTATION PROCESSING 101](http://hannesdorfmann.com/annotation-processing/annotationprocessing101);
替代方案:用Gradle開發(fā),比maven簡(jiǎn)單一些,安卓相關(guān)的apt教程泛濫;如有需要可以參考[Debugging an Annotation Processor in your project](https://blog.xmartlabs.com/2016/03/28/Debugging-an-Annotator-Processor-in-your-project/)
## 需求
1. maven 項(xiàng)目
2. 開發(fā)了編譯時(shí)注解的注解處理器
3. 需要調(diào)試注解處理器
## 問題
1. 注解處理器能否和項(xiàng)目放一起
? 目前結(jié)論:不能,必須另外創(chuàng)建一個(gè)Maven項(xiàng)目寫注解處理器再`mvn install`到本地供其他項(xiàng)目使用
2. idea與maven遠(yuǎn)端調(diào)試
3. pom如何關(guān)聯(lián)處理器
## idea遠(yuǎn)端調(diào)試
參見[How to debug a Java Annotation Processor using IntelliJ & Maven](http://blog.jensdriller.com/how-to-debug-a-java-annotation-processor-using-intellij/),該文主要解決了idea如何設(shè)置遠(yuǎn)端調(diào)試
### mvnDebug
調(diào)試maven項(xiàng)目使用的編譯時(shí)注解,在Terminal中輸入`mvnDebug`相關(guān)的指令,比如`mvnDebug clean package`
執(zhí)行后會(huì)立刻掛起,等待調(diào)試器attach(可以想象成安卓開發(fā)者模式中的調(diào)試器)
### Remote調(diào)試器
此時(shí)在idea的configuration中選中配置的Remote調(diào)試器并點(diǎn)擊瓢蟲按鈕就會(huì)給`mvnDebug`掛起的任務(wù)attach調(diào)試器,任務(wù)即會(huì)開始執(zhí)行
so上有一po較為完整的流程說明
[Debug Java annotation processors using Intellij and Maven](https://stackoverflow.com/questions/31345893/debug-java-annotation-processors-using-intellij-and-maven)
[TODO]
## pom如何關(guān)聯(lián)處理器
這個(gè)花費(fèi)了最多的時(shí)間,國(guó)內(nèi)國(guó)外各種答案都沒有解決,最后慢慢試出來的
1. maven-compiler-plugin配置下jdk版本
? ```xml
? <plugin>
? ? ? <artifactId>maven-compiler-plugin</artifactId>
? ? ? <version>3.7.0</version>
? ? ? <configuration>
? ? ? ? ? <source>1.8</source>
? ? ? ? ? <target>1.8</target>
? ? ? </configuration>
? </plugin>
? ```
2. 依賴?yán)锫暶魈幚砥?/p>
? ```xml
? <dependencies>
? <!-- The annotation processor -->
? ? ? <dependency>
? ? ? ? ? <groupId>cn.rexih.java</groupId>
? ? ? ? ? <artifactId>test-anno-processor</artifactId>
? ? ? ? ? <version>1.0-SNAPSHOT</version>
? ? ? </dependency>
? </dependencies>
? ```
? ?
3. idea -> settings -> Build,Execution,Deployment -> Complier -> Annotation Processors中enable即可,不用做其他事情
4. 不須要參照其他文章去改pom中`execution`、`process`之類的,越改越有問題
## 其他
1. 在目標(biāo)項(xiàng)目中如何打斷點(diǎn):
>? 目標(biāo)項(xiàng)目需要關(guān)聯(lián)注解處理器源碼,如果有source jar就下載source jar,沒有的話選擇源碼;總而言之是在處理器的源碼上打斷點(diǎn)。
## 參考資料
[Idea遠(yuǎn)程調(diào)試(mvnDebug,Java命令)](http://blog.sina.com.cn/s/blog_6af189790102wh6c.html)
[自定義注解之編譯時(shí)注解(RetentionPolicy.CLASS)(一) ](https://blog.csdn.net/github_35180164/article/details/52121038)