示例介绍
ToDo应用程序 只实现添加待办事项
java应用程序版
Web版
idea是可以为gradle项目自动生成目录的,老师在前面设置没有选择 create directories for empty content root automatically
1.jar用于将文件编译为jar包;2.build会执行build.gradle文件,由于插件是Java,所以也会将文件编译为jar包;3.classes会将文件转为class文件;3.clean会清除操作
命令行 java -classpath build/libs/todo-1.0-SHAPSHOT.jar com.mwzhfy.todo.App
打开jar包的META-INF/MANIFEST.MF文件加入下面的代码(注意:后面有个空格)
Main-Class:com.mwzhyf.todo.App(你的Main Class文件地址)
在build.gradle文件中添加插件如下:
apply plugin:'war'之后,则会在该项目的gradle Task的build目录下,多一个war的执行命令,双击war就可以生成war包
任务(task)中的命令
dependsOn 声明依赖
doFirst动作列表最前边添加动作 dolast (<<)动作列表最后添加动作
一个task中可以包含多个doFirst和dolast
apply 使用插件
dependencies 使用依赖
repositories 声明仓库
task 声明任务
build.gradle(构建脚本)
Gradle构建中的两个基本概念是项目(project)和任务(task)
每个构建至少包含一个项目,项目中包含一个或多个任务;在多项目构建中,一个项目可以依赖于其他项目;类似的,任务可以形成一个依赖关系图来确保他们的执行顺序;一个项目代表一个正在构建的组件(比如一个jar文件),当构建启动后,Gradle 会基于build.gradle实例化一个org.gradle.api.Project类,并且能够通过project变量使其隐式可用 其中group,name,version是project的属性,下面 apply denpendencies respositories task是project的方法 属性的其他配置方式 ext gradle.properties
任务对应org.gradle.api.Task;主要包括任务动作和任务依赖。任务动作定义了一个最小的工作单元。可以定义依赖于其他任务、动作序列和执行条件;
初始化阶段:gradle会根据构建脚本创建一个项目,也就是使project类隐式可用,多项目中会初始化构建的所有项目。 配置阶段:生成task依赖顺序,以及执行顺序,除了动作之外,初始化任务。 执行阶段:执行task动作代码。中间可穿插钩子方法
几乎所有的基于JVM的软件项目都需要依赖外部类库来重用现有的功能。自动化的依赖管理可以明确依赖的版本 ,解决因传递性依赖带来的版本冲突;
工件坐标 goup name version
常用仓库 1 mavenLocal/mavenCentral/jcenter
2 自定义maven仓库 3 文件仓库
依赖的传递性 b 依赖a 如果c 依赖b 那么c依赖a
自动化依赖管理 构建工具根据构建配置(build.gradle)从远程仓库下载jar包,到本地仓库,当使用时,到本地仓库去找,如果一个jar包被多次使用就放到依赖缓存中
http://search.maven.org/
依赖阶段配置
compile runtime
testCompile testRuntime
testRuntime extends rutime extends compile
testRuntime extends testCompile extends compile
由于传递依赖,使得项目中出现了版本冲突,gradle默认的解决版本冲突的策略是依赖最高版本的Jar包 修改默认的gradle处理版本冲突的策略,使得项目在出现版本冲突时,直接构建失败,以便于开发人员去解决版本冲突的问题
解决版本冲突 1 查看依赖报告2排除传递性依赖 3 强制一个版本
修改默认解决策略 configrations.all{
resolutionStrategy{
resolutionStrategy{
failOnVersionConflict()
}
}
}
排除传递性依赖 compile(‘org.hibernate:hibernate-core:3.6.3.Final’){
exclude group:"org.slf4j" ,module:"slf4j-api"
//transitive=false
}
强制指定一个版本
configuration.all{
resolutionStrategy{
force 'org.slf4j:slf4j-api:1.7.24'
}
}
项目模块化 :在企业项目中,包层次和类关系比较复杂,把代码拆分成模块通常是最佳实践,这需要你清晰的划分功能的 边界,比如把业务逻辑和数据持久化拆分开来。项目符合高内聚低耦合时,模块化就变得很容易,这是一条非常好的软件开发实践
TODO模块依赖关系
Web depends on Model
Web depends on Repository
Repository depends on Model
配置要求
所有项目应用java 插件
web子项目打包成war
所有项目添加logback日志功能
统一配置公共属性
项目结构 子项目+根项目
settings.gradle设置当前项目由那些子项目构建的 todo是根项目对所有子项目统一配置
allprojects{
apply plugin:'java'
sourceCompatibility = 1.8
}
allprojects { }subprojects { }compile project(":module_name")settings.gradle文件中添加 include "module_name" 添加项目的模块
统一设置gradle和version
新建gradle.properties并设置
gradle 测试中识别测试代码的方式:
对应测试框架的例子写法
继承自TestCase,groovyTestCase
@Test,@Runwith注解的类
自动化测试
一些开源的测试框架比如JUnit TestNG 能够版主编写可复用的结构化的测试,为了运行这些测试,先编译,像编译源代码一样。测试代码的作用仅仅用于测试的情况,不应被发布到生产环境中,需要把源代码和测试代码分开
测试配置
dependencies {
testCompile 'junit:junit4.11’
}
测试发现
任何继承自junit.framework.TestCase或groovy.util.GroovyTestCase的类
任何被@RunWith的类
任何至少包含一个被@Test注解的类
发布项目的三步:
配置发布使用的插件
配置私服的地址
双击Publish任务
apply plugin:'maven-publish'
publishing{
publications{
myPublish(MavenPublication){
from components.java
}
}
repositories{
maven{
name "myRepo"
url “”
}
}
}
gradle的使用流程: 新建项目-->编码-->测试-->打包-->发布