Gradle的基本使用

 更新时间:2021年03月01日 15:55:38   作者:木小丰  
这篇文章主要介绍了Gradle的基本使用方法,帮助大家更好的理解和学习Gradle的相关知识,感兴趣的朋友可以了解下

一、Gradle相比Maven的优势

  • 配置简洁

Maven是用pom.xml管理,引入一个jar包至少5行代码,Gradle只需要一行。

  • 构建速度快

Gradle支持daemon方式运行,启动速度快,同时有基于daemon的增量构建,充分利用JVM的运行时优化,和缓存数据构建速度相比Maven快很多。

  • 更好的灵活性、扩展性

Gradle 相对于 Maven 等构建工具, 其提供了一系列的 API 让我们有能力去修改或定制项目的构建过程。

二、基本配置

  • 设置本地仓库地址

默认本地仓库地址是:~/.gradle,Windows下会占用大量C盘空间。

设置环境变量,GRADLE_USER_HOME=/your/path

  • 复用Maven本地仓库

在repositories配置mavenLocal()即可,如果是init.gradle全局配置,参考以下init.gradle文件

Maven本地仓库查找路径:

(1)USER_HOME/.m2/settings.xml

(2)M2_HOME/conf/settings.xml

(3)USER_HOME/.m2/repository

  • 国内镜像加速

国内访问国外仓库地址很慢,第一种方法是在每个项目中设置repositories

repositories {
 mavenLocal()
 'maven(http://maven.aliyun.com/nexus/content/groups/public/)'
 mavenCentral()
}

更推荐的方式是类似的Maven的settings.xml全局的配置,在上一步配置的GRADLE_USER_HOME路径下,添加init.gradle文件,以下配置文件中使用了阿里云的Gradle代理,支持jcenter、google、maven仓库。

gradle.projectsLoaded {
 rootProject.allprojects {
  buildscript {
   repositories {
    def JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter'
    def GOOGLE_URL = 'https://maven.aliyun.com/repository/google'
    def NEXUS_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
    all { ArtifactRepository repo ->
     if (repo instanceof MavenArtifactRepository) {
      def url = repo.url.toString()
      if (url.startsWith('https://jcenter.bintray.com/')) {
       project.logger.lifecycle "Repository ${repo.url} replaced by $JCENTER_URL."
       println("buildscript ${repo.url} replaced by $JCENTER_URL.")
       remove repo
      }
      else if (url.startsWith('https://dl.google.com/dl/android/maven2/')) {
       project.logger.lifecycle "Repository ${repo.url} replaced by $GOOGLE_URL."
       println("buildscript ${repo.url} replaced by $GOOGLE_URL.")
       remove repo
      }
      else if (url.startsWith('https://repo1.maven.org/maven2')) {
       project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
       println("buildscript ${repo.url} replaced by $REPOSITORY_URL.")
       remove repo
      }
     }
    }
    jcenter {
     url JCENTER_URL
    }
    google {
     url GOOGLE_URL
    }
    maven {
     url NEXUS_URL
    }
   }
  }
  repositories {
   def JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter'
   def GOOGLE_URL = 'https://maven.aliyun.com/repository/google'
   def NEXUS_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
   all { ArtifactRepository repo ->
    if (repo instanceof MavenArtifactRepository) {
     def url = repo.url.toString()
     if (url.startsWith('https://jcenter.bintray.com/')) {
      project.logger.lifecycle "Repository ${repo.url} replaced by $JCENTER_URL."
      println("buildscript ${repo.url} replaced by $JCENTER_URL.")
      remove repo
     }
     else if (url.startsWith('https://dl.google.com/dl/android/maven2/')) {
      project.logger.lifecycle "Repository ${repo.url} replaced by $GOOGLE_URL."
      println("buildscript ${repo.url} replaced by $GOOGLE_URL.")
      remove repo
     }
     else if (url.startsWith('https://repo1.maven.org/maven2')) {
      project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
      println("buildscript ${repo.url} replaced by $REPOSITORY_URL.")
      remove repo
     }
    }
   }
   jcenter {
    url JCENTER_URL
   }
   google {
    url GOOGLE_URL
   }
   maven {
    url NEXUS_URL
   }
  }
 }
}

三、最佳实践

  • 多模块配置

稍微大点的项目都会分模块开发,Gradle相比Maven的一个优势是用IDEA执行一个项目的代码时,会自动编译其依赖的其他模块。

在项目一级目录下添加settings.gradle配置文件:

rootProject.name = 'my-roject-name'

include 'module1'
include 'module2'

其中module1、module2就是子模块的文件夹名,在子模块里需要有一个配置子模块的build.gradle

模块内依赖,比如module2依赖module1,在module2的build.gradle配置文件里添加:

dependencies {
 compile project(":module1")
}
  • profile支持

profile用来加载不同环境的的配置文件,在笔者所在公司,推荐dev、test、staging、prod四套环境。

添加gradle.properties配置文件指定默认profile

profile=dev

启动profile,加载不同路径下的配置,在build.gradle里添加配置:

