系统学习 Gradle ,不局限于Android ,学习《实战Gradle》并简要记录
1 安装
直接参考 Gradle主页 安装方式,安装即可!
两种安装方式:
1.1 Install with a package manager (使用 包管理器 安装)
对于Mac系统,需要先安装 Homebrew ,然后在使用下面的命令 安 Gradle
$ brew install gradle
运行之后,提示如下信息(偶然性),需要升级 Xcode 版本,或者 干掉它。
删掉还是升级,任选一种吧,处理之后:
验证安装是否成功
$ gradle -v
查询结果如下,表示安装成功
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 开始
脚本语言是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 后的两次运行结果一致,如下:
去掉 -q 命令行选项,打印的信息如下:
- doLast 是 task 执行的最后一个 action ,可用 << 简单代表
- 通过 -q 命令行选项 使其只输出该task相关的信息。同 --quiet 命令行选项
gradle --quiet helloworld
2.2 命令行选项 -i , --info
默认设置中不会提供大量的输出信息,如果想知道构建中发生了什么,
日志级别改到 INFO ,可以获取到更多信息
2.3 命令行选项 -s , --stacktrace
-s 选项在有异常抛出时会打印出简短的堆栈跟踪信息,以帮助进行调试
将脚本故意多写一个大括号,以测试 -s 选项
task helloWorld << {
println 'hello world !'
}
}
对比未使用 -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。
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 -b [文件名] [任务名]
gradle -b jake.gradle test
gradle -q -b jake.gradle test
2.10 命令行选项 --offline
使用该选项可以以离线模式运行构建,仅仅在本地缓存中检查依赖是否存在。
在无网络且本地缓存没有时,若不使用该选项,构建都会失败。
Gradle 更多,待续...