Gradle的依赖方式——Lombok在Gradle中的正确配置姿势
写过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说码
Gradle的依赖方式——Lombok在Gradle中的正确配置姿势的更多相关文章
- Gradle dependencies 依赖方式
implementation:使用了该命令编译的依赖,仅仅对当前的Moudle提供接口 依赖首先应该设置为implement的,如果没有错,那就用implement,如果有错,那么使用api指令 那为 ...
- Gradle[0]依赖本地JAR和远程仓库JAR的配置
1.对本地Jar的依赖配置 如果不知道Jar包的远程仓库地址,而项目中又要使用该Jar包,就需要进行本地设置. 例如,需要使用的Jar包为sigar.jar,则需要在项目根目录下建目录:libs,并把 ...
- vue render中如何正确配置img的路径
第一种:适用于静态路径 attrs: { src: require('../common/images/logo.png'), title: 'img' } 第二种:适用于动态路径 domProps: ...
- Android Gradle 依赖方式
Android Gradle 依赖方式有以下6种: Compile compile是对所有的build type以及favlors都会参与编译并且打包到最终的apk文件中. Provided Prov ...
- Gradle Maven 依赖管理
仓库管理简介 本质上说,仓库是一种存放依赖的容器,每一个项目都具备一个或多个仓库. Gradle支持以下仓库格式: Ivy仓库 Maven仓库 Flat directory仓库 我们来看一下,对于每一 ...
- 【译】Gradle 的依赖关系处理不当,可能导致你编译异常
文章 | Ashesh Bharadwaj 翻译 | 承香墨影 授权 承香墨影 翻译.编辑并发布 在 Android Studio 中,Gradle 构建过程对于开发者来说,很大程度上是抽象的.作为一 ...
- gradle入门(1-2)gradle的依赖管理
Gradle支持以下仓库格式: Ivy仓库 Maven仓库 Flat directory仓库 一.添加仓库 1.添加Ivy仓库 1.1.通过URL地址添加一个Ivy仓库 我们可以将以下代码片段加入到b ...
- Gradle之依赖管理
Gradle之依赖管理 泡在网上的日子 / 文 发表于2015-01-29 16:12 第8824次阅读 Gradle,Android Studio 2 编辑推荐:稀土掘金,这是一个针对技术开发者的一 ...
- 【入门】Gradle的基本使用、在IDEA中的配置、常用命令
一.介绍 java的源码构建工具,大致经历了 ant -> maven -> gradle 这个过程,每一次进步,都是在解决之前的工具所带来的问题,简单来说: 1. ant 功能虽然也很强 ...
随机推荐
- Vue2生命周期
这是Vue文档里关于实例生命周期的解释图 那么下面我们来进行测试一下 <section id="app-8"> {{data}} </section> va ...
- Microsoft.Office.Inter.Excel.dll在調用時可能會出現如下錯誤
Microsoft.Office.Inter.Excel.dll在調用時可能會出現如下錯誤,具體解決方案如下: 1. 錯誤資訊:檢索 COM 類工廠中 CLSID 為{00024500-0000-00 ...
- @Retention注解 @Documented 注解 @Inherited 注解
http://www.mamicode.com/info-detail-2153654.html
- PAT甲级——1108.Finding Average (20分)
The basic task is simple: given N real numbers, you are supposed to calculate their average. But wha ...
- Java——Collection集合、迭代器、泛型
集合 ——集合就是java提供的一种容器,可以用来存储多个数据. 集合和数组的区别 数组的长度是固定的.集合的长度是可变的. 数组中存储的是同一类型的元素,可以存储基本数据类型值. 集合存储的都是对象 ...
- Opencv笔记(二十)——直方图(二)
直方图均衡化 原理: 想象一下如果一副图像中的大多是像素点的像素值都集中在一个像素值范围之内会怎样呢?例如,如果一幅图片整体很亮,那所有的像素值应该都会很高.但是一副高质量的图像的像素值分布应该很广泛 ...
- poj-3661 Running(DP)
http://poj.org/problem?id=3661 Description The cows are trying to become better athletes, so Bessie ...
- 计算a^b==a+b在(l,r)的对数Codeforces Round #597 (Div. 2)
题:https://codeforces.com/contest/1245/problem/F 分析:转化为:求区间内满足a&b==0的对数(解释见代码) ///求满足a&b==0在区 ...
- day04-函数,装饰器初成
面试的时候,经常被问过装饰器,所以掌握好装饰器非常重要. 一.装饰器形成的过程:1.最简单的装饰器.2.被装饰的函数有返回值.3.被装饰的函数有一个参数.4.被装饰的函数有多个位置参数.5.被装饰的函 ...
- IP命令介绍
ip指令可以显示或操作路由.网络设备.设置路由策略和通道 1.语法 ip [选项] Object COMMAND [help] Object对象可以是: link 网络设备.addr 设备的协议 ...