• Gradle实战(02)--Gradle Build的创建


    上一节:Gradle实战(01)--介绍与安装

    前言

    本章你将学习

    1. 创建一个简单的Gradle Project
    2. 调用一些基本的Gradle命令

    1 初始化Project

    首先, 创建一个新的Project文件夹, 并进入

    mkdir demo1 && cd demo1
    

    接着用gradle init命令生成一个简单的Project, 过程中会提示做一些选择

    1. Project的类型, 默认为basic
    2. DSL脚本语言, 默认为groovy
    3. Project名称, 默认为文件夹名相同
    $ gradle init
    
    Select type of project to generate:
      1: basic
      2: application
      3: library
      4: Gradle plugin
    Enter selection (default: basic) [1..4] 1
    
    Select build script DSL:
      1: Groovy
      2: Kotlin
    Enter selection (default: Groovy) [1..2] 1
    
    Project name (default: demo1):
    
    > Task :init
    Get more help with your project: https://guides.gradle.org/creating-new-gradle-builds
    
    BUILD SUCCESSFUL in 10s
    2 actionable tasks: 2 executed
    

    Project的目录结构如下

    .
    ├── build.gradle 						# project构建脚本
    ├── gradle
    │   └── wrapper							# 用于构建gradle的脚本, 用于快速安装gradle
    │       ├── gradle-wrapper.jar			# gradle wrapper可执行jar包
    │       └── gradle-wrapper.properties	# gradle wrapper配置属性
    ├── gradlew								# Unix系统的脚本
    ├── gradlew.bat							# Windows系统的脚本
    └── settings.gradle						# 配置脚本, 用于配置Gradle build
    

    2 Task的创建

    1. 一个Project包含多个Tasks, 每个Task具有一些基础的功能
    2. Gradle的DSL语言是基于Groovy或Kotlin的
    3. Gradle具有一个任务库, 可以用于配置个人的Project, 如Copy, Zip

    2.1 Task使用示例: Copy

    目标

    通过复制src目录了解Copy任务的使用

    流程

    1. 在demo1项目中创建src/hello.txt, 输入内容Hello world
    2. 创建Copy任务并执行, 完成src到dest的复制功能

    首先, 创建文件

    mkdir src && echo "Hello world" > src/hello.txt
    

    接着在build.gradle中创建Task, type是必填项, 指定任务类型; group和description可随意填写

    task copy(type: Copy, group: "Custom", description: "Copies sources to the dest directory") {
    	from "src"
    	into "dest"
    }
    

    最后执行copy任务, 将会看到完成了src文件夹到dest的复制

    $ ./gradlew copy
    
    BUILD SUCCESSFUL in 773ms
    1 actionable task: 1 executed
    

    需要注意的是, 命令中的./gradlew也可以替换为gradle, 区别在于

    1. gradle命令需要使用者配置完成gradle环境, 并将该gradle命令添加到了环境变量path中
    2. ./gradlew命令不需要配置gradle环境, 拥有该Project便可直接使用该命令

    2.2 Task使用示例: Zip

    目标

    通过打包src目录了解Zip任务的使用及Gradle插件的使用

    流程

    1. 引用插件base实现Zip任务参数的自动化配置
    2. 创建任务zip

    首先,在build.gradle中引入插件base,需要说明的是插件必须在文件的开头,更多的插件可以参考the Gradle plugin portal

    接着添加任务zip

    plugins {
        id "base"
    }
    
    task zip(type: Zip, group: "Archive", description: "Archives sources in a zip file") {
    	from "src"
    	archiveFileName = "demo1.zip"
    }
    

    最后执行zip任务,将会看到完成了src文件的打包,生成的demo1.zip文件在文件夹build/distributions下,即插件base的配置

    $ gradle zip
    
    BUILD SUCCESSFUL in 434ms
    1 actionable task: 1 executed
    

    3 Gradle的其它命令

    3.1 查询所有任务

    $ gradle -q tasks
    
    ------------------------------------------------------------
    Tasks runnable from root project
    ------------------------------------------------------------
    
    Archive tasks
    -------------
    zip - Archives sources in a zip file
    
    Build tasks
    -----------
    assemble - Assembles the outputs of this project.
    build - Assembles and tests this project.
    clean - Deletes the build directory.
    
    Build Setup tasks
    -----------------
    init - Initializes a new Gradle build.
    wrapper - Generates Gradle wrapper files.
    
    Custom tasks
    ------------
    copy - Copies sources to the dest directory
    
    Help tasks
    ----------
    buildEnvironment - Displays all buildscript dependencies declared in root project 'demo1'.
    components - Displays the components produced by root project 'demo1'. [incubating]
    dependencies - Displays all dependencies declared in root project 'demo1'.
    dependencyInsight - Displays the insight into a specific dependency in root project 'demo1'.
    dependentComponents - Displays the dependent components of components in root project 'demo1'. [incubating]
    help - Displays a help message.
    model - Displays the configuration model of root project 'demo1'. [incubating]
    outgoingVariants - Displays the outgoing variants of root project 'demo1'.
    projects - Displays the sub-projects of root project 'demo1'.
    properties - Displays the properties of root project 'demo1'.
    tasks - Displays the tasks runnable from root project 'demo1'.
    
    Verification tasks
    ------------------
    check - Runs all checks.
    

    从任务中你可以看到gradle定义了许多任务可以直接使用,且刚刚创建的copy任务和zip任务也在其中

    3.2 properties任务

    $ ./gradlew properties
    
    > Task :properties
    
    ------------------------------------------------------------
    Root project
    ------------------------------------------------------------
    
    allprojects: [root project 'demo1']
    ant: org.gradle.api.internal.project.DefaultAntBuilder@65ef4880
    antBuilderFactory: org.gradle.api.internal.project.DefaultAntBuilderFactory@6ca45041
    archivesBaseName: demo1
    artifacts: org.gradle.api.internal.artifacts.dsl.DefaultArtifactHandler_Decorated@345e652f
    asDynamicObject: DynamicObject for root project 'demo1'
    baseClassLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@267cc739
    buildDir: /Users/zhouweixin/gradle-demos/demo1/build
    buildFile: /Users/zhouweixin/gradle-demos/demo1/build.gradle
    copy: task ':copy'
    taskThatOwnsThisObject: null
    tasks: task set
    version: unspecified
    zip: task ':zip'
    ...
    

    你可以看到许多关于demo1工程的属性信息,zip任务打包的路径即是在此处buildDir设置的

    buildFile属性是指定脚本文件

    假如你想修改一些属性,比如version,只需要在build.gradle里设置即可

    version的修改示例如下,再次执行properties任务,可以直到version由unspecified修改成了1.1

    version="1.1"
    
  • 相关阅读:
    表达式的计算
    树、森林、与二叉树的转换
    线索二叉树
    表达式树
    js正则表达式处理表单
    kmp匹配算法
    SQL练习题
    ajax添加header信息
    mvc中webapi添加后没法访问 解决办法
    mysql修改表引擎Engine
  • 原文地址:https://www.cnblogs.com/zhouweixin/p/13682387.html
Copyright © 2020-2023  润新知