Gradle的基本使用
作者:木小丰 发布时间:2023-05-29 00:08:42
目录
一、Gradle相比Maven的优势
二、基本配置
三、最佳实践
四、总结
一、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开发过程中的大部分问题,如果还有什么问题,欢迎留言讨论。
来源:https://www.cnblogs.com/lesofn/p/14270731.html
猜你喜欢
- 嗯,就是BASE64,不用多想,本来计划是要跟上一篇字符串压缩一起写的,用来实现将一个文件可以用json或者text等方式进行接口之间的传输
- 今天本文与大家分享如何得到数组中的最大值和最小值的实例。很适合Java初学者复习数组的基本用法与流程控制语句的使用。具体如下:这个程序主要是
- 前言当系统的并发比较高的时候,日志的处理输出也是一种性能的开销负担,所以,选择一个中间件来处理消费日志必不可少!下面是spring boot
- 带logo的二维码生成分为两步骤:首先根据输入的内容生成二维码图片,然后读取本地的logo图片,通过图片处理生成带logo的二维码。生成的二
- 介绍在 .NET4.0 之前,如果我们需要在多线程环境下使用 Dictionary 类,除了自己实现线程同步来保证线程安全外,我们没有其他选
- 在JAVA克隆对象不能简单的使用clone方法,clone方法只是进行浅克隆。请看下方:深度克隆类:Java代码 import java.i
- 前言需求是上传Excel文件并读取Excel文件中的内容,根据获取的数据执行完某些业务操作后再将一些数据写回到excel中。前台使用Form
- StopWatch是位于org.springframework.util包下的一个工具类,通过它可方便的对程序部分代码进行计时(ms级别),
- 今天可是遇到一个很简单的需求,但是却让我蛋疼了半天。滑动屏幕控制物体旋转,但是旋转的角度要在-60到60之间。乍一听这简直是小儿科啊。判断一
- Controller简介Controller控制器,是MVC中的部分C,为什么是部分呢?因为此处的控制器主要负责功能处理部分:1、收集、验证
- 一、概述xml整合第三方框架有两种整合方案:不需要自定义名空间,不需要使用Spring的配置文件配置第三方框架本身内容,例如:MyBatis
- 在阿里开发手册的建表规约中有说明,数据库表中应该都要有create_time、update_time字段;那么在开发中,对于这些共有字段的处
- FastDFS 的作者余庆先生已经为我们开发好了 Java 对应的 SDK。这里需要解释一下:作者余庆并没有及时更新最新的 Java SDK
- 委托的Invoke方法用来进行同步调用。同步调用也可以叫阻塞调用,它将阻塞当前线程,然后执行调用,调用完毕后再继续向下进行。同步调用的例子:
- 1、什么是Spring MVC?Spring MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用
- 本文实例讲述了C#实现多线程下载文件的方法。分享给大家供大家参考。具体实现方法如下:using System;using System.Co
- Logback日志基础配置logback日志配置有很多介绍,但是有几个非常基础的,容易忽略的。下面是最简单的一个配置,注意加粗的描述<
- 经过上一篇的介绍,相信小伙伴们已经按奈不住内心对springboot的向往,本篇我将继续向小伙伴介绍springboot配置文件的配置,已经
- IDE的下载和安装:首先,到visual studio官网下载vs2019的安装程序。学生、或个人开发者免费下载第一个community版本
- 本文接上文“java反射之方法反射的基本操作方法”,利用反射了解下java集合中泛型的本质1、初始化两个集合,一个使用泛型,一个不使用Arr