寫過java的都知道,lombok幾乎在項目中處於不可或缺的一部分,但是lombok在Gradle的項目中配置並非人人都知道。
很多人在項目依賴中直接這樣寫
1 |
compile "org.projectlombok:lombok:1.18.4" |
但這樣的處理在Gradle 5.0以上被命令禁止了,在4.x的高級版本中編譯時也會有對應的告警
1 |
The following annotation processors were detected on the compile classpath: 'lombok.launch.AnnotationProcessorHider$AnnotationProcessor' |
下面先來了解下目前Gradle(4.1以上)的幾種常見的依賴方式。
- api:與舊版的compile相同;
- implementation:解決重復依賴問題。例如A依賴B,B依賴C,那么A里面將不能調用C的方法;
- compile only:編譯有效,打包無效。替代舊版的provider;
- runtime only:打包有效,編譯無效;
- test、debug、release implementation:對應test、debug、release環境的implementation。
回到Lombok的使用上,我們知道lombok是可以簡化編寫的代碼,可以讓開發人員通過注解的形式少寫一些重復具有模板形式的代碼。然后這些注解可以在代碼編譯的時候,自動生成對應模板代碼。
並且在打jar/war包的時候,並不需要把lombok的依賴打進包中,所以Lombok在依賴上應該是compile only(僅在編譯時生效)才對。
在Gradle 5.0環境下,我們嘗試下改成
1
compileOnly "org.projectlombok:lombok:1.18.4"
然后執行gradle build。會發現代碼報錯,找不到對應生成后的代碼(如果用idea build則不會,因為自帶了插件。4.4+的版本也不會報錯,但會告警)。
Lombok的正確配置
回到開頭的官方告警中,有這么一句
Detecting annotation processors on the compile classpath is deprecated and Gradle 5.0 will ignore them.
Please add them to the annotation processor path instead.
在5.0的環境下,注解處理將不再compile classpath中,需要手動添加到annotation processor path。
最終的對應依賴如下
1 |
compileOnly 'org.projectlombok:lombok:1.18.4' |
P.S. 如果不配置compileOnly,只配annotationProcessor(gradle5.0以上才有),也會build成功,但會把依賴也打包進去。
針對5.0以下版本,對應依賴如下
1 |
compileOnly 'org.projectlombok:lombok:1.18.4' |
看完后,大家可以動起來,把自己項目中的lombok配置改掉吧(注意gradle版本)。
更多技術文章、精彩干貨,請關注
博客:zackku.com
微信公眾號:Zack說碼
