yyyyyyyyyyyyyyyyyyyy

博客园 首页 新随笔 联系 订阅 管理

 


下载:https://gradle.orghttps://services.gradle.org/distributions/,选择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默认目录:
设置windows环境变量GRADLE_USER_HOME,D:\cache\gradle_user_home
对于IDEA,File-->setting-->Build,Exception,Deployment-->BuildTools--->Gradle--->GradleUserHome,设置为D:\cache\gradle_user_home。
 

 

 

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 种方式来编译这个示例项目

  1. 通过本机安装好的 gradle 命令编译
  2. 通过当前项目根目录下的 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/'}
}
}

 对所有项目生效,在${GRADLE_USER_HOME}下(即repository缓存空间下)创建init.gradle文件。放在${GRADLE_HOME}不起作用。

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

 

构建:

idea最右边侧边栏“Gradle”菜单,gradle项目生命周期,点击“大象”按钮会,会执行:Assemble、build、buildDependencies、buildEnvironment。

点击“Build"--->"build",击"点锤子"按钮构建项目会重新下载依赖。。

如果构建成功,你再点击一下下图所示的那个“循环箭头”。 

  

 

Caused by: java.lang.ClassNotFoundException: org.gradle.api.internal.plugins.DefaultConvention

gradle build -x test

 




Example 1-1  一个文件执行

新建一个build.gradle文件

执行命令以及结果:

Example 1-2   俩个文件一起执行

新建一个build.gradle文件

执行命令以及结果

 

编译一个Java程序代码

Example 1-3  最简单的Gradle Java构建文件

Example 1-4   执行Java文件

 

Example 1-5. 基本Java项目的布局

 Example 1-6. 项目编译后的布局

Example 1-7. 如何运行Java程序










build.gradle和settings.gradle

首先是一个项目包含group、name、version

settings.gradle是用来管理多项目的,里面包含了项目的name

image

 

在build.gradle中

apply是应用的插件,如:

image

这里我们用了java和war的插件




idea+gradle常用配置:
1.使用IDEA创建gradle项目后,执行main方法时会自动运行gradle的一些build task,导致启动很慢,修改preferences:

 

 2.成功导入依赖后,可以通过IDEA最右边的侧栏进行快捷操作。


点击刷新按钮,可以重新导入所有的依赖。
点击+号,并选中相关的.gradle文件,可以导入新的module。
3.在打开项目时,如果module还缺少某些依赖,可以直接在对应的类里面按alt+enter自动导入。
也可以点击File,打开Project Structure里面,点击Modules,点击dependencies,点击+号,导入jar包或者其他的module,如下所示:

4.在.gradle文件中添加新依赖,dir表示的是依赖包所在的文件夹名称,include中为jar包,*表示匹配任意字符,如下:

dependencies {
	compile fileTree(dir: trd, include: 'guava*.jar')
	compile fileTree(dir: core, include: 'commons*.jar')
	compile fileTree(dir: bos, include: 'httpclient*.jar')
}

 

 
 

 

 

 

再也不用担心我gradle wrapper下载不动了.

完整版:gradle-6.x-all.zip