ext {
 profile = project['profile']
}
sourceSets {
 main {
  resources {
   srcDirs = ["src/main/resources/", "src/main/profiles/${profile}"]
  }
 }
}

命令行参数指定profile:

gradle build -Pprofile=prod
  • 初始化gradle项目

安装gradle,并在项目顶级目录下执行:

gradle init

如果当前目录有pom.xml,接下来会提示是否从Maven项目初始化Gradle项目,选择yes回车执行。

参数文档:https://docs.gradle.org/current/userguide/build_init_plugin.html

  • 引入bom文件

pom文件在Maven中是一个很有用的功能,方便多个项目统一版本号,在Maven中配置方式如下:

<dependencyManagement>
  <dependencies>
   <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>${spring-boot.version}</version>
    <type>pom</type>
    <scope>import</scope>
   </dependency>
  </dependencies>
</dependencyManagement>

Gradle有插件支持类似操作:

//引入插件
plugins {
 id "io.spring.dependency-management" version "1.0.10.RELEASE"
}
//引入bom
dependencyManagement {
 imports {
  mavenBom 'org.springframework.boot:spring-boot-dependencies:${spring-boot.version}'
 }
}
//使用bom,不需要执行版本号
dependencies {
 implementation "org.springframework.boot:spring-boot-starter-web"
}
  • 引入parent文件

在maven中执行parent是管理多个项目常用的方式,parent指定了项目的基本配置,配置方式如下:

<parent>
 <groupId>com.lesofn.blog</groupId>
 <artifactId>test-parent</artifactId>
 <version>0.0.1</version>
</parent>

Maven中的parent有两个作用,一个是类似bom的统一管理版本,即parent中的:dependencyManagement,另一个是基础jar包的引用,即父pom中的:dependencies

在Gradle可通过上面的io.spring.dependency-management插件实现类似的效果:

//引入插件
plugins {
 id "io.spring.dependency-management" version "1.0.10.RELEASE"
}
//引入parent,实现maven中dependencyManagement的功能,不用指定版本号
dependencyManagement {
 imports {
  mavenBom 'com.lesofn.blog:test-parent:0.0.1'
 }
}
//再次引入parent,实现maven中dependencies的功能
dependencies {
 implementation 'com.lesofn.blog:test-parent:0.0.1'
}

四、总结

经过以上配置,基本覆盖了Gradle开发过程中的大部分问题,如果还有什么问题,欢迎留言讨论。

以上就是Gradle的基本使用的详细内容,更多关于Gradle 使用的资料请关注脚本之家其它相关文章!

相关文章

  • Java文件上传与文件下载实现方法详解

    Java文件上传与文件下载实现方法详解

    这篇文章主要介绍了Java文件上传与文件下载实现方法,结合实例形式详细分析了Java文件上传与文件下载相关操作原理、实现方法及相关操作注意事项,需要的朋友可以参考下
    2019-02-02
  • Java设计模式之创建者模式简介

    Java设计模式之创建者模式简介

    这篇文章主要介绍了Java设计模式之创建者模式,需要的朋友可以参考下
    2014-07-07
  • 详解SpringBoot2 使用Spring Session集群

    详解SpringBoot2 使用Spring Session集群

    这篇文章主要介绍了SpringBoot2 使用Spring Session集群,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-04-04
  • 关于spring中bean注册的优先级分析

    关于spring中bean注册的优先级分析

    Spring框架中,Bean的定义方式主要有三种:XML定义、注解扫描和配置类中的@Bean注解,在Bean注册过程中,XML定义的GenericBeanDefinition优先级最高
    2024-09-09
  • java如何用Processing生成马赛克风格的图像

    java如何用Processing生成马赛克风格的图像

    这篇文章主要介绍了如何用java如何用Processing生成马赛克风格的图像,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Java编程实现统计一个字符串中各个字符出现次数的方法

    Java编程实现统计一个字符串中各个字符出现次数的方法

    这篇文章主要介绍了Java编程实现统计一个字符串中各个字符出现次数的方法,涉及java针对字符串的遍历、判断、运算等相关操作技巧,需要的朋友可以参考下
    2017-12-12
  • Eclipse中自动添加注释(两种)

    Eclipse中自动添加注释(两种)

    本文主要介绍了Eclipse中自动添加注释的两种方法。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • 从繁琐到简洁的Jenkins Pipeline脚本优化实践

    从繁琐到简洁的Jenkins Pipeline脚本优化实践

    这篇文章主要为大家介绍了从繁琐到简洁的Jenkins Pipeline脚本优化实践示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Java多线程并发synchronized 关键字

    Java多线程并发synchronized 关键字

    这篇文章主要介绍了Java多线程并发synchronized 关键字,Java 在虚拟机层面提供了 synchronized 关键字供开发者快速实现互斥同步的重量级锁来保障线程安全。
    2022-06-06
  • Springcloud Config支持本地配置文件的方法示例

    Springcloud Config支持本地配置文件的方法示例

    这篇文章主要介绍了Springcloud Config支持本地配置文件的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02

最新评论