对于只使用IntelliJ IDEA
开发Java的同学,接触gradle的机会可能不是太多,或者说只借助于原生的Gralde-plugin可能都是模模糊糊的,只能大概的对应与maven的scope来边猜边用,对于使用android studio
的同学可能借助于Android Plugin for Gradle
,能够更直观的理解一些。但是可能不清楚对应的改变和原理。
在gradle < 4.0.1
或android studio 2.x
之前,支持的依赖方式如下:
Compile: 默认的依赖方式,任何情况下都会依赖
Provided: 只提供编译时依赖,打包时不会添加进去
Apk:只在打包Apk包时依赖(使用较少)
TestCompile:只在测试时依赖
DebugCompile:只在Debug构建时依赖
ReleaseCompile:只在Release构建时依赖
在gradle >= 4.0.1
或android studio >= 3.0
,支持的依赖方式如下:
compile: 弃用,被implementation替代
implementation: 实现依赖,同时会打入compileClasspath和runtimeClasspath
compileOnly: 编译时依赖,只会打入compileClasspath
annotationProcessor: 在编译中用于注解处理,以下会以Lombok举例
testAnnotationProcessor: 在测试编译中用于注解处理,以下会以Lombok举例
runtimeOnly:运行时依赖,只打包至runtimeClassPath
testImplementation:编译时只为测试构建相关依赖
testCompileOnly:测试编译时所使用的依赖,不打入运行时
testRuntimeOnly:测试运行时所使用的依赖
源代码依赖配置关系图
测试代码依赖配置关系图
经常看到直接从maven repository中默认无脑复制依赖下来的时候都是
1 | providedCompile group: 'org.projectlombok', name: 'lombok', version: '1.18.10' |
或者
compile group: 'org.projectlombok', name: 'lombok', version: '1.18.10'
在Gradle 5.0以上,会被禁止,4.x等后段的高版本编译时也会给出对应的报警
gradle5.0以上正确的方式应该如下:
compileOnly 'org.projectlombok:lombok:1.18.10'
annotationProcessor 'org.projectlombok:lombok:1.18.10'
testCompileOnly 'org.projectlombok:lombok:1.18.10'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.10'
如果只配置了Compile,那么编译会报错(getter,setter等不会生成)
如果只配置了annotationProcessor,那么编译不会报错,但是会把lombok的依赖打进jar
针对gradle5.0以下,只需要做如下配置
compileOnly 'org.projectlombok:lombok:1.18.10'
testCompileOnly 'org.projectlombok:lombok:1.18.10'