Gradle学习
在kotlin中使用mapstruct出现了些问题, 网上搜寻后得到结论:需要使用kapt(Kotlin annotation processing tool 即kotlin注解处理工具), 但给出的大多都是通过Gradle来进行配置的。因此借此机会学习了下Gradle:
plugins和apply plugin:
由于文档写到了, 由于不清楚这些在哪些位置加入, 因此查看了plugins和
apply plugin:
的区别:
1
2
3
4
5
6
7
8
9
10
11 > 添加 kapt 插件
> apply plugin: 'kotlin-kapt'
>
> 然后在项目中添加如下依赖:
> api("com.github.pozo:mapstruct-kotlin:1.3.1.2")
> kapt("com.github.pozo:mapstruct-kotlin-processor:1.3.1.2")
>
> 另外,还需要添加如下依赖:
> api("org.mapstruct:mapstruct:1.4.0.Beta3")
> kapt("org.mapstruct:mapstruct-processor:1.4.0.Beta3")
>
“plugins {}”块导入的是Gradle官方插件仓库里的插件。如果使用“buildscript {}”块指定第三方库作为Gradle插件的话,指定插件就需要使用“apply plugin”了。
刚刚翻了翻文档,“apply plugin”本身似乎还有更多的用途,而“plugins {}”块似乎是一个新引入的还不足够稳定的特性。题主想要知道更多的话直接看看文档就行了。
最终的Plain项目的依赖如下所示:
1 | plugins { |
maven使用kapt
在 kotlin-maven-plugin 中的在compile
之前添加 kapt
目标的执行:
1 | <execution> |
请注意,IntelliJ IDEA 自身的构建系统目前还不支持 kapt。当你想要重新运行注解处理时,请从“Maven Projects”工具栏启动构建。
from: https://www.kancloud.cn/alex_wsc/android_kotlin/1318386#_Maven__110
各种依赖方式说明
-
implementation
这个指令的特点就是,对于使用了该命令编译的依赖,对该项目有依赖的项目将无法访问到使用该命令编译的依赖中的任何程序,也就是将该依赖隐藏在内部,而不对外部公开。 -
api
完全等同于compile指令。 -
compile
这种是我们最常用的方式,使用该方式依赖的库将会参与编译和打包。 -
testCompile
testCompile 只在单元测试代码的编译以及最终打包测试apk时有效。 -
debugCompile
debugCompile 只在debug模式的编译和最终的debug apk打包时有效。 -
releaseCompile
releaseCompile 仅仅针对Release模式的编译和最终的Release apk打包。这里比如
gradle中api、implementation和compile的区别
我们在gradle中引用第三方maven库时,一般通过下面的语句去引用:
compile 'com.android.support:appcompat-v7:26.1.0'
, 然后sync project,就能成功引用对应的包到项目之中了,十分方便。除了使用compile关键字,使用implementation和api也能将包引用到项目中
api和compile关键字作用效果是一样的,使用时可以互相替换。实际上,api关键字是用来替代compile关键字的,因为compile关键字将来会被弃用。在高版本的gradle,使用compile关键字会报错并提示使用api关键字代替。
Q:看起来这三个关键字的作用是一样的,那么,他们到底有什么区别呢?
A:在同一个module下,implementation和compile的使用效果相同,但是在不同module下,就会有所区别了。
api或compile关键字引用的包对于其他module来说是可见的,而implementation关键字引用的包对于其他module来说是不可见的。
Maven仓库列表
1 | repositories { |
gradle全局换源
在C:\Users\mrli\.gradle
文件夹下修改init.gradle文件(如果没有则新建),写下如下内容:
1 |
|
注意:阿里源的URL使用https而不是http,否则会出现以下报错:Gradle报错Could not resolve all dependencies for configuration ‘:detachedConfiguration7‘.
参考:
- https://blog.csdn.net/qq_41053520/article/details/118244668
- https://www.cnblogs.com/huiyi0521/p/10997152.html——gradle中执行函数
- https://blog.csdn.net/qq32933432/article/details/108906687——work
buildscript
buildscript中的声明是gradle脚本自身需要使用的资源
1 | apply plugin: 'java' // java项目 |
gradle 工程使用mybatis
正常情况下是在src/main/java/**/xxx.xml 文件是不会被打包的,需要我们队gradle做一些特别的配置
①,build.gradle
1 | sourceSets.main.resources.srcDirs = ["src/main/java","src/main/resources"] |
②,指定mapper.xml 文件所在路径,这里我用的是mp
1 | mybatis-plus.mapper-locations=com/mp/test/mapper/xml/*Mapper.xml |
③,指定mapper接口所在路径
1 | "com.mp.test.mapper") ( |
gradle中使用docker
Author: Mrli
Link: https://nymrli.top/2021/09/26/学点Gradle/
Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.