1 前言
Gradle于2012年发布,带来了一些更高效的特点。 Gradle是一个基于ApacheAnt和ApacheMaven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。面向Java应用为主。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。
1.1 gradle特性
看到这里,你应该对gradle有了基本的了解, 也可以将其用于你的项目之中。但是如果你Maven已经非常熟悉了,可能不太愿意使用gradle,因为貌似没有必要。但是既然gradle出现了,就说明有很多人对Maven还是有一定的意见。因此在这里我来总结一下gradle相比maven的优势。
- 速度,gradle使用构建缓存、守护进程等方式提高编译速度。结果就是gradle的编译速度要远超maven,平均编译速度比Maven快好几倍,而且项目越大,这个差距就越明显。
灵活性,gradle要比Maven灵活太多,虽然有时候灵活并不是一件好事情。但是大部分情况下,灵活一点可以极大的方便我们。Maven死板的XML文件方式做起事情来非常麻烦。很多Maven项目都通过执行外部脚本的方式来完成一些需要灵活性的工作。而在gradle中配置文件就是构建脚本,构建脚本就是编程语言(groovy编程语言),完全可以自给自足,无需外部脚本。
- 简洁性,完成同样的功能,gradle脚本的长度要远远短于maven配置文件的长度。虽然很多人都说XML维护起来不麻烦,但是我觉得,维护一个光是依赖就有几百行的XML文件,不见得就比gradle脚本简单。
也许是因为我上面说的原因,也许有其他原因,不得不承认的一件事情就是gradle作为一个新兴的工具已经有了广泛的应用。spring等项目已经从Maven切换到了gradle。开发安卓程序也只支持gradle了。因此不管是否现在需要将项目从maven切换到gradle,但是至少学习gradle是一件必要的事情。
2 Gradle安装配置
GRADLE_HOME D:\gradle-6.8
%GRADLE_HOME%\bin
之后运行环境变量之后查看版本,注意所需的jdk,推荐8以上.
3 Gradle构建脚本
3.1 构建项目
4 项目启动
5 gradle中,dependency和plugin的区别
dependency引入的东西
作用:代码编译/运行时所需要的东西
打包:项目打包后这些东西基本都在(一般都在)。
例如:JSON工具包GSON(com.google.code.gson),不仅开发时要用,项目运行时也要用,就需要打包进项目中;
plugin引入的东西
作用:插件,作为开发/编译/打包时的一种辅助工具
打包:一般不会打包进项目中。
例如:使用 maven-source-plugin 插件将API包的源码一起打包,方便发布至Maven仓库,而这个插件不会在打包后的项目中出现。
maven中的样子
gradle中的样子
6 各种依赖方式说明
implementation
这个指令的特点就是,对于使用了该命令编译的依赖,对该项目有依赖的项目将无法访问到使用该命令编译的依赖中的任何程序,也就是将该依赖隐藏在内部,而不对外部公开。
api
完全等同于compile指令。
compile
这种是我们最常用的方式,使用该方式依赖的库将会参与编译和打包。
api或compile关键字引用的包对于其他module来说是可见的,而implementation关键字引用的包对于其他module来说是不可见的。
7 maven和gradle相互转换
7.1 gradle TO maven
在build.gradle中增加以下内容(group,version可自行修改,artifactId默认为目录名称)
plugins { id 'java' } apply plugin: 'maven' group 'com.lyh' version '1.0-SNAPSHOT' sourceCompatibility = 1.8 repositories { mavenLocal() mavenCentral() } dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.15' }
在Gradle项目根目录下执行 gradle install,我们会发现根目录的build文件夹下生成了一个poms文件夹里面有pom-default.xml文件。把它复制到根目录下,改名成pom.xml即可
然后执行mvn compile打包即可
使用maven的mvn compile编译过程中,出现如下警告:
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
解决:在pom.xml文件中配置:
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties>
7.2 maven TO gradle
先保证本机安装了gradle 2.0以上的版本
然后在maven项目的根目录下运行
gradle init --type pom
然后重启idea重新打开项目,右下角会有弹窗提示创建gradle项目,点击创建即可,然后该项目即是maven又是gradle项目了
8 gradle解决控制台中文乱码问题
-Dfile.encoding=UTF-8
9 gradle常见错误
gradle + lombok使用@Slf4j注解log日志编译出错:找不到符号
gradle项目使用lombok的@Slf4j注解输出日志时报了这么个错:
错误: 找不到符号
log.info(“xxxx”);
重装lombok插件,更换lombok版本都没解决,设置Enable annotation processing也不行,
build.gradle里除了引用
org.projectlombok:lombok:1.18.8
之外还需:
annotationProcessor ‘org.projectlombok:lombok:1.18.8’
10 gradle打jar包
11 gradle 怎么 install 本地项目到本地maven仓库,供其他项目使用
在maven项目里面,如果执行maven 的 install 命令,那么这个项目就会被发布到本地的仓库去。
那么gradle项目的话,看下他的侧面的命令没有install命令。这怎么办呢。
首先,需要在gradle项目里面引入maven插件。命令很简单
apply plugin: ‘maven’ // 引入maven插件
引入之后,就会在侧边栏的命令里面看到install命令了
然后,就是设置一下 group 和 version ,然后就可以install了。
可以看到,本地仓库已经给install成功了。
其他模块 引用你刚刚install的jar。
改完builder.gradle文件之后,import changes 一下,就可以跟使用其他公共的依赖一样使用自己创建的依赖。
可以在这个地方查看一下,刚刚引入的自定义jar
这地方是支持直接输入文字搜索的,使用idea久的,估计都知道吧。看我箭头指的地方。