gradle-6.7.1-all.zip https://code.aliyun.com/kar/gradle-all-6.x-zip/raw/master/gradle-6.7.1-all.zip
gradle-6.7-all.zip https://code.aliyun.com/kar/gradle-all-zip/raw/master/gradle-6.7-all.zip
gradle-6.6.1-all.zip https://code.aliyun.com/kar/gradle-all-zip/raw/master/gradle-6.6.1-all.zip
gradle-6.6-all.zip https://code.aliyun.com/kar/gradle-all-zip/raw/master/gradle-6.6-all.zip
gradle-6.5.1-all.zip https://code.aliyun.com/kar/gradle-all-zip/raw/master/gradle-6.5.1-all.zip
gradle-6.5-all.zip https://code.aliyun.com/kar/gradle-all-zip/raw/master/gradle-6.5-all.zip
gradle-6.4.1-all.zip https://code.aliyun.com/kar/gradle-all-zip/raw/master/gradle-6.4.1-all.zip
gradle-6.4-all.zip https://code.aliyun.com/kar/gradle-all-zip/raw/master/gradle-6.4-all.zip
gradle-6.3-all.zip https://code.aliyun.com/kar/gradle-all-zip/raw/master/gradle-6.3-all.zip
gradle-6.2.2-all.zip https://code.aliyun.com/kar/gradle-all-zip/raw/master/gradle-6.2.2-all.zip
gradle-6.2.1-all.zip https://code.aliyun.com/kar/gradle-all-zip/raw/master/gradle-6.2.1-all.zip
gradle-6.2-all.zip https://code.aliyun.com/kar/gradle-all-zip/raw/master/gradle-6.2-all.zip
gradle-6.1.1-all.zip https://code.aliyun.com/kar/gradle-all-zip/raw/master/gradle-6.1.1-all.zip
gradle-6.1-all.zip https://code.aliyun.com/kar/gradle-all-zip/raw/master/gradle-6.1-all.zip
gradle-6.0.1-all.zip https://code.aliyun.com/kar/gradle-all-zip/raw/master/gradle-6.0.1-all.zip
gradle-6.0-all.zip https://code.aliyun.com/kar/gradle-all-zip/raw/master/gradle-6.0-all.zip

无源码版:gradle-6.x-bin.zip

gradle-6.7.1-bin.zip https://code.aliyun.com/kar/gradle-bin-zip/raw/master/gradle-6.7.1-bin.zip
gradle-6.7-bin.zip https://code.aliyun.com/kar/gradle-bin-zip/raw/master/gradle-6.7-bin.zip
gradle-6.6.1-bin.zip https://code.aliyun.com/kar/gradle-bin-zip/raw/master/gradle-6.6.1-bin.zip
gradle-6.6-bin.zip https://code.aliyun.com/kar/gradle-bin-zip/raw/master/gradle-6.6-bin.zip
gradle-6.5.1-bin.zip https://code.aliyun.com/kar/gradle-bin-zip/raw/master/gradle-6.5.1-bin.zip
gradle-6.5-bin.zip https://code.aliyun.com/kar/gradle-bin-zip/raw/master/gradle-6.5-bin.zip
gradle-6.4.1-bin.zip https://code.aliyun.com/kar/gradle-bin-zip/raw/master/gradle-6.4.1-bin.zip
gradle-6.4-bin.zip https://code.aliyun.com/kar/gradle-bin-zip/raw/master/gradle-6.4-bin.zip
gradle-6.3-bin.zip https://code.aliyun.com/kar/gradle-bin-zip/raw/master/gradle-6.3-bin.zip
gradle-6.2.2-bin.zip https://code.aliyun.com/kar/gradle-bin-zip/raw/master/gradle-6.2.2-bin.zip
gradle-6.2.1-bin.zip https://code.aliyun.com/kar/gradle-bin-zip/raw/master/gradle-6.2.1-bin.zip
gradle-6.2-bin.zip https://code.aliyun.com/kar/gradle-bin-zip/raw/master/gradle-6.2-bin.zip
gradle-6.1.1-bin.zip https://code.aliyun.com/kar/gradle-bin-zip/raw/master/gradle-6.1.1-bin.zip
gradle-6.1-bin.zip https://code.aliyun.com/kar/gradle-bin-zip/raw/master/gradle-6.1-bin.zip
gradle-6.0.1-bin.zip https://code.aliyun.com/kar/gradle-bin-zip/raw/master/gradle-6.0.1-bin.zip
gradle-6.0-bin.zip https://code.aliyun.com/kar/gradle-bin-zip/raw/master/gradle-6.0-bin.zip

 







posted on 2015-06-26 02:09  xxxxxxxx1x2xxxxxxx  阅读(1177)  评论(0)    收藏  举报