gradle使用

原文:不好意思, Maven 该换了!

maven 之痛点:
相信使用Java的同学都用过Maven,这是一个非常经典好用的项目构建工具。但是如果你经常使用Maven,可能会发现Maven有一些地方用的让人不太舒服:

  • 一来Maven的配置文件是XML格式的,假如你的项目依赖的包比较多,那么XML文件就会变得非常非常长;
  • 二来XML文件不太灵活,假如你需要在构建过程中添加一些自定义逻辑,搞起来非常麻烦;
  • 第三就是Maven非常的稳定,但是相对的就是对新版java支持不足,哪怕就是为了编译java11,也需要更新内置的Maven插件。
    如果你对Maven的这些缺点也有所感触,准备尝试其他的构建工具,那么你可以试试gradle,这是一个全新的java构建工具,解决了Maven的一些痛点。

gradle作为一个新兴的工具已经有了广泛的应用,相比maven,它有以下优点:

  • 第一点也就是最重要的一点就是速度。gradle使用构建缓存、守护进程等方式提高编译速度。结果就是gradle的编译速度要远超maven,平均编译速度比Maven快好几倍,而且项目越大,这个差距就越明显。
  • 第二点就是灵活性,gradle要比Maven灵活太多,虽然有时候灵活并不是一件好事情。但是大部分情况下,灵活一点可以极大的方便我们。Maven死板的XML文件方式做起事情来非常麻烦。很多Maven项目都通过执行外部脚本的方式来完成一些需要灵活性的工作。而在gradle中配置文件就是构建脚本,构建脚本就是编程语言(groovy编程语言),完全可以自给自足,无需外部脚本。
  • 第三点就是gradle DSL带来的简洁性。完成同样的功能,gradle脚本的长度要远远短于maven配置文件的长度。虽然很多人都说XML维护起来不麻烦,但是我觉得,维护一个光是依赖就有几百行的XML文件,不见得就比gradle脚本简单。

安装gradle

最传统的安装方法就是去gradle官网下载二进制包,解压,然后将路径添加到环境变量中。如果你没什么其他需求,可以使用这种安装方式。但是,gradle是一个非常新潮的项目,每隔几个月就会发布一个新版本,这种方式可能跟不上gradle的更新速度。

所以我更加推荐使用包管理器来安装gradle。如果你使用linux系统,那么不必多说。如果你使用Windows系统,我推荐使用scoop包管理器来安装gradle。它安装方便,而且使用SHIM目录来管理环境变量,在各种工具中配置gradle也很方便。

如果你不喜欢安装这么多乱七八糟的东西,gradle提供了一个名为gradle wrapper的工具,其实它就是个脚本文件,当你运行wrapper脚本的时候,如果脚本发现你电脑里没有gradle,就会自动替你下载安装一个。现在甚至还出现了Maven wrapper,也是个脚本文件,可以自动安装Maven。

之前很多朋友尝试使用gradle,结果因为速度太慢,最后放弃了。不过现在使用gradle的话会方便很多。gradle官方在中国开设了,CDN,使用gradle wrapper的时候下载速度非常快。可以说现在是一个学习使用gradle的好时候。

使用 gradle wrapper

当我们使用IDEA来创建gradle项目的时候,IDEA会默认使用 gradle wrapper 来创建新项目,因此无需提前安装好 gradle 。

IDEA 推荐下载 all 版本,而非仅包含 bin 的二进制版本。因为all 版包含源代码,这样IDEA可以分析源代码,提供更加精确的gradle脚本支持。在 gradle 项目下的 gradle-wrapper.properties 文件中,设置distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip,注意最后是 -all.zip,而不是 -bin.zip。

gradle 项目的目录结构和 maven项目的几乎完全一致。

项目中的 gradle 文件夹和 gradlew.bat 文件,是gradle wrapper 的相关文件。

扩展名为 .gradle 的两个文件:build.gradle 和 settings.gradle 文件,是gradle的配置文件。对应于 maven 的 pom.xml。

.gradle 文件夹下会保存之前使用过的下载的各个版本的gradle,在wrapper/dists中。还会保存之前构建项目时的配置和依赖项的本地缓存,在cahces/modules-2/files-2.1 文件夹中。

gradle wrapper 的优点:

  • 可以自定义下载的 gradle 的版本,团队协作时,简单配置就可以统一团队的构建工具版本,非常方便。方式是在 gradle.properties 中,设置统一的distributionUrl 的值即可。
  • 依赖项配置仅需一行,格式为 scope ‘groupId:targetId:versionId’,可以去 jetbrains 的package search 网站 搜索 依赖项
  • 配置文件是 groovy脚本文件,可以编程方式自定义构建任务,灵活便捷。
  • 大量插件,比如官方插件之一 gretty插件

gradle 依赖项的scope 相较于 maven 更加精细

  • implementation,默认的scope。意为在编译和运行时都需要使用的依赖项。但是不暴露给这个类库的使用者、即不允许这类库的使用者使用它。
  • api,和 implementation 类似,也是编译和运行时都需要使用,并且类库的使用者也使用这个依赖项。
  • compileOnly 和 runtimeOnly,前者意为只允许在项目编译时使用这个依赖项 ,后者意为只允许项目在运行时使用这个依赖项。
  • testImplementation、testCompileOnly 、testRuntimeOnly,类似以上,但只允许在测试时使用

配置镜像和代理

可以直接使用maven 的仓库,因此也可以使用maven的镜像。

在C:\Users< your-user-name >.gradle 文件夹下创建一个 init.gradle 初始化脚本:

allprojects {
   repositories {
       maven {
           url "https://maven.aliyun.com/repository/public"
       }
       maven {
           url "https://maven.aliyun.com/repository/jcenter"
       }
       maven {
           url "https://maven.aliyun.com/repository/spring"
       }
       maven {
           url "https://maven.aliyun.com/repository/spring-plugin"
       }
       maven {
           url "https://maven.aliyun.com/repository/gradle-plugin"
       }
       maven {
           url "https://maven.aliyun.com/repository/google"
       }
       maven {
           url "https://maven.aliyun.com/repository/grails-core"
       }
       maven {
           url "https://maven.aliyun.com/repository/apache-snapshots"
       }
   }
}

更好的方式是配置全局代理:在C:\Users< your-user-name >.gradle 文件夹下,新建 gradle.properties 文件,做以下配置:

systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=10800
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=10800
systemProp.file.encoding=UTF-8

你可能感兴趣的:(gradle,java,android)