注意
gradle中单引号'hello world'包围起来的, 就是普通的字符串.
双引号"my project version is $version"包围起来的, 会解析$version (位于gradle.properties文件中)
而单引号不会解析$version.
gradle命令
# 查看gradle版本
gradle -v
# 支持指定的task
gradle task名称
# 静默运行指定的task
gradle -q task名称
# 清理
gradle clean
# 列出项目中所有可用的task
gradle -q tasks
# 列出项目中所有可用的task, 包括依赖任务
gradle -q tasks --all
# 在执行时排除一个任务, 选项-x可以实现这个功能
gradle task名称 -x 要排除的task名称
# 在运行时, 提供一个系统参数. 选项-D可以实现这个功能
gradle task名称 -Dmyprop=myvalue
# 执行包装器任务
gradle wrapper
build.gradle文件内容
/* ------- 基本配置 ------- */
// 使用Java插件, 默认会到'src/main/java'目录下查找源代码
apply plugin: 'java'
// 使用war插件(它包含了java插件,所以两个写一个就可以了), 默认会识别'src/main/webapp'目录
apply plugin: 'war'
// 在嵌入式Web容器中运行
apply plugin: 'jetty'
// 定制jetty插件, 配置端口号和项目根路径
jettyRun {
httpPort = 9090
contextPath = 'todo'
}
// 指定项目版本号
version = 0.1
// 指定jdk版本兼容性
sourceCompatibility = 1.6
/*
添加程序启动类, 也就是将Main-Class头添加到JAR文件代码清单中
这样就可以通过java -jar build/libs/todo-app-0.1.jar命令来运行应用
*/
jar {
manifest {
attributes 'Main-Class': 'com.manning.gia.todo.ToDoApp'
}
}
/* ------- 改造遗留项目 ------- */
// 改变默认的项目 目录结构
sourceSets {
main {
java {
/*
约定的, 默认的源代码目录是在'src/main/java'
这里修改为'src'目录
*/
srcDirs = ['src']
}
}
test {
java {
/*
约定的测试源代码目录是在'src/test/java'
这里修改为'test'目录
*/
srcDirs = ['test']
}
}
}
// 约定的项目输出路径是'build'目录, 这里修改为'out'目录
buildDir = 'out'
/*
改变web应用webapp默认目录 (默认是'src/main/webapp')
用于改造旧项目, 如下所示:
|_ build.gradle
|_ src
| |_ main
| |_ java
|_ static
| |_ css
|_ webfiles
|_ WEB-INF
|_ web.xml
*/
webAppDirName = 'webfiles'
war {
// static目录下的 内容 添加到WAR文件的根目录下
from 'static'
}
/* ------- 依赖管理 ------- */
// 依赖管理, 定义中心仓库
repositories {
maven {
url 'http://maven.aliyun.com/nexus/content/groups/public/'
}
}
// 添加依赖
dependencies {
complie group: 'org.apache.commons', name: 'commons-lang3', version: '3.1'
providedComplie 'javax.servlet:servlet-api:2.5'
runtime 'javax.servlet:jstl:1.1.2'
}
/* ------- 部署 ------- */
// 配置包装器任务
task wrapper (type : Wrapper) {
gradleVersion = '3.5'
}
// 定制包装器
task wrapper (type : Wrapper) {
// 请求的gradle版本
gradleVersion = '3.5'
// 获取gradle包装器的URL
distributionUrl = 'http://myenterprise.com/gradle/dists'
// 包装器被解压后存放的相对路径
distributionPath = 'gradle-dists'
}
/* ------- 任务 ------- */
// 设置task的逻辑分组group和任务的作用description
// 方式一
task printVersion (group: 'versioning', description: 'Prints project version.') {
doLast {
logger.quiet "Version: $version"
}
}
// 方式二
task printVersion {
group = 'versioning'
description = 'Prints project version'
doLast {
logger.quiet "Version: $version"
}
}
// 定义task依赖的方式
task first << {println "first"}
task second << {println "second"}
task printVersion (dependsOn: [second, first]) << {
logger.quiet "Version: $version"
}
依赖的范围
Gradle依赖的范围和Maven的依赖的范围很类似,下面就来比较一下:
工具 | 依赖范围 | 编码有效 | 测试有效 | 被打包运行时有效 | 例子 |
---|---|---|---|---|---|
Maven | compile | y | y | y | log4j |
Maven | test | - | y | - | junit |
Maven | provided | y | y | - | servlet-api |
Maven | runtime | - | - | y | JDBC Driver |
Gradle | compile | y | y | y | apache-commons |
Gradle | testCompile | - | y | - | junit |
Gradle | providedCompile | y | y | - | servlet-api |
Gradle | runtime | - | - | y | jstl |