gradle基础
来源:互联网 发布:遇害求救 知乎 编辑:程序博客网 时间:2024/06/05 04:50
安装
1、确保已经安装jdk,用java -version判断一下
2、从Gradle官网下载并进行解压
- 配置环境变量,GRADLE_HOME
- 添加到path,%GRADLE_HOME%\bin;
- 验证是否安装成功,gradle -v
官网下载Binary-only和Complete (with docs and sources)都可以。
gradle工程目录结构
与maven的工程目录结构一样
构建脚本概要
Gradle构建中的两个基本概念是项目(project)和任务(task),每个构建至少包含一个项目,项目中包含一个或多个任务。在多项目构建中,一个项目可以依赖于其他项目;类似的,任务可以形成一个依赖关系图来确保它们的执行顺序。
project1依赖于project2,project1中taskA依赖于taskB和taskC,所以taskB和taskC执行完后才执行taskA。
项目(project)
一个项目代表一个正在构建的组件(比如一个jar文件),当构建启动后,Gradle会基于build.gradle实例化一个org.gradle.api.Project类,并且能够通过project变量使其隐式可用
三个重要的属性–group、name、version– 对应maven中的坐标(groupId、artifactId、version),注(build.gradle中有group和version,而name在settings.gradle中)
重要的方法–apply、dependencies、repositories、task
属性的其他配置方式:ext、gradle.properties
任务
任务对应org.gradle.api.Task。主要包括任务动作和任务依赖。任务动作定义了一个最小的工作单元。可以定义依赖于其他任务、动作序列和执行条件。
重要方法
- dependsOn –任务依赖
- doFirst、doLast – task也是一个动作列表,doFirst在任务动作列表之前添加一个动作、doLast在任务动作列表之后添加一个动作。一个任务里可以执行多次doFirst和doLast
一般使用插件(jar或war等等)提供的任务,如果满足不了需求可以自定一任务。
自定义一个task生成工程目录
//创建java工程代码目录def createDir = { path -> File dir = new File(path); if(!dir.exists()){ dir.mkdirs(); }}//声明一个tasktask makeJavaDir(){ def paths = ['src/main/java','src/main/resources','src/test/java','src/test/resources',]; doFirst{ paths.forEach(createDir); }}
然后点击gradle中的刷新,就会在other中出现定义的任务
点击可以生成jar包,我们可以运行有main方法的jar包,例
java -classpath build/libs/tododemo-1.0-SNAPSHOT.jar com.kedou.gradle.tododemo.App
再编写一个任务依赖,这里创建一个web工程的目录
task makeWebDir(){ dependsOn 'makeJavaDir' def paths = ['src/main/webapp','src/test/webapp']; doLast { paths.forEach(createDir); }}
doFirst和doLast是生命周期执行阶段的执行代码,上例中其他就是配置阶段的代码
gradle 任务与插件
Android知识要点整理(21)—-Gradle 之创建任务和插件
构建生命周期
Gradle生命周期
依赖管理
常用仓库 mavenLocal/mavenCentral/jcenter,还有自定义maven仓库(也就是maven私服)。
依赖阶段配置
- compile、runtime –源代码
- testCompile、testRuntime – 测试代码
runtime依赖于compile,所以compile依赖的东西runtime也会依赖
testCompile依赖与compile,所以compile依赖的东西testCompile也会依赖。
解决版本冲突
- 查看依赖报告
- 排除传递性依赖
- 强制一个版本
- gradle默认解决策略,自动帮我们依赖最高版本的jar包
修改默认解决策略,从而发现版本冲突
//修改默认解决策略,使其当有依赖冲突构建失败configurations.all { resolutionStrategy{ failOnVersionConflict() }}
加上如上配置,执行build,结果:
Error:A conflict was found between the following modules: - org.slf4j:slf4j-api:1.6.1 - org.slf4j:slf4j-api:1.7.22 - org.slf4j:slf4j-api:1.5.8
去掉上面的依赖冲突构建失败配置,点击task的help中的dependencies查看依赖树
点击后结果如下:
compile - Dependencies for source set 'main' (deprecated, use 'implementation ' instead).+--- org.hibernate:hibernate-core:3.6.3.Final| +--- antlr:antlr:2.7.6| +--- commons-collections:commons-collections:3.1| +--- dom4j:dom4j:1.6.1| +--- org.hibernate:hibernate-commons-annotations:3.2.0.Final| | \--- org.slf4j:slf4j-api:1.5.8 -> 1.7.22| +--- org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.0.Final| +--- javax.transaction:jta:1.1| \--- org.slf4j:slf4j-api:1.6.1 -> 1.7.22\--- ch.qos.logback:logback-classic:1.2.1 +--- ch.qos.logback:logback-core:1.2.1 \--- org.slf4j:slf4j-api:1.7.22
而使用默认策略的结果就是使用最新的
排除传递性依赖
样例:
compile ("org.springframework.boot:spring-boot-starter-aop:${springBootVersion}") { exclude group: 'org.slf4j', module: 'slf4j-api' exclude group: 'ch.qos.logback', module: 'logback-classic'}
参考解决Gradle传递性依赖冲突
强制指定一个版本
//修改默认解决策略,使其当有依赖冲突构建失败configurations.all { resolutionStrategy{ failOnVersionConflict() force 'org.slf4j:slf4j-api:1.7.22' }}
ext与gradle.properties的使用
关于Gradle配置的小结
全局配置
根(root)下的build.gradle中共同的东西配置在allprojects和subprojects中
gradle测试
常用的是这样被发现,其他测试框架则按照提供的文档来
发布
使用Gradle发布项目到JCenter仓库
源码
学习源码
- Gradle基础--认识Gradle
- gradle基础
- Gradle基础
- gradle基础
- gradle基础
- Gradle基础
- Gradle基础
- Gradle 基础
- Gradle基础
- Gradle基础
- gradle 基础
- Gradle基础
- GRADLE基础
- Gradle基础
- Gradle基础
- gradle基础
- Gradle基础
- Gradle基础
- windows 安装scipy
- 是夜 到此
- sizeof()与strlen()的区别 memcpy memmove区别和实现
- 求两个排序数组的中位数
- An easy problem 【枚举 】
- gradle基础
- HDU 2444 (6/600)
- Python--csv模块
- 稀疏矩阵
- java.sql.SQLException: Value '[B@8ea6b9' can not be represented as java.sql.Timestamp
- 开启学习之旅
- KMP——转载
- 网站推广之新闻营销的那些事儿
- 在macOS开发中使用Touch Bar