下载:https://gradle.org,选择binary-only,
~/.bash_profile
验证:
gradle -version
添加:
#GRADLE GRADLE_HOME=/Users/qinxy/software/gradle-4.9 PATH=$PATH:$GRADLE_HOME/bin export GRADLE_HOME GRADLE_USER_HOME PATH
gradle和gradlew
gradle init 命令创建的 Java 项目目录结构
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
├── main
│ └── java
│ └── App.java
└── test
└── java
└── AppTest.java
当时说过:有 2 种方式来编译这个示例项目
- 通过本机安装好的 gradle 命令编译
- 通过当前项目根目录下的 gradlew 命令编译(官方推荐的使用方式)
这篇文章的目的就是要介绍为什么官方推荐使用通过当前项目根目录下的 gradlew 命令编译项目
Gradle Wrapper 要解决什么问题
Gradle Wrapper 的目标是:任何人、任何时候、在任何电脑上拿到 gradle 创建的项目都能被准确无误的编译、执行
想象以下几个场景:
- 把自己写好的代码共享给其他人使用,可能出现如下情况
- 对方电脑没有安装 gradle
- 对方电脑安装过 gradle,但是版本太旧了
- 自己换电脑了,同样也会遇到上一种情况
- 翻出了自己几年前写的代码,但是当前电脑的 gradle 版本太新了,无法直接编译几年前的旧代码
如何让上面的问题不再是问题,无论是哪种异常情况都能得到正确的编译?
今天的主角 Gradle Wrapper 就是为了解决以上问题而存在的,这也是官方推荐使用它的原因
如何解决
项目根目录下与 Gradle Wrapper 相关的几个配置文件
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
- gradlew 是 Linux, Mac, 类 unix 系统上的可执行脚本
- gradlew.bat 是 Windows 系统上的可执行脚本
- gradle-wrapper.properties 文件记录着以下信息
- 当前项目想使用的 gradle 版本
- 去哪里下载这个版本的 gradle
- 下载之后的压缩包保存在哪里
- 压缩包解压到哪里
当我们第一次执行 ./gradlew build 命令的时候,gradlew 会读取 gradle-wrapper.properties 文件的配置信息,准确的将指定版本的 gradle 下载并解压到指定的位置。之后执行的 ./gradlew 所有命令都是使用指定的 gradle 版本,完美的解决了上面提出的问题
到底什么时候使用自己安装的 gradle,什么时候使用当前项目下的gradlew
- 从其他人获得的代码,使用当前项目下的 gradlew
- 使用自己安装的 gradle 新建项目。这样就等于给当前项目指定了希望其他人拿到项目之后使用的 gradle 版本。这种情况下由于我们自己安装过的 gradle 版本就是当前项目 gradlew 定义的版本,所以可以直接用自己安装的 gradle 执行各种构建命令,因为跟 gradlew 执行的效果一摸一样
gradle配置国内镜像
原创提辖鲁 最后发布于2017-11-02 11:19:28 阅读数 53785 收藏
展开
使用阿里云国内镜像
对单个项目生效,在项目中的build.gradle修改内容
buildscript { repositories { maven { url 'https://maven.aliyun.com/repository/google/' } maven { url 'https://maven.aliyun.com/repository/jcenter/'} } dependencies { classpath 'com.android.tools.build:gradle:2.2.3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { maven { url 'https://maven.aliyun.com/repository/google/' } maven { url 'https://maven.aliyun.com/repository/jcenter/'} } }
对所有项目生效,在${USER_HOME}/.gradle/下创建init.gradle文件
allprojects{ repositories { def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/public/' def ALIYUN_JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter/' def ALIYUN_GOOGLE_URL = 'https://maven.aliyun.com/repository/google/' def ALIYUN_GRADLE_PLUGIN_URL = 'https://maven.aliyun.com/repository/gradle-plugin/' all { ArtifactRepository repo -> if(repo instanceof MavenArtifactRepository){ def url = repo.url.toString() if (url.startsWith('https://repo1.maven.org/maven2/')) { project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL." remove repo } if (url.startsWith('https://jcenter.bintray.com/')) { project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL." remove repo } if (url.startsWith('https://dl.google.com/dl/android/maven2/')) { project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GOOGLE_URL." remove repo } if (url.startsWith('https://plugins.gradle.org/m2/')) { project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GRADLE_PLUGIN_URL." remove repo } } } maven { url ALIYUN_REPOSITORY_URL } maven { url ALIYUN_JCENTER_URL } maven { url ALIYUN_GOOGLE_URL } maven { url ALIYUN_GRADLE_PLUGIN_URL } } }
一些Gradle常用命令。
gradle -v //版本号
gradle clean //清除build文件夹
gradle build //检查依赖并打包
gradle assembleDebug //编译打包Debug包
gradle assembleRelease //编译打包Release包
gradle installRelease //打包并安装Release包
gradle unstallRelease //卸载Release包
gradle dependencies //查看依赖图表
gradle clean build -x test //跳过测试编译
gradle --profile build //分析构建任务
gradle build --dry-run //编译并不执行任务
gradle install //安置项目jar包到本地Maven仓库
gradle tasks //查看Gradle任务
gradle tasks --all //查看所有Gradle任务
gradle build --daemon //使用Gradle守护程序(Daemon)
gradle build --offline //用离线模式运行
gradle clean build --refresh-dependencies //刷新Gradle依赖缓存
#编译(含单元测试)gradle build
#编译(跳过单元测试)gradle build -x test
#单元测试gradle test
#安装到本地maven仓库gradle install
#清空所有编译、打包生成的文件,会清空build目录gradle clean
#运行项目gradle run
#源码打jar包,生成的jar在build/libs目录下gradle sourcesJar
#生成eclipse结构gradle eclipse -x :eclipse
#生成pom.xml文件,在build根目录下。把它复制项目根目录下,即可将gradle方便转成maven项目gradle createPom
Caused by: java.lang.ClassNotFoundException: org.gradle.api.internal.plugins.DefaultConvention
gradle build -x test
Example 1-1 一个文件执行
新建一个build.gradle文件
1
2
3
|
task helloWorld << {
println 'hello, world'
}
|
执行命令以及结果:
1
2
|
$ gradle -q helloWorld
hello, world
|
Example 1-2 俩个文件一起执行
新建一个build.gradle文件
1
2
3
4
5
6
|
task hello << {
print 'hello, '
}
task world(dependsOn: hello) << {
println 'world'
}
|
执行命令以及结果
1
2
|
$ gradle -q world
hello, world
|
编译一个Java程序代码
Example 1-3 最简单的Gradle Java构建文件
1
|
apply plugin: 'java'
|
Example 1-4 执行Java文件
1
2
3
4
5
6
|
package org.gradle.example.simple;
public class HelloWorld {
public static void main(String args[]) {
System.out.println("hello, world");
}
}
|
Example 1-5. 基本Java项目的布局
1
2
3
4
5
6
7
8
9
10
|
.
├── build.gradle
└── src
└── main
└── java
└── org
└── gradle
└── example
└── simple
└── HelloWorld.java
|
Example 1-6. 项目编译后的布局
Example 1-7. 如何运行Java程序
1
2
|
$ java -cp build/classes/main/ org.gradle.example.simple.HelloWorld
hello, world
|
build.gradle和settings.gradle
首先是一个项目包含group、name、version
settings.gradle是用来管理多项目的,里面包含了项目的name
在build.gradle中
apply是应用的插件,如:
这里我们用了java和war的插件
使用IDEA创建gradle项目后,执行main方法时会自动运行gradle的一些build task,导致启动很慢,修改preferences: