gradle 订阅
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,目前也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。面向Java应用为主。当前其支持的语言限于Java、Groovy、Kotlin和Scala,计划未来将支持更多的语言。 展开全文
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,目前也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置。面向Java应用为主。当前其支持的语言限于Java、Groovy、Kotlin和Scala,计划未来将支持更多的语言。
信息
外文名
gradle
整体设计
以作为一种语言为导向
音    标
[g'reɪdl]
中文名
gradle
基    础
Groovy 语言
服务对象
Java应用
gradle简介
Gradle是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持maven, Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件,基于Groovy,build脚本使用Groovy编写。 [1] 
收起全文
精华内容
参与话题
问答
  • Gradle教程

    千次阅读 2019-03-06 16:04:33
    Gradle中文教程:https://www.yiibai.com/gradle/how-install-gradle-windows.html
    展开全文
  • Gradle的使用教程

    万次阅读 多人点赞 2018-08-08 19:28:28
    Gradle是一个好用的构建工具 ,使用它的原因是: 配置相关依赖代码量少,不会像maven一样xml过多 打包编译测试发布都有,而且使用起来方便 利用自定义的任务可以完成自己想要的功能 二、安装 下载地址...

    一、相关介绍

            Gradle是一个好用的构建工具 ,使用它的原因是:

    • 配置相关依赖代码量少,不会像maven一样xml过多 
    • 打包编译测试发布都有,而且使用起来方便 
    • 利用自定义的任务可以完成自己想要的功能

    二、安装

            下载地址http://services.gradle.org/distributions/  ,下载你所需要对应的版本,我这里下载的是gradle-4.7-bin.zip。下载后解压到你想要的目录即可,然后设置环境变量:

     

    在cmd模式下查看,出现以下信息证明安装成功:

    然后我们可以在在环境变量里配置gradle默认的仓库地址(和maven不太一样):

    三、IED中的使用

    1、IDEA

            使用idea创建一个web的Gradle项目

     

     

    然后对项目进行打包运行:

     

    双击war

     

    打包完成之后的war文件会在:

     

    然后把war放入对应的tomcat目录即可,这里就不多解释了。

    2、Eclipse

            eclipse中要自己安装插件,插件路径为:http://download.eclipse.org/buildship/updates/e46/releases/2.x/ 。

    四、问题说明

    1、解释build.gradle和settings.gradle

            首先是一个项目包含group、name、version 。settings.gradle是用来管理多项目的,里面包含了项目的name

     

    在build.gradle中,apply是应用的插件,如:

     

    这里我们用了java和war的插件 ,dependencies是用于声明这个项目依赖于哪些jar

     

    这里说明的是,测试编译阶段我们依赖junit的jar。其中包括complile(编译时)runtime(运行时)testCompile(测试编译时)testRuntime(测试运行时)。repositories是一个仓库gradle会根据从上到下的顺序依次去仓库中寻找jar 

     

    这里我们默认的是一个maven的中心仓库 ,从gradle源代码中我们看到地址是这样的

    这里可以进行配置,其中mavenLocal()表示使用本地maven仓库;mavenCentral()使用maven中心仓库 。使用固定的地址,这里可以使用阿里云(maven {url 'http://maven.aliyun.com/nexus/content/groups/public/'})的镜像下载速度会快一些,然后也可以使用公司内部的私服地址 。

    附加,这里加上一个spring boot的gradle配置文件,可以和maven的构建对比一下

    // buildscript 代码块中脚本优先执行
    buildscript {
    
    	// ext 用于定义动态属性
    	ext {
    		springBootVersion = '1.5.2.RELEASE'
    	}
    			
    	// 自定义  Thymeleaf 和 Thymeleaf Layout Dialect 的版本
    	ext['thymeleaf.version'] = '3.0.3.RELEASE'
    	ext['thymeleaf-layout-dialect.version'] = '2.2.0'
    	
    	// 自定义  Hibernate 的版本
    	ext['hibernate.version'] = '5.2.8.Final'
     
    	// 使用了 Maven 的中央仓库(你也可以指定其他仓库)
    	repositories {
    		//mavenCentral()
    		maven {
    			url 'http://maven.aliyun.com/nexus/content/groups/public/'
    		}
    	}
    	
    	// 依赖关系
    	dependencies {
    		// classpath 声明说明了在执行其余的脚本时,ClassLoader 可以使用这些依赖项
    		classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    	}
    }
    
    // 使用插件
    apply plugin: 'java'
    apply plugin: 'eclipse'
    apply plugin: 'org.springframework.boot'
    
    // 打包的类型为 jar,并指定了生成的打包的文件名称和版本
    jar {
    	baseName = 'springboot-test'
    	version = '1.0.0'
    }
    
    // 指定编译 .java 文件的 JDK 版本
    sourceCompatibility = 1.8
    
    // 默认使用了 Maven 的中央仓库。这里改用自定义的镜像库
    repositories {
    	//mavenCentral()
    	maven {
    		url 'http://maven.aliyun.com/nexus/content/groups/public/'
    	}
    }
    
    // 依赖关系
    dependencies {
     
    	// 该依赖对于编译发行是必须的
    	compile('org.springframework.boot:spring-boot-starter-web')
     
    	// 添加 Thymeleaf 的依赖
    	compile('org.springframework.boot:spring-boot-starter-thymeleaf')
    
    	// 添加  Spring Security 依赖
    	compile('org.springframework.boot:spring-boot-starter-security')
    	
    	// 添加 Spring Boot 开发工具依赖
     	//compile("org.springframework.boot:spring-boot-devtools")
     
    	// 添加 Spring Data JPA 的依赖
    	compile('org.springframework.boot:spring-boot-starter-data-jpa')
    	
    	// 添加 MySQL连接驱动 的依赖
    	compile('mysql:mysql-connector-java:6.0.5')
    	
    	// 添加   Thymeleaf Spring Security 依赖,与 Thymeleaf 版本一致都是 3.x
    	compile('org.thymeleaf.extras:thymeleaf-extras-springsecurity4:3.0.2.RELEASE')
    	
    	// 添加  Apache Commons Lang 依赖
    	compile('org.apache.commons:commons-lang3:3.5')
    	
    	// 该依赖对于编译测试是必须的,默认包含编译产品依赖和编译时依
    	testCompile('org.springframework.boot:spring-boot-starter-test')
    	
    
    }

     

    展开全文
  • 11.1 执行多个任务 每个任务都只执行一次,不管它如何被包含在build:无论是在命令行中指定...运行gradle dist测试这个构建脚本,编译任务将被执行一次。 build.gradle task compile  println 'compiling source'

    11.1 执行多个任务

    每个任务都只执行一次,不管它如何被包含在build:无论是在命令行中指定,或作为一个依赖的另一个任务,或两者兼而有之。

    以下四个任务的定义。dist和测试都依赖于 编译任务。运行gradle dist测试这个构建脚本,编译任务将被执行一次。

    build.gradle
    task compile << {
        println 'compiling source'
    }

    task compileTest(dependsOn: compile) << {
        println 'compiling unit tests'
    }

    task test(dependsOn: [compile, compileTest]) << {
        println 'running unit tests'
    }

    task dist(dependsOn: [compile, test]) << {
        println 'building the distribution'
    }

    > gradle dist test
    输出:

    :compile
    compiling source
    :compileTest
    compiling unit tests
    :test
    running unit tests
    :dist
    building the distribution

    说明每个任务只被执行一次


    11.2 剔除任务

    可以使用-x命令行选项,后跟排除任务的名称,以剔除一个任务

    > gradle dist -x test

    输出:
    :compile
    compiling source
    :dist
    building the distribution

    发现任务test没有被执行,它所依赖的compileTest也没有执行


    11.3 在发生故障(错误)时继续构建

    默认情况下,只要任何任务失败,Gradle将中止执行。这使得构建更快地完成,但隐藏了其他可能发生的故障。

    为了发现在一个单一的构建中多个可能发生故障的地方,你可以使用--continue选项。

    > gradle --continue build


    11.4 使用缩写的任务名

    在命令行中使用任务时,任务名可以使用任意长度的从头开始的缩写,只要能与目标任务唯一匹配即可

    > gradle di
    输出:

    :compile
    compiling source
    :compileTest
    compiling unit tests
    :test
    running unit tests
    :dist
    building the distribution


    也可以使用驼峰式命名,以下cT指代compileTest。当然也要是唯一匹配才行。

    > gradle cT
    输出:

    :compile
    compiling source
    :compileTest
    compiling unit tests

    当然缩写名也可以用在-x 选项后


    11.5 选择执行哪个构建文件

    使用-b选项,决定执行哪个构建文件

    创建目录和文件:subdir/myproject.gradle

    task hello << {
        println "using build file '$buildFile.name' in '$buildFile.parentFile.name'."
    }

    > gradle -q -b subdir/myproject.gradle hello

    输出:using build file 'myproject.gradle' in 'subdir'.


    使用-p选项,决定执行哪个工程

    创建目录和文件:subdir/build.gradle,内容为task hello

    > gradle -q -p subdir hello

    输出:using build file 'build.gradle' in 'subdir'.

    如要使用其他构建文件名,可与-b 一起使用: < gradle -q -p subdir -b subdir/myproject.gradle hello


    11.6 获取构建信息

    Gradle提供了几个内置任务来表明构建的具体细节。这可以帮助理解构建的结构、依赖,及调试问题。

    除了下面所示的内置任务,还可以使用report plugin,来产生报告。


    11.6.1 项目清单

    这里使用gradle/samples/java/multiproject

    > gradle -q projects

    输出:

    Root project 'multiproject'
    +--- Project ':api'
    +--- Project ':services'
    |    +--- Project ':services:shared'
    |    \--- Project ':services:webservice'
    \--- Project ':shared'

    输出了项目清单。这个+ 可以看成 后面还有 的意思


    在api项目下的build.gradle 中添加描述信息:

    description = 'This is API project. ' 

    > gradle -q projects

    输出:

    Root project 'multiproject'
    +--- Project ':api' - This is API project. 
    +--- Project ':services'
    |    +--- Project ':services:shared'
    |    \--- Project ':services:webservice'
    \--- Project ':shared'


    11.6.2 任务列表

    运行gradle tasks,显示任务列表。对于默认任务还会显示它相关的描述信息。

    > gradle tasks

    输出:

    ------------------------------------------------------------
    All tasks runnable from root project
    ------------------------------------------------------------

    Build tasks
    -----------
    assemble - Assembles the outputs of this project.
    build - Assembles and tests this project.
    buildDependents - Assembles and tests this project and all projects that depend on it.
    buildNeeded - Assembles and tests this project and all projects it depends on.
    classes - Assembles classes 'main'.
    clean - Deletes the build directory.
    jar - Assembles a jar archive containing the main classes.
    testClasses - Assembles classes 'test'.
    war - Generates a war archive with all the compiled classes, the web-app content and the libraries.

    Build Setup tasks
    -----------------
    init - Initializes a new Gradle build. [incubating]
    wrapper - Generates Gradle wrapper files. [incubating]

    Documentation tasks
    -------------------
    javadoc - Generates Javadoc API documentation for the main source code.

    Help tasks
    ----------
    components - Displays the components produced by root project 'multiproject'. [incubating]
    dependencies - Displays all dependencies declared in root project 'multiproject'.
    dependencyInsight - Displays the insight into a specific dependency in root project 'multiproject'.
    help - Displays a help message.
    projects - Displays the sub-projects of root project 'multiproject'.
    properties - Displays the properties of root project 'multiproject'.
    tasks - Displays the tasks runnable from root project 'multiproject' (some of the displayed tasks may belong to subprojects).

    IDE tasks
    ---------
    cleanEclipse - Cleans all Eclipse files.
    cleanEclipseWtp - Cleans Eclipse wtp configuration files.
    eclipse - Generates all Eclipse files.
    eclipseWtp - Generates Eclipse wtp configuration files.

    Verification tasks
    ------------------
    check - Runs all checks.
    test - Runs the unit tests.

    Other tasks
    -----------
    checkProjectDependency


    默认情况下,报告里的任务都存在一个组里。可以对任务更改组属性,还可以设置任务描述:

    比如在11.5里的例子中,后加上:

    hello {
        description = 'hello file'
        group = 'admin'
    }

    组属性值可以有:build、build setup等一些Gradle报告中默认的分组名,也可以自定一个名字

    进入subdir目录

    > gradle -q -b myproject.gradle task

    输出

    ------------------------------------------------------------
    All tasks runnable from root project
    ------------------------------------------------------------

    Admin tasks
    -----------
    hello - hello file

    Build Setup tasks
    -----------------
    init - Initializes a new Gradle build. [incubating]
    wrapper - Generates Gradle wrapper files. [incubating]

    Help tasks
    ----------
    components - Displays the components produced by root project 'subdir'. [incubating]
    dependencies - Displays all dependencies declared in root project 'subdir'.
    dependencyInsight - Displays the insight into a specific dependency in root project 'subdir'.
    help - Displays a help message.
    projects - Displays the sub-projects of root project 'subdir'.
    properties - Displays the properties of root project 'subdir'.
    tasks - Displays the tasks runnable from root project 'subdir'.


    再加上--all选项,可以在报告中输出,每个任务的依赖细节。

    在上例中,再加上:

    task dep(dependsOn: hello) << {
    println "dep."
    }
    dep {
        description = 'dep task'
        group = 'admin'
    }

    > gradle -q -b myproject.gradle task --all

    ... ...

    Admin tasks
    -----------
    dep - dep task [hello]
    hello - hello file

    ... ...


    11.6.3 显示任务的使用细节

    从这节开始使用 gradle/samples/userguide/tutorial/projectReports 示例

    gradle help --task taskName,显示任务所在路径,类型,可能有描述。

    > gradle -q help --task libs

    输出:

    Detailed task information for libs

    Paths
         :api:libs
         :webapp:libs

    Type
         Task (org.gradle.api.Task)

    Description
         Builds the JAR



    11.6.4  项目依赖清单

    运行命令 gradle dependencies project:dependencies ,多个项目以空格分隔,显示项目的依赖列表,树状显示。

    >  gradle -q dependencies api:dependencies webapp:dependencies

    输出:

    ------------------------------------------------------------
    Root project
    ------------------------------------------------------------

    No configurations

    ------------------------------------------------------------
    Project :api - The shared API for the application
    ------------------------------------------------------------

    compile
    \--- org.codehaus.groovy:groovy-all:2.3.6

    testCompile
    \--- junit:junit:4.11
         \--- org.hamcrest:hamcrest-core:1.3

    ------------------------------------------------------------
    Project :webapp - The Web application implementation
    ------------------------------------------------------------

    compile
    +--- project :api
    |    \--- org.codehaus.groovy:groovy-all:2.3.6
    \--- commons-io:commons-io:1.2

    testCompile
    No dependencies


    使用--configuration 过滤任务依赖报告。

     gradle -q api:dependencies --configuration testCompile

    输出:

    ------------------------------------------------------------
    Project :api - The shared API for the application
    ------------------------------------------------------------

    testCompile
    \--- junit:junit:4.11
         \--- org.hamcrest:hamcrest-core:1.3


    11.6.5 观察一个特定的依赖

    运行命令 gradle -q project:dependencyInsight --dependency dependname --configuration taskName

    显示--configuration 过滤任务的 名为dependname的详细依赖信息

    > gradle -q webapp:dependencyInsight --dependency groovy --configuration compile

    输出:

    org.codehaus.groovy:groovy-all:2.3.6
    \--- project :api
         \--- compile

    > gradle -q api:dependencyInsight --dependency j --configuration testCompile

    输出:
    junit:junit:4.11
    \--- testCompile

    发现,--dependency 后的 依赖名称可以缩写


    11.6.6 项目属性清单

    运行命令 gradle properties,输出所有项目属性列表

    > gradle -q api:properties

    指定api项目,输出属性:

    allprojects: [project ':api']
    ant: org.gradle.api.internal.project.DefaultAntBuilder@794e1b66
    antBuilderFactory: org.gradle.api.internal.project.DefaultAntBuilderFactory@76e903c1
    artifacts: org.gradle.api.internal.artifacts.dsl.DefaultArtifactHandler_Decorated@3bf5b0e4
    asDynamicObject: org.gradle.api.internal.ExtensibleDynamicObject@7f30677c
    baseClassLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@42da3f20
    buildDir: /Users/stone/Desktop/builds/projectReports/api/build
    buildFile: /Users/stone/Desktop/builds/projectReports/api/build.gradle
    buildScriptSource: org.gradle.groovy.scripts.UriScriptSource@666702a
    buildscript: org.gradle.api.internal.initialization.DefaultScriptHandler@2f4dd8ae
    childProjects: {}
    class: class org.gradle.api.internal.project.DefaultProject_Decorated
    classLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@2eb1d72d
    clean: task ':api:clean'
    compile: task ':api:compile'
    components: []
    configurationActions: org.gradle.configuration.project.DefaultProjectConfigurationActionContainer@1da5e34e
    configurations: [configuration ':api:compile', configuration ':api:testCompile']
    convention: org.gradle.api.internal.plugins.DefaultConvention@75ee2516
    defaultTasks: []
    dependencies: org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler_Decorated@65c503d6
    depth: 1
    description: The shared API for the application
    displayName: root project 'projectReports'
    ext: org.gradle.api.internal.plugins.DefaultExtraPropertiesExtension@697f0acc
    extensions: org.gradle.api.internal.plugins.DefaultConvention@75ee2516
    fileOperations: org.gradle.api.internal.file.DefaultFileOperations@139e0d30
    fileResolver: org.gradle.api.internal.file.BaseDirFileResolver@6d73d45f
    gradle: build 'projectReports'
    group: projectReports
    inheritedScope: org.gradle.api.internal.ExtensibleDynamicObject$InheritedDynamicObject@4f7be11c
    libs: task ':api:libs'
    logger: org.gradle.api.logging.Logging$LoggerImpl@4df81e08
    logging: org.gradle.logging.internal.DefaultLoggingManager@5c7bc735
    mayImplementMissingMethods: false
    mayImplementMissingProperties: false
    modelRegistry: org.gradle.model.internal.registry.DefaultModelRegistry@42539802
    module: org.gradle.api.internal.artifacts.ProjectBackedModule@9746661
    name: api
    parent: root project 'projectReports'
    parentIdentifier: root project 'projectReports'
    path: :api
    plugins: [org.gradle.api.plugins.HelpTasksPlugin@2f2379f2]
    processOperations: org.gradle.api.internal.file.DefaultFileOperations@139e0d30
    project: project ':api'
    projectDir: /Users/stone/Desktop/builds/projectReports/api
    projectEvaluationBroadcaster: ProjectEvaluationListener broadcast
    projectEvaluator: org.gradle.configuration.project.LifecycleProjectEvaluator@7e20cd52
    projectRegistry: org.gradle.api.internal.project.DefaultProjectRegistry@1b88032f
    properties: {...}
    repositories: [org.gradle.api.internal.artifacts.repositories.DefaultMavenArtifactRepository_Decorated@7e8910c7]
    resources: org.gradle.api.internal.resources.DefaultResourceHandler@58acb9b7
    rootDir: /Users/stone/Desktop/builds/projectReports
    rootProject: root project 'projectReports'
    scriptHandlerFactory: org.gradle.api.internal.initialization.DefaultScriptHandlerFactory@33d4cadc
    scriptPluginFactory: org.gradle.configuration.DefaultScriptPluginFactory@57524c19
    serviceRegistryFactory: org.gradle.internal.service.scopes.ProjectScopeServices$5@5c022a18
    services: ProjectScopeServices
    standardOutputCapture: org.gradle.logging.internal.DefaultLoggingManager@5c7bc735
    state: project state 'EXECUTED'
    status: release
    subprojects: []
    tasks: [task ':api:clean', task ':api:compile', task ':api:libs', task ':api:properties']
    version: 1.0-SNAPSHOT


    11.6.7 构建分析

    --profile 选项会在build/reports/profile 生成html文件,该html文件就是一份构建的配置报告。

    如果有 buildSrc目录,则还会在它下面生成一份profile

    > gradle --profile

    生成的文件,如下图:



    11.7 dry run

    -m 选项, 不执行某任务

    > gradle -m hello1 hello2 hello3



    展开全文
  • Gradle 简易入门教程

    万次阅读 2018-08-22 08:00:00
    作者: Yann 来源:原力注入Gradle 是一种构建工具,它抛弃了基于XML的构建脚本,取而代之的是采用一种基于 Groovy(现在也支持 Kotlin)的内部领域...
        

    作者: Yann  

    来源:原力注入


    Gradle 是一种构建工具,它抛弃了基于XML的构建脚本,取而代之的是采用一种基于 Groovy(现在也支持 Kotlin)的内部领域特定语言。


    Gradle特点


    1. Gradle是很成熟的技术,可以处理大规模构建

    2. Gradle对多语言、多平台支持性更好

    3. Gradle关注在构建效率上

    4. Gradle发布很频繁,重要feature开发计划透明化

    5. Gradle社区很活跃,并且增加迅速


    安装Gradle


    • 从 官网 (https://gradle.org/install/)下载二进制文件。

    • 解压Zip文件,加入环境变量(在PATH中加入GRADLE_HOME/bin目录)


    如果在安装过程中遇到问题,可以进一步查看官方的安装指南(https://gradle.org/install/)。最后验证一下 Gradle 是否工作正常


    1. gradle -v

    2. ------------------------------------------------------------

    3. Gradle 4.2.1

    4. ------------------------------------------------------------

    5. Build time:   2017-10-02 15:36:21 UTC

    6. Revision:     a88ebd6be7840c2e59ae4782eb0f27fbe3405ddf

    7. Groovy:       2.4.12

    8. Ant:          Apache Ant(TM) version 1.9.6 compiled on June 29 2015

    9. JVM:          1.8.0_162-ea (Oracle Corporation 25.162-b01)

    10. OS:           Mac OS X 10.13.5 x86_64


    Gradle快速体验


    初始化一个项目


    • 创建一个 demo 目录

    1. ❯ mkdir gradle-demo


    • 初始化 Gradle 项目

    1. ❯ gradle init

    2. Starting a Gradle Daemon (subsequent builds will be faster)

    3. BUILD SUCCESSFUL in 3s

    4. 2 actionable tasks: 2 executed



    Gradle目录结构


    我们看看上一步我们生成了什么文件


    ├── build.gradle  ❶
    ├── gradle
    │   └── wrapper
    │       ├── gradle-wrapper.jar    ➋
    │       └── gradle-wrapper.properties  ➌
    ├── gradlew    ➍
    ├── gradlew.bat  ➎
    └── settings.gradle  ➏


    ❶ 当前项目的配置脚本

    ➋ Gradle Wrapper 的执行jar包(后续介绍)

    ➌ Gradle Wrapper 的配置文件

    ➍ Gradle Wrapper Unix 系执行脚本

    ➎ Gradle Wrapper Windows 系执行脚本

    ➏ 项目脚本设置


    创建一个Task


    Gradle提供了用于通过基于Groovy或Kotlin的DSL创建和配置。项目包括一组Task,每个Task执行一些基本操作。


    • 创建一个目录叫 src

    • 在src目录创建一个 myfile.txt

    • 在构建文件中定义一个名为Copy的类型 Task ,该任务将src目录复制到名为dest的新目录


    groovy代码:

    1. task copy(type: Copy, group: "Custom", description: "Copies sources to the dest directory") {

    2.    from "src"

    3.    into "dest"

    4. }



    kotlin代码:

    1. tasks.create<Copy>("copy") {

    2.    description = "Copies sources to the dest directory"

    3.    group = "Custom"

    4.    from("src")

    5.    into("dest")

    6. }


    group 和 description 是自定义的任意值。现在让我们执行这个 task

    1. ❯ ./gradlew copy

    2. > Task :copy

    3. BUILD SUCCESSFUL in 0s

    4. 1 actionable task: 1 executed



    再一次 ls 我们就可以看见 gradle 为我们创建了一个新的 dest 目录并且将 文件复制进去。


    Gradle Task


    在Gradle中,有两个基本概念:项目和任务。

    • 项目是指我们的构建产物(比如Jar包)或实施产物(将应用程序部署到生产环境)一个项目包含一个或多个任务。

    • 任务是指不可分的最小工作单元,执行构建工作(比如编译项目或执行测试)。

    640?wx_fmt=png

    在项目目录中的 build.gradle 指定了一个项目和它的任务。


    Task执行顺序


    任务可能依赖于其他任务,或者可能被安排为始终在另一个任务之后运行。

    1. project('projectA') {

    2.    task taskX(dependsOn: ':projectB:taskY') {

    3.        doLast {

    4.            println 'taskX'

    5.        }

    6.    }

    7. }

    8. project('projectB') {

    9.    task taskY {

    10.        doLast {

    11.            println 'taskY'

    12.        }

    13.    }

    14. }



    1. > gradle -q taskX

    2. taskY

    3. taskX  // taskx 在 y 之后



    我们可以用 dependsOn 让我们的 Task 有顺序的运行起来。


    Gradle插件


    看到这里,如果每一件事情我们都需要写 Task 岂不是会累死,而且很多功能是可以被复用的,所以Gradle 提供一个 插件 功能,Gradle 默认就内置了大量的插件,比如在 base 中有一系列的功能。


    groovy代码

    1. plugins {

    2.    id "base"

    3. }



    kotlin代码:

    1. plugins {

    2.    id("base")

    3. }



    这个时候我们就可以利用一些额外的 Task,举个例子,我们要把一个目录中的东西都打成一个 ZIP 压缩包。


    groovy代码:

    1. task zip(type: Zip, group: "Archive", description: "Archives sources in a zip file") {

    2.    from "src"

    3.    setArchiveName "basic-demo-1.0.zip"

    4. }



    kotlin代码:

    1. tasks.create<Zip>("zip") {

    2.    description = "Archives sources in a zip file"

    3.    group = "Archive"

    4.    from("src")

    5.    setArchiveName("basic-demo-1.0.zip")

    6. }


    Gradle 的设计理念是

    • 在项目中添加新任务

    • 为新加入的任务提供默认配置,这个默认配置会在项目中注入新的约定(如源文件位置)。

    • 加入新的属性,可以覆盖插件的默认配置属性。

    • 为项目加入新的依赖。


    Gradle Java


    Gradle 内置了 Java 插件,Java插件将Java编译以及测试和捆绑功能添加到项目中。它是许多其他Gradle插件的基础。如果我们需要使用 Java 插件 修改 build.gradle


    1. plugins {

    2.    id 'java'

    3. }



    一旦导入了 Java 插件,就会有一系列的默认的配置值,并且会导入大量的 Task。

    Task含义
    compileJava(type: JavaCompile)Java 编译
    processResources(type: Copy)拷贝 Resources 资源
    classes(type: Task)组装 Java 类
    compileTestJava(type: JavaCompile)Java Test 编译
    processTestResources(type: Copy)拷贝 Test Resources 资源
    testClasses(type: Task)组装 Test 类
    jar(type: Jar)合成Jar包
    javadoc(type: Javadoc)生成 doc 文档
    test(type: Test)运行测试
    uploadArchives(type: Upload)上传 jar 到仓库
    clean(type: Delete)clean

    我们从这些 Task 名字就可以看出来他们分别作作了, 和其他的设计理念类型,在 Task 也会嵌入一些生命周期,其实原理也就是我们之前看的执行顺序。

    640?wx_fmt=png

    资源:Gradle插件仓库


    Gradle依赖管理


    先盗取一张官方的图。

    640?wx_fmt=png


    和 Maven 类似,Gradle 也会将依赖缓冲在本地中,方便在无网的环境使用,和依赖管理相关的有两个参数,举个例子。


    1. repositories {

    2.    mavenCentral() // 定义仓库

    3. }

    4. dependencies {

    5.    compile 'org.springframework:spring-web:5.0.2.RELEASE' // 定义依赖

    6. }


    Gradle支持以下仓库格式:

    • Ivy仓库

    • Maven仓库

    • Flat directory仓库


    lvy仓库


    我们可以通过URL地址或本地文件系统地址,将Ivy仓库加入到我们的构建中。

    1. repositories {

    2.    ivy {

    3.        url "http://ivy.petrikainulainen.net/repo"

    4.    }

    5. }

    6. //或者是本地

    7. repositories {

    8.    ivy {      

    9.        url "../ivy-repo"

    10.    }

    11. }



    Maven仓库


    1. repositories {

    2.    maven {

    3.        url "http://maven.petrikainulainen.net/repo"

    4.    }

    5. }



    在加入Maven仓库时,Gradle提供了三种“别名”供我们使用,它们分别是

    • mavenCentral()别名,表示依赖是从Central Maven 2 仓库中获取的。

    • jcenter()别名,表示依赖是从Bintary’s JCenter Maven 仓库中获取的。

    • mavenLocal()别名,表示依赖是从本地的Maven仓库中获取的。


    Flat Directory仓库


    1. repositories {

    2.    flatDir {

    3.        dirs 'lib'

    4.    }

    5. }

    6. //多个仓库

    7. repositories {

    8.    flatDir {

    9.        dirs 'libA', 'libB'

    10.    }

    11. }



    依赖管理



    在配置完项目仓库后,我们可以声明其中的依赖,首先 Java 插件指定了若干依赖配置项

    • compile 配置项中的依赖是依赖必须的。

    • runtime 配置项中包含的依赖在运行时是必须的。

    • testCompile 配置项中包含的依赖在编译项目的测试代码时是必须的。

    • testRuntime 配置项中包含的依赖在运行测试代码时是必须的。


    在 Gradle 最新版本中更是增加

    • implementation 配置项中的实现类

    • api 配置项中的暴露API


    1. dependencies {

    2.    api 'commons-httpclient:commons-httpclient:3.1'

    3.    implementation 'org.apache.commons:commons-lang3:3.5'

    4. }



    声明项目依赖


    最普遍的依赖称为外部依赖,这些依赖存放在外部仓库中。一个外部依赖可以由以下属性指定:

    • group属性指定依赖的分组(在Maven中,就是groupId)

    • name属性指定依赖的名称(在Maven中,就是artifactId)

    • version属性指定外部依赖的版本(在Maven中,就是version)


    1. dependencies {

    2.    compile group: 'foo', name: 'foo', version: '0.1'

    3. }

    4. // 我们也可以合并到一起去

    5. dependencies {

    6.    compile 'foo:foo:0.1'

    7. }



    声明项目文件依赖


    我们如何依赖本地的一些 jar 呢,正确的操作是如下

    1. dependencies {

    2.    compile files('libs/commons-lang.jar', 'libs/log4j.jar')

    3. }



    声明依赖排除项目


    我们都知道在 Maven中我们有

    1.    <dependency>

    2.        <groupId>sample.ProjectB</groupId>

    3.        <artifactId>Project-B</artifactId>

    4.        <version>1.0-SNAPSHOT</version>

    5.        <exclusions>

    6.            <exclusion>

    7.                <groupId>log4j</groupId>

    8.                <artifactId>log4j</artifactId>

    9.            </exclusion>

    10.        </exclusions>

    11.    </dependency>


    而在 Gradle 中,我们可以这么做。

    1. compile('com.example.m:m:1.0') {

    2.    exclude group: 'org.unwanted', module: 'x

    3. }



    Gradle与Kotlin


    我们想要在 gradle 中增加 kotlin 非常的简单,仅仅需要在 build.gradle 增加

    1. plugins {

    2.     id "org.jetbrains.kotlin.jvm" version "x.x.xx" // 增加插件

    3. }

    4. dependencies {

    5.  compile "org.jetbrains.kotlin:kotlin-stdlib:x.xx.xx" // 增加依赖

    6. }



    大功告成,对了,默认的 Kotlin 的源码路径是 src/main/kotlin, 测试源码是 src/text/kotlin 如果需要修改可以使用

    1. sourceSets {

    2.    main.kotlin.srcDirs += 'src/main/myKotlin'

    3.    main.java.srcDirs += 'src/main/myJava'

    4. }




    其他


    Gradle Wrapper



    Gradle Wrapper 做了三件事情

    • 解析参数传入 gradlew

    • 安装正确的 Gradle 版本

    • 调用 Gradle 执行命令


    Ops,Gradle Wrapper 为什么还需要安装 Gradle,我们在用 Maven 都知道,我们需要自己先安装好一个 Maven版本,因为 Maven 发展多年,现在已经稳定,已经不存在很多个版本并存的现状了,但是我们依然需要去在每个机器上去安装,那我什么我们不能在自己的 构建脚本 中就指定我们的构建工具呢?所以我们在 wrapper/gradle-wrapper.properties 中就可以发现 distributionUrl=https\://services.gradle.org/distributions/gradle-4.2.1-bin.zip 这里也就是定义了我们的gradle所使用的版本。


    640?wx_fmt=png

    Gradle In Real World

    1. // 定义一堆基础插件

    2. apply plugin: 'java'

    3. apply plugin: 'maven'

    4. apply plugin: "jacoco"

    5. apply plugin: 'checkstyle'

    6. apply plugin: 'pmd'

    7. apply plugin: 'findbugs'

    8. apply plugin: 'eclipse'

    9. apply plugin: 'idea'

    10. // 定义项目属性

    11. group = 'Common'

    12. version = '1.0.0'

    13. description = """Giant common library"""

    14. // 定义依赖仓库

    15. repositories {

    16.    mavenCentral()

    17. }

    18. // 额外增加source path

    19. sourceSets {

    20.    main {

    21.        resources {

    22.            srcDir "src/main/profiles/${profile}"

    23.        }

    24.    }

    25. }

    26. // project依赖

    27. dependencies {

    28.    compile 'ch.qos.logback:logback-core:1.0.13'

    29.    compile 'ch.qos.logback:logback-classic:1.0.13'

    30.    compile 'ch.qos.logback:logback-access:1.0.13'

    31.    compile 'commons-io:commons-io:2.0.1'

    32.    compile 'commons-lang:commons-lang:2.6'

    33.    compile 'joda-time:joda-time:1.6.2'

    34.    compile 'org.testng:testng:6.8.7'

    35.    compile 'com.googlecode.jmockit:jmockit:1.5'

    36.    ...

    37. }

    38. // task配置

    39. checkstyle {

    40.    ignoreFailures = true

    41.    sourceSets = [sourceSets.main]

    42. }

    43. findbugs {

    44.    ignoreFailures = true

    45.    sourceSets = [sourceSets.main]

    46. }

    47. pmd {

    48.    ruleSets = ["basic", "braces", "design"]

    49.    ignoreFailures = true

    50.    sourceSets = [sourceSets.main]

    51. }

    52. jacocoTestReport {

    53.    reports {

    54.        xml.enabled true

    55.        html.enabled true

    56.        csv.enabled false

    57.    }

    58.    sourceSets sourceSets.main

    59. }

    60. tasks.withType(Compile) {

    61.    options.encoding = "UTF-8"

    62. }

    63. test {

    64.    useTestNG()

    65.    jacoco {

    66.        excludes = ["org.*"]

    67.    }

    68. }



    Gradle常用指令


    枚列所有可用任务


    1. ❯ gradle tasks

    2. ------------------------------------------------------------

    3. All tasks runnable from root project

    4. ------------------------------------------------------------

    5. Archive tasks

    6. -------------

    7. zip - Archives sources in a zip file

    8. Build tasks

    9. -----------

    10. assemble - Assembles the outputs of this project.

    11. build - Assembles and tests this project.

    12. clean - Deletes the build directory.



    构建配置属性

    1. ❯ gradle properties



    显示构建详情


    在 build.gradle 设置

    1. logging.level = LogLevel.DEBUG


    或者在运行的

    1. ❯ gradle build --stacktrace


    参考资料&推荐文档


    • Gradle入门教程(http://blog.jobbole.com/71999/)

    • Gradle介绍(https://www.jianshu.com/p/00d5469e25e7)

    • 官方教材(https://guides.gradle.org/creating-new-gradle-builds/)

    -END-


     近期热文:

    关注我

    640?wx_fmt=jpeg

    点击“阅读原文”,看本号其他精彩内容

    展开全文
  • Gradle教程和指南 - 创建Gradle构建

    千次阅读 2018-04-13 11:11:19
    原文地址:Creating New Gradle Builds 遵循本指南,你将创建一个Gradle项目,调用一些基本的Gradle命令,并了解Gradle如何管理项目。 需要什么 大约11分钟 终端或者IDE 应用程序 JDK 1.7及以上 Gradle 4.6...
  • Gradle 教程说明 用户指南 1~6章

    万次阅读 2014-11-21 17:28:00
    要使用Android Studio,就...将Gradle的bin目录配置到环境变量中,以便在shell中可以使用gradle命令。 随便新建个目录(我这里建了一个名为builds的目录),cd进去,新建一个build.gradle文件,以下示例都编辑在build.
  • Gradle 实战教程

    千次阅读 2017-01-09 17:41:16
    Gradle 实战教程
  • Android Studio gradle sync failed 笔记

    千次阅读 2019-05-03 14:23:17
    1 问题 Android Studio 在创建完项目之后一直处于gradle ...打开所创建的Android项目,按照路径gradle/wrapper/gradle-wrapper.properties找到gradle-wrapper.properties文件双击打开, 复制上图中gradle的下...
  • 8.1 什么是依赖管理? 依赖管理非常粗略地分为两部份: · build 依赖自什么东西 · build 发布什么东西 8.2 声明你的依赖 ...build.gradle: apply plugin: 'java' repositories {  mavenCentral() } depend
  • 0.环境基础Java 1.8Gradle 3.0IDEA 2016.21.使用Spring Initializr来构建SpringBoot在https://start.spring.io/ 搭建基础项目 Generate a 选择“Gradle Project”Width Spring Boot 选择一个版本在Dependencies出...
  • 深入理解Android之Gradle

    万次阅读 多人点赞 2015-09-05 20:07:25
    深入理解Android之Gradle 格式更加精美的PDF版请到:https://pan.baidu.com/s/1GfN6F8sOaKFAdz5y1bn3VQ下载 weibo分享失效,请各位到百度云盘下载   Gradle是当前非常“劲爆”得构建工具。本篇文章就是专为讲解...
  • Gradle教程--基础篇

    千次阅读 2017-05-15 08:32:05
    Gradle 是什么Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言。安装Gradle在 Android Studio 中新建项目成功...
  • Gradle 入门教程(一):Gradle是什么

    千次阅读 2019-10-25 17:20:21
    这是一篇Gradle的入门教程 一、 Gradle是什么 1.1 构建工具 要解释Gradle是什么,首先要搞清楚一个名词——构建工具(Build Tool)。 构建工具,顾名思义就是用于构建(Build)的工具,构建包括编译(Compile)、...
  • eclipse 配置gradle 详细教程

    万次阅读 2018-12-24 09:43:06
    最近几年兴起的项目构建插件层出不穷,但总的来说 gradle 和maven 的市场使用份额最大,maven出现的早 好多人也比较喜欢,gradle是后来出现的,但是gradle 的功能个人感觉很强大。下面我简易的说下步骤。 1.下载并...
  • 官网地址:http://www.gradle.org/docs/2.1/userguide/tutorial_java_projects.html Using the Java plugin A basic Java project 一个基础的...使用java插件在build.gradle: apply plugin: 'java' Building the
  • idea+Gradle使用教程

    万次阅读 2018-09-26 14:41:54
    导语: IDEA拥有大量的JAVA开发者拥护,相比于开源的eclipse,IDEA拥有更简洁直观的界面,拥有更强大的自动补全功能,号称能“一路敲回车完成编码”。如果把IDEA和eclipse比作手机系统,IDEA就好比IOS,美观、强大...
  • gradle 教程学习笔记(二)

    万次阅读 2014-10-10 12:57:42
    今天继续学习gradle的命令,首先可以用
  • NDK和gradle配置教程

    万次阅读 2019-03-30 15:42:10
    NDK和gradle配置教程,工作时可能涉及: 1.https://blog.csdn.net/young_time/article/details/80346631#commentBox —— 注意配置环境变量export PATH=$PATH:/home/taojianhua/Android/Sdk/ndk-bundle 2....
  • 一、错误描述 A problem occurred evaluating script....> org.gradle.api.internal.project.ProjectInternal.getPluginManager()Lorg/gradle/api/internal/plugins/PluginManagerInternal; * Try: Run with --stacktr
  • IDEA中Gradle插件的使用Idea本身已经集成了Gradle插件,你可以在File | Settings | Build, Execution, Deployment | Build Tools | Gradle 下找到 相关配置配置 本文基于IDEA 2016.2 配置项 说明 Linked Gradle ...
  • Android Studio 安装教程以及gradle配置

    万次阅读 2019-01-26 19:36:21
    1、准备好android studio的dmg文件和gradle-4.6-all.zip文件。 2、双击打开,拖进Applications。 然后出现: 3、mac打开finder然后打开应用程序android studio。 选择打开。 ...
  • GradleGradle入门

    千次阅读 2015-12-28 23:59:08
    一、安装Gradle 1.首先确保你安装的JDK1.5或以上版本; C:\Users\chengxiang.peng.QUNARSERVERS>java -version java version "1.8.0_65" Java(TM) SE Runtime Environment (build 1.8.0_65-b17) Java HotSpot...
  • Android Gradle 介绍 官方教程

    千次阅读 2016-05-06 15:57:30
    这篇教程是根据官方的gradle视频教程整理出来的。 https://classroom.udacity.com/ 这里有很多google官方做的视频教程。自从遗弃了eclipse,猛追as以后,出现一个gradle。对于彩笔的我,gradle是个鸟玩意。完全不...
  • Gradle 菜鸟教程 1 安装配置

    千次阅读 2017-07-15 21:28:29
    Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具。 它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。
  • Gradle 15分钟入门教程

    万次阅读 2017-05-18 14:09:50
    1-Gradle入门介绍 在阅读或实践本文中的实例前,必须首先确保已将Gradle插件安装到Eclipse中。如果没有,可以点击下面的链接查看Gradle...本教程的目标: 这是项目完成后的代码结构图:  2-创建Gradle
  • 前两天开始studio 在 make project 的时候总是会报 apply script build.gradle time out 这个问题,或是有第三方依赖下载失败,后来没办法只能自己下载三方的jar包放到对应位置才解决了这个问题。 以 kotlin-...
  • Eclipse中Gradle插件的使用安装 无论你使用的是 eclipse/sts/myeclipse 还是任何eclipse的变种,可以通过点击Help->eclipse marketplace去插件市场搜索buildship然后点击install进行安装,此过程完全傻瓜操作,不赘述....
  • 下载并安装 Gradle 到linux 下载网址可以去 直接去[link 官网] (https://services.gradle.org/distributions/)无序列表1 无序列表2 无序列表3 无序列表3.1列表内容有序列表 有序列表 有序列表3 3.1 列表内容 3.2 ...

空空如也

1 2 3 4 5 ... 20
收藏数 85,901
精华内容 34,360
关键字:

gradle