Gradle的基本使用
目录
- 一、Gradle相比Maven的优势
- 二、基本配置
- 三、最佳实践
- 四、总结
一、Gradle相比Maven的优势
- 配置简洁
- 构建速度快
- 更好的灵活性、扩展性
二、基本配置
- 设置本地仓库地址
设置环境变量,GRADLE_USER_HOME=/your/path
- 复用Maven本地仓库
Maven本地仓库查找路径:
(1)USER_HOME/.m2/settings.xml
(2)M2_HOME/conf/settings.xml
(3)USER_HOME/.m2/repository
- 国内镜像加速
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}} }}
三、最佳实践
- 多模块配置
在项目一级目录下添加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支持
添加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 init
如果当前目录有pom.xml,接下来会提示是否从Maven项目初始化Gradle项目,选择yes回车执行。
参数文档:https://docs.gradle.org/current/userguide/build_init_plugin.html
- 引入bom文件
org.springframework.boot spring-boot-dependencies${spring-boot.version} pom import
Gradle有插件支持类似操作:
//引入插件plugins { id "io.spring.dependency-management" version "1.0.10.RELEASE"}//引入bomdependencyManagement { imports {mavenBom 'org.springframework.boot:spring-boot-dependencies:${spring-boot.version}' }}//使用bom,不需要执行版本号dependencies { implementation "org.springframework.boot:spring-boot-starter-web"}
- 引入parent文件
com.lesofn.blog test-parent0.0.1
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(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量