Gradle 安装 & 命令行选项

系统学习 Gradle ,不局限于Android ,学习《实战Gradle》并简要记录

1 安装

直接参考 Gradle主页 安装方式,安装即可!

两种安装方式:

1.1 Install with a package manager (使用 包管理器 安装)

对于Mac系统,需要先安装 Homebrew ,然后在使用下面的命令 安 Gradle

$ brew install gradle

运行之后,提示如下信息(偶然性),需要升级 Xcode 版本,或者 干掉它。

《Gradle 安装 & 命令行选项》 之前的版本太低了,Homebrew 的版本需要更新

《Gradle 安装 & 命令行选项》 需要升级 Xcode

删掉还是升级,任选一种吧,处理之后:

《Gradle 安装 & 命令行选项》 正常安装

验证安装是否成功

$ gradle -v

查询结果如下,表示安装成功

《Gradle 安装 & 命令行选项》 安装成功

1.2 Install manually(手动安装)

参考官网,本文采取第一种安装方式

2 命令行选项

gradle 命令允许同时定义一个或多个命令行选项
比如下文要提到的 -i 和 -s 选项,就可以合并为 -is 或 -i -s

本文将介绍 最重要的10个命令行选项,并进行简单分类:

  • 日志选项 3个 ,-i / -s / -q
  • 参数选项 2个,-D / -P
  • 帮助任务 2个 ,tasks / properties
  • 其它选项3个, -? / -b / –offline

日志选项 (-i / -s / -q)

2.1 开始使用 Gradle ,并使用 -q 命令行选项

创建脚本文件,然后运行。
Gradle 构建脚本默认名字是 build.gradle

2.1.1 在对应路径下,创建脚本文件,从 Hello World 开始

《Gradle 安装 & 命令行选项》 创建脚本文件

脚本语言是Groovy(Gradle的通用语言),其中 task 和 action (doLast 就是一个 action)是这门语言(Gradle就是Groovy)的重要元素!

task helloWorld{
    doLast{
        println 'hello world !'
    }
}

<< 可以简单代表 doLast ,上述代码可简化为:

task helloWorld << {
        println 'hello world !'
}
2.1.2 运行脚本
gradle -q helloworld

<< 替换 doLast 后的两次运行结果一致,如下:

《Gradle 安装 & 命令行选项》 运行结果

去掉 -q 命令行选项,打印的信息如下:

《Gradle 安装 & 命令行选项》 去掉 -q 命令行选项

  1. doLast 是 task 执行的最后一个 action ,可用 << 简单代表
  2. 通过 -q 命令行选项 使其只输出该task相关的信息。同 –quiet 命令行选项
gradle --quiet helloworld

《Gradle 安装 & 命令行选项》 -q 命令行选项 等同于 –quiet 命令行选项

2.2 命令行选项 -i , –info

默认设置中不会提供大量的输出信息,如果想知道构建中发生了什么,
日志级别改到 INFO ,可以获取到更多信息

《Gradle 安装 & 命令行选项》 效果展示

2.3 命令行选项 -s , –stacktrace

-s 选项在有异常抛出时会打印出简短的堆栈跟踪信息,以帮助进行调试
将脚本故意多写一个大括号,以测试 -s 选项

task helloWorld << {
        println 'hello world !'
}
}

对比未使用 -s 和使用时的区别:

《Gradle 安装 & 命令行选项》 未使用 -s

《Gradle 安装 & 命令行选项》 使用 -s 选项,第一页

《Gradle 安装 & 命令行选项》 使用 -s 选项,最后一页

可以看到详细的堆栈信息(中间的没有截图,太多了)

参数选项 (-D / -P)

2.4 命令行选项 -D , –system-prop

Gradle 是以一个 JVM进程运行的,和所有的 Java 进程一样,可以提供一个系统参数。

-D, --system-prop         Set system property of the JVM (e.g. -Dmyprop=myvalue).

2.5 命令行选项 -P , –project-prop

项目参数是构建脚本中可用的变量,可以使用这个选项直接向构建脚本中传入参数

-P, --project-prop        Set project property for the build script (e.g. -Pmyprop=myvalue).

帮助任务 (tasks / properties)

2.6 命令行选项 tasks

显示项目中所有可运行的task,包括它们的描述信息。
项目中应用的插件可能会提供一些额外的task。

《Gradle 安装 & 命令行选项》 效果展示

2.7 命令行选项 properties

显示出项目中所有可用的属性。

jake@bogon:~/Documents/gradleTest$     gradle properties

> Task :properties

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

allprojects: [root project 'gradleTest']
ant: org.gradle.api.internal.project.DefaultAntBuilder@1a8f065b
antBuilderFactory: org.gradle.api.internal.project.DefaultAntBuilderFactory@5cdd0183
artifacts: org.gradle.api.internal.artifacts.dsl.DefaultArtifactHandler_Decorated@5e0ed76
asDynamicObject: DynamicObject for root project 'gradleTest'
baseClassLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@7dfd9b3b
buildDir: /Users/jake/Documents/gradleTest/build
buildFile: /Users/jake/Documents/gradleTest/build.gradle
buildPath: :
buildScriptSource: org.gradle.groovy.scripts.TextResourceScriptSource@1f22e701
buildscript: org.gradle.api.internal.initialization.DefaultScriptHandler@2b473c7f
childProjects: {}
class: class org.gradle.api.internal.project.DefaultProject_Decorated
classLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope@294eef3c
components: SoftwareComponentInternal set
configurationActions: org.gradle.configuration.project.DefaultProjectConfigurationActionContainer@387b9d6d
configurationTargetIdentifier: org.gradle.configuration.ConfigurationTargetIdentifier$1@30e97f8c
configurations: configuration container
convention: org.gradle.api.internal.plugins.DefaultConvention@225f192a
defaultTasks: []
deferredProjectConfiguration: org.gradle.api.internal.project.DeferredProjectConfiguration@7cb62552
dependencies: org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler_Decorated@18425f5c
dependencyLocking: org.gradle.internal.locking.DefaultDependencyLockingHandler_Decorated@632c46c7
depth: 0
description: null
displayName: root project 'gradleTest'
ext: org.gradle.api.internal.plugins.DefaultExtraPropertiesExtension@396085c1
extensions: org.gradle.api.internal.plugins.DefaultConvention@225f192a
fileOperations: org.gradle.api.internal.file.DefaultFileOperations@74b1ab0a
fileResolver: org.gradle.api.internal.file.BaseDirFileResolver@7e83a27f
gradle: build 'gradleTest'
group:
helloWorld: task ':helloWorld'
identityPath: :
inheritedScope: org.gradle.api.internal.ExtensibleDynamicObject$InheritedDynamicObject@7f18d916
layout: org.gradle.api.internal.file.DefaultProjectLayout@426b15b9
listenerBuildOperationDecorator: org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator@3b7b0f05
logger: org.gradle.internal.logging.slf4j.OutputEventListenerBackedLogger@48044c24
logging: org.gradle.internal.logging.services.DefaultLoggingManager@5808d24f
modelRegistry: org.gradle.model.internal.registry.DefaultModelRegistry@61616031
modelSchemaStore: org.gradle.model.internal.manage.schema.extract.DefaultModelSchemaStore@15fbb562
module: org.gradle.api.internal.artifacts.ProjectBackedModule@7d30806e
name: gradleTest
normalization: org.gradle.normalization.internal.DefaultInputNormalizationHandler_Decorated@7bbd6779
objects: org.gradle.api.internal.model.DefaultObjectFactory@18dd5c2c
parent: null
parentIdentifier: null
path: :
pluginManager: org.gradle.api.internal.plugins.DefaultPluginManager_Decorated@6597fd2
plugins: [org.gradle.api.plugins.HelpTasksPlugin@6cd3e7c0]
processOperations: org.gradle.api.internal.file.DefaultFileOperations@74b1ab0a
project: root project 'gradleTest'
projectConfigurator: org.gradle.api.internal.project.BuildOperationCrossProjectConfigurator@7c45c38c
projectDir: /Users/jake/Documents/gradleTest
projectEvaluationBroadcaster: ProjectEvaluationListener broadcast
projectEvaluator: org.gradle.configuration.project.LifecycleProjectEvaluator@e0bcc14
projectPath: :
projectRegistry: org.gradle.api.internal.project.DefaultProjectRegistry@43e185e8
properties: {...}
providers: org.gradle.api.internal.provider.DefaultProviderFactory@76c75cee
repositories: repository container
resourceLoader: org.gradle.internal.resource.transfer.DefaultUriTextResourceLoader@30ff87b3
resources: org.gradle.api.internal.resources.DefaultResourceHandler@62f46b83
rootDir: /Users/jake/Documents/gradleTest
rootProject: root project 'gradleTest'
script: false
scriptHandlerFactory: org.gradle.api.internal.initialization.DefaultScriptHandlerFactory@32cf70a5
scriptPluginFactory: org.gradle.configuration.ScriptPluginFactorySelector@7d4e6dd1
serviceRegistryFactory: org.gradle.internal.service.scopes.ProjectScopeServices$4@31c0afd4
services: ProjectScopeServices
standardOutputCapture: org.gradle.internal.logging.services.DefaultLoggingManager@5808d24f
state: project state 'EXECUTED'
status: release
subprojects: []
tasks: task set
version: unspecified

Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/4.10.2/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed

其它选项 (-? / -b / –offline)

2.8 命令行选项 -? , -h , –help

打印出所有可用的命令行选项。包含描述信息

// 任选一个命令
gradle -?
gradle -h
gradle --help

2.9 命令行选项 -b , –build-file

Gradle 构建脚本的默认命名约定是 build.gradle。
使用该命令可以执行一个特定名字的构建脚本。

《Gradle 安装 & 命令行选项》 创建一个名为 jake.gradle 的脚本文件,包含一个名为 test 的 task

命令结构为: gradle -b [文件名] [任务名]

gradle -b jake.gradle  test

《Gradle 安装 & 命令行选项》 运行结果

gradle -q -b jake.gradle  test

《Gradle 安装 & 命令行选项》 当然,也可以和 -q 选项同时使用

2.10 命令行选项 –offline

使用该选项可以以离线模式运行构建,仅仅在本地缓存中检查依赖是否存在。
在无网络且本地缓存没有时,若不使用该选项,构建都会失败。

Gradle 更多,待续…

    原文作者:南窗云
    原文地址: https://www.jianshu.com/p/d6af77cfc4d3
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