zoukankan      html  css  js  c++  java
  • gradle 入门介绍

    gradle 简介

    基于Groovy实现的自动化构建工具,比maven好的一点在于不用写复杂的xml文件。使用script就可以。

    gradle 专业名词

    从一个build.gradle 文件开始,build.gradle 文件就是maven中pom.xml

    buildscript {
        repositories {
            mavenCentral()
            maven {
                url 'file:local_repo'
            }   
            }
        dependencies {
            classpath group: 'test', name: 'build-plugin',
                    version: '1.0'
        }
    }
    
    apply plugin: 'com.stone.build'
    plugins {
      id "net.saliman.cobertura" version "2.3.2"
    }
    subprojects { subproject ->
    
        apply plugin: 'eclipse'
        apply plugin: 'java'
        repositories {
            mavenCentral()
        }
        dependencyManagement {
        dependencies {
            //common dependency
            dependency "commons-io:commons-io:$COMMON_VERSION"    
            }
        }
        dependencies {
            compile 'commons-io:commons-io'
            compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
            testCompile group: 'junit', name: 'junit', version: '4.+'
        }
    }
    task wrapper(type: Wrapper) {
        gradleVersion = '2.3'
    }
    

    buildscript
    buildscript 中指定当前这个build.gradle 的执行环境。

    repository 指定当需要下载依赖时查找的中心库

    apply plugin 引用gradle插件,gradle有很多已有的plugin。或者你可以定制一个。查询已有的pluginhttps://plugins.gradle.org

    plugins apply plugin 的简化写法,gradle 2.1 中引入的。没必要再写dependency,然后使用apply plugin 引入

    subproject 定义子project的共同行为

    dependencyManagement 当有多个project,各个project有一些共同的jar包依赖。在这边声明jar包的统一版本.

    这边只是声明,并没有引入,需要在dependencies中引入。如果在dependencies中没有定义jar包版本,则继承dependcyManagement中的jar包版本。否则会覆盖

    dependencies 工程依赖的jar包
    wrapper 指定project 运行的gradle 版本。生成gradlew 可执行文件。运行./gradlew build时会去下wrapper task 中指定的gradle 版本。这样可以运行在没有安装gradle 的环境。当然如果你的环境中已经安装了gradle,而且可以运行project.可以直接使用gradle build命令。

    gradle 常见命令

    gradle buildEnvironment 查看build script 块中定义的dependencies

    gradle -q dependencies $subprojectname:dependencies
    列出subproject 的包依赖

    gradle plugin开发

    gradle 支持自定义plugin。开发很简单。实现Plugin 即可。

    https://github.com/davenkin/gradle-learning/tree/master/10-custom-plugin
    这边主要介绍另外一种,将task与project 解耦的方法。

    定义task

    继承DefaultTask,然后在@TaskAction 方法中定义Task执行的具体任务

    package davenkin
    
    import org.gradle.api.Plugin
    import org.gradle.api.Project
    import org.gradle.api.DefaultTask
    import org.gradle.api.tasks.TaskAction
    
    class ShowTimeTask extends DefaultTask {
        @TaskAction
        def showTimeTask(){
            println "Current time is " + new Date().format(project.dateAndTime.timeFormat)
        }
    }
    

    向project中注入task

    plugin实现Plugin,然后通过project.task注入。

    package davenkin
    
    import org.gradle.api.Plugin
    import org.gradle.api.Project
    import davenkin.ShowTimeTask
    import davenkin.ShowDateTask
    
    class DateAndTimePlugin implements Plugin<Project> {
        void apply(Project project) {
    
            project.extensions.create("dateAndTime", DateAndTimePluginExtension)
    
            project.task('showTime', type: ShowTimeTask);
            project.task('showDate', type: ShowDateTask);
        }
    }
    

    源码:https://github.com/FS1360472174/gradle-learning/tree/master/10-custom-plugin/create-plugin-in-standalone-project-withTask

    plugin publish

    artifactory {
            clientConfig.setIncludeEnvVars(true)
            contextUrl = 'http://localhost:8081/artifactory/'
            publish {
                repository {
                    repoKey = 'libs-release-local' 
                    username = "admin"
                    password = "password"
                }
            }
        }
    
    publishing {
        publications {
            mavenJar(MavenPublication) { from components.java }
        }
    }
    
    artifactoryPublish { publications('mavenJar') }

    如果artifactory中没有自定义publications。在artifactory中也可以指定默认的publish内容。

    gradle issues

    Q1: gradle设置多个repo,不生效,只会找最上面的一个repo

    A1: 将多个url分开写。将mavenCentral()放在最上面
    mavenCentral()
    maven { url }
    maven { url ‘file:local_repo’}

    参考

    https://plugins.gradle.org
    https://docs.gradle.org/current/userguide/custom_plugins.html
    https://plugins.gradle.org/plugin/net.saliman.cobertura
    http://buransky.com/scala/publish-jar-artifact-using-gradle-to-artifactory/

  • 相关阅读:
    PAT甲级1091Acute Stroke
    PAT甲级1076Forwards on Weibo
    PAT甲级1131Subway Map
    PAT甲级1130Infix Expression
    PAT甲级1103Integer Factorization
    PAT甲级1034Head of a Gang
    Blender删除历史材质球未用材质球
    王者荣耀 花木兰 水晶猎龙者 同人3D壁纸 木兰小哥哥也有拧不开瓶盖的时候,嘿嘿嘿 家居服 减布料
    王者荣耀 嫦娥 同人 3D渲染 壁纸 家居服 减布料
    联考6
  • 原文地址:https://www.cnblogs.com/stoneFang/p/6715293.html
Copyright © 2011-2022 走看看