gradle demo代码

示例介绍

 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中没有主清单属性

打开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是根项目
前面有 :  是子项目 在dependce中添加对某个模块的依赖 添加对子项目model的依赖 compile project(":model")

对所有子项目统一配置

allprojects{
    apply plugin:'java'
    sourceCompatibility = 1.8
}

allprojects { }subprojects { }compile project(":module_name")settings.gradle文件中添加 include "module_name" 添加项目的模块

统一设置gradle和version

新建gradle.properties并设置

gradle 测试中识别测试代码的方式:

  1. 对应测试框架的例子写法

  2. 继承自TestCase,groovyTestCase

  3. @Test,@Runwith注解的类

自动化测试 

一些开源的测试框架比如JUnit TestNG 能够版主编写可复用的结构化的测试,为了运行这些测试,先编译,像编译源代码一样。测试代码的作用仅仅用于测试的情况,不应被发布到生产环境中,需要把源代码和测试代码分开

测试配置

dependencies {

testCompile 'junit:junit4.11’

}

​测试发现

任何继承自junit.framework.TestCase或groovy.util.GroovyTestCase的类

任何被@RunWith的类

任何至少包含一个被@Test注解的类


发布项目的三步:

  1. 配置发布使用的插件


  2. 配置私服的地址

  3. 双击Publish任务

apply plugin:'maven-publish'

publishing{

publications{

myPublish(MavenPublication){

from components.java

}

}

repositories{

maven{

name "myRepo"

url “”

}

}

}

gradle的使用流程: 新建项目-->编码-->测试-->打包-->发布


你可能感兴趣的:(gradle)