写过java的都知道,lombok几乎在项目中处于不可或缺的一部分,但是lombok在Gradle的项目中配置并非人人都知道。

很多人在项目依赖中直接这样写

1
compile "org.projectlombok:lombok:1.18.4"

但这样的处理在Gradle 5.0以上被命令禁止了,在4.x的高级版本中编译时也会有对应的告警

1
2
3
4
5
The following annotation processors were detected on the compile classpath: 'lombok.launch.AnnotationProcessorHider$AnnotationProcessor' 
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.
If you did not intend to use annotation processors,
you can use the '-proc:none' compiler argument to ignore them.

下面先来了解下目前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环境下,我们尝试下改成

大专栏  Gradle的依赖方式——Lombok在Gradle中的正确配置姿势ble>
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
2
3
4
compileOnly 'org.projectlombok:lombok:1.18.4'
annotationProcessor 'org.projectlombok:lombok:1.18.4'
testCompileOnly 'org.projectlombok:lombok:1.18.4'
testAnnotationProcessor '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说码

Gradle的依赖方式——Lombok在Gradle中的正确配置姿势的更多相关文章

  1. Gradle dependencies 依赖方式

    implementation:使用了该命令编译的依赖,仅仅对当前的Moudle提供接口 依赖首先应该设置为implement的,如果没有错,那就用implement,如果有错,那么使用api指令 那为 ...

  2. Gradle[0]依赖本地JAR和远程仓库JAR的配置

    1.对本地Jar的依赖配置 如果不知道Jar包的远程仓库地址,而项目中又要使用该Jar包,就需要进行本地设置. 例如,需要使用的Jar包为sigar.jar,则需要在项目根目录下建目录:libs,并把 ...

  3. vue render中如何正确配置img的路径

    第一种:适用于静态路径 attrs: { src: require('../common/images/logo.png'), title: 'img' } 第二种:适用于动态路径 domProps: ...

  4. Android Gradle 依赖方式

    Android Gradle 依赖方式有以下6种: Compile compile是对所有的build type以及favlors都会参与编译并且打包到最终的apk文件中. Provided Prov ...

  5. Gradle Maven 依赖管理

    仓库管理简介 本质上说,仓库是一种存放依赖的容器,每一个项目都具备一个或多个仓库. Gradle支持以下仓库格式: Ivy仓库 Maven仓库 Flat directory仓库 我们来看一下,对于每一 ...

  6. 【译】Gradle 的依赖关系处理不当,可能导致你编译异常

    文章 | Ashesh Bharadwaj 翻译 | 承香墨影 授权 承香墨影 翻译.编辑并发布 在 Android Studio 中,Gradle 构建过程对于开发者来说,很大程度上是抽象的.作为一 ...

  7. gradle入门(1-2)gradle的依赖管理

    Gradle支持以下仓库格式: Ivy仓库 Maven仓库 Flat directory仓库 一.添加仓库 1.添加Ivy仓库 1.1.通过URL地址添加一个Ivy仓库 我们可以将以下代码片段加入到b ...

  8. Gradle之依赖管理

    Gradle之依赖管理 泡在网上的日子 / 文 发表于2015-01-29 16:12 第8824次阅读 Gradle,Android Studio 2 编辑推荐:稀土掘金,这是一个针对技术开发者的一 ...

  9. 【入门】Gradle的基本使用、在IDEA中的配置、常用命令

    一.介绍 java的源码构建工具,大致经历了 ant -> maven -> gradle 这个过程,每一次进步,都是在解决之前的工具所带来的问题,简单来说: 1. ant 功能虽然也很强 ...

随机推荐

  1. 33)new和delete关键字

    ---------------------------------------------------------------------------------------------------- ...

  2. PCoA|NMDS|STRESS|RDA |RA|Unimodal|CCA|Generalized Joint Attribute Modeling

    PCoA:主坐标轴分析 数值型变量使用各种距离公式,而分类变量看是否相同,比如, Aabbcc || Aaffff 其中,两个相同,4个不同,一组6个,则(6+6-2*2)=8. PC0A与PCA区别 ...

  3. day31-hmac模块检测客户端是否合法

    #如果客户端知道服务端的ip地址和端口,就可以连接服务端,信息不安全. #使用os.urandam随机生成32位bytes,然后hmac加密之后再发送给客户端. #server: import soc ...

  4. 安装php7.2

    1,yum源默认的版本太低了,手动安装有一些麻烦,所以可以采用yum的方式进行安装. 2,检查当前安装的PHP包yum list installed | grep php 如果有安装的PHP包,先删除 ...

  5. 微信小程序引用外部js

    1.先建立一个common.js, 写我们的外部js 比如: common.js function getTime(){ //下面写我们的代码 .... } function getCity(){ / ...

  6. Excel-DNA项目只用1个文件实现Ribbon CustomUI和CustomTaskpane定制【VB.Net版】

    Excel-DNA项目中的自定义功能区和自定义任务窗格需要用到各种命名空间.添加所需文件,才能实现.后来我发现可以把所有代码都写在Class1.vb这个默认文件中. 大家可以在Visual Studi ...

  7. STM32学习中出现的错误

    1.添加了多个文件后编译发现出现了无效的重复声明: 原因:文件(头文件)调用的时候重复调用, 解决办法:每个头文件写的时候包含以下代码: #ifndef   __STM32F10X_H   //头文件 ...

  8. CF-595

    题目传送门 A .Yet Another Dividing into Teams sol:原先是用比较复杂的方法来解的,后来学弟看了一眼,发现不是1就是2,当出现两个人水平相差为1就分成两组,1组全是 ...

  9. QT中的QQueue类、C++中的queue类

    C++中的queue 实现一种先进先出的数据结构,是一个模板类 头文件 #include<queue> queue<int> Q; //定义一个int型队列 Q.empty() ...

  10. Offer垂青于有准备的人——微软亚洲研究院实习生们的就业分享

    编者按:一年一度的"求职大战"又拉开了序幕,如何在求职中掌握主动,更好地展现自己,最后抓住Offer?且听微软亚洲研究院三位实习生慢慢道来,Offer总会垂青于有准备的人. 廖振, ...