首先说一下软件的一个生命周期:
- 编译源代码
- 运行单元测试和集成测试
- 执行静态代码分析、生成分析报告
- 创建发布版本
- 部署到目标环境
- 部署传递过程
- 执行冒烟测试和自动功能测试
你有闲情逸致去手动执行每一个步骤吗?有了自动化构建工具你可以把每一个步骤定义成一个Task,任务之间可以相互依赖。
一、1、maven是什么?
是项目管理工具,当Maven运行的时候它向项目对象模型(POM)查看关于这个项目的信息。POM回答类似这样的问题:这个项目是什么类型的?这个项目的名称是什么?这个项目的构建有自定义么?
maven的目标:认为项目是可重复使用,易维护,也更容易理解的一个综合模型。
- 为什么用maven?
你的项目要用很多jar包,比如链接数据库用connector,写日志要用log4j,现在写程序都要用spring,下载个spring打开一看密密麻麻的jar包,你肯定不知道到底用哪个不用哪个,就算你把所有jar包都引进来,可能还不能运行,因为还要依赖其他jar包,如果想升级个spring,所有的jar包都要重来一便,你也不记得那些是有spring引进的jar包了。所以有了maven,你只要配置一下你要用的spring,所有的jar包都给你下载好了,你直接运行就行了,哪天升级了改个版本号就欧了。
- 1、Apache Ant 是什么?
Apache Ant 是一个基于 Java的生成工具。生成工具在软件开发中用来将源代码和其他输入文件转换为可执行文件的形式(也有可能转换为可安装的产品映像形式)。
- 为什么要用ant。
打包的时候比如说配置文件中的用户名和密码,你本地开发和程序实际运行时的内容肯定不一致,所以需要有两个文件,开发的时候用一个,实际运行的时候用一个。这样每次打包的时候都要重复的做这些事,ant可以让你用xml的形式把这些事情写成脚本,然后自动运行。
三、然后用了maven,jar包是方便了,但我打包的时候还是有好多事要做啊,然后你会发现maven实在是不知道怎么做这些事,于是开始怀念ant。gradle就是又能干maven的活,又能干ant的活,用groove语言写脚本,表达能力还更强。
四、gradle是代替maven和Ant的下一代项目构建工具,gradle是一个像ant那样的构建工具,又有 maven 的依赖管理功能,通俗的讲gradle是一个依赖管理/自动化编译测试部署打包工具。
依赖管理简单地说就是你只用写一行代码就可以自动帮你把jar包下载下来并能被当前工程所使用。
自动化构建就是gradle可以通过一些命令去执行一些特有任务比如编译测试打包等等。
五、Gradle构建
1、首先在gradle中有两个最基本的概念Projects和tasks。Projects由多个tasks组成,task就是例如编译、打包、执行等原子性工作。
2、Gradle的构建分两个阶段,第一阶段是设置阶段,分析构建脚本,处理依赖关系和执行顺序等.第二阶段是执行阶段,此阶段真正构建项目并执行项目下的各个任务。
3、对gradle的构建进行配置,配置文件如下:
Gradle构建脚本(build.gradle)指定一个项目和他的任务。
Gradle属性文件(gradle.properties)配置构建属性。
Gradle设置文件(gradle.settings)多项目构建主要描述哪个项目参与构建。
4、Gradle插件介绍:
- 作用:在项目中添加新任务
- 为新加入的任务提供默认配置,这个默认配置会在项目中注入新的约定(如源文件位置)。
- 加入新的属性,可以覆盖插件的默认配置属性。
- 为项目加入新的依赖。
- 为项目加入gradle插件,在build.gradle文件中加入apply plugin:‘foo’。
5、实战-创建一个java项目
默认目录:
- src/main/java目录包含了项目的源代码。
- src/main/resources目录包含了项目的资源(如属性文件)。
- src/test/java目录包含了测试类。
src/test/resources目录包含了测试资源。
所有我们构建生成的文件都会在build目录下被创建,这个目录涵盖了以下的子目录: classes目录包含编译过的.class文件。
libs目录包含构建生成的jar或war文件。
就是这样,现在我们已经创建了一个Java项目。Java插件会在我们的构建中添加一些新的约定(如默认的项目结构),新的任务,和新的属性。
Java插件在我们的构建中加入了很多任务我门现在用到的如下:
assemble任务会编译程序中的源代码,并打包生成Jar文件,这个任务不执行单元测试。
- build任务会执行一个完整的项目构建。
- clean任务会删除构建目录。
- compileJava任务会编译程序中的源代码。
- 依赖管理:
首先是仓库管理,其实仓库无非是存放依赖的容器,每个项目都具备一个或多个仓库。
Gradle支持以下仓库格式:
Ivy仓库
不过我现在只知道maven仓库:Maven仓库就是放置所有JAR文件(WAR,ZIP,POM等等)的地方,所有Maven项目可以从同一个Maven仓库中获取自己所需要的依赖JAR,这节省了磁盘资源。
Maven仓库分为本地仓库和远程仓库
本地仓库配置:在build.gradle文件中加入:
repositories {
maven {
url "../maven-repo"
}
}
远程仓库配置:
repositories {
maven {
url "http://maven.petrikainulainen.net/repo"
}
}
在加入Maven仓库时,Gradle提供了三种“别名”供我们使用,它们分别是:
- mavenCentral()别名,表示依赖是从Central Maven 2 仓库中获取的。
- jcenter()别名,表示依赖是从Bintary’s JCenter Maven 仓库中获取的。
mavenLocal()别名,表示依赖是从本地的Maven仓库中获取的。
比如说:
repositories {
mavenCentral()
}
如何使用gradle管理项目的依赖
配置完项目仓库,我们可以声明其中的依赖,声明步骤:
第一步,指定依赖的配置:
在Gradle中,依赖是按照指定名称进行分类的,这些分类被称为配置项,我们可以使用配置项声明项目的外部依赖。
比如说Java插件指定了若干依赖配置项,其描述如下:
- 当项目的源代码被编译时,compile配置项中的依赖是必须的。
- runtime配置项中包含的依赖在运行时是必须的。
- testCompile配置项中包含的依赖在编译项目的测试代码时是必须的。
- testRuntime配置项中包含的依赖在运行测试代码时是必须的。
- archives配置项中包含项目生成的文件(如Jar文件)。
- default配置项中包含运行时必须的依赖。
第二步,声明项目依赖:
普遍的依赖称为外部依赖,这些依赖存放在外部仓库中。一个外部依赖可以由以下属性指定:
- group属性指定依赖的分组(在Maven中,就是groupId)。
- name属性指定依赖的名称(在Maven中,就是artifactId)。
- version属性指定外部依赖的版本(在Maven中,就是version)。
- 实战,演示程序:
- 创建二进制文件
大家都知道二进制发布版本,就是我们的应用该发布到服务器了。
(1)Application插件是一种gradle插件,让我们可以运行、安装应用程序并创建二进制发布版本。
步骤:
为项目应用application插件
apply plugin: 'application'
对应用程序主类进行配置,设置mainClassName属性
mainClassName = 'et.common.hello.HelloWorld'
然后Application插件在项目中添加5个任务:
- run任务用以启动应用程序。
- startScripts任务会在build/scripts目录中创建启动脚本,这个任务所创建的启 动脚本适用于Windows和*nix操作系统。
- installApp任务会在build/install/[project name]目录中安装应用程序。
- distZip任务用以创建二进制发布并将其打包为一个zip文件。可以在build/distributions目录下找到。
- distTar任务用以创建二进制发布并将其打包为一个tar文件。可以在build/distributions目录下找到。
- 在二进制发布版本中添加应用程序许可证
步骤:
License文件包含了我们应用程序的许可信息,可以在项目的根目录下找到他
a、 创建一个任务,将许可证从项目的根目录复制到build目录下
创建一个新的copy任务,起了一个名字叫copylicense,调用CopySpec接口中的from方法和into方法。
task copyLicense(type: Copy) {
from "LICENSE"
into "$buildDir"
}
但是此时这个任务并没有引入
b、将许可证加入到所创建的二进制发布的根目录下
1、将copyLicense任务从一个Copy任务改为正常的Gradle任务,只需在它的声明中移除“(type: Copy)”字符串。
2、按照以下步骤修改copyLicense任务
配置copyLicense任务输出。创建一个新的文件对象,指向build目录的许可证文件,并将其设置为outputs.file属性值。
将许可证文件从项目的根目录复制到build目录下。
3、 Application插件在项目中设置了一个CopySpec属性,名为applicationDistribution。我们可以使用这个属性在已创建的二进制文件中加入许可证文件,步骤如下:
使用CopySpec接口中的from()方法配置许可证文件的位置,将copyLicense任务的输出作为方法参数。
使用CopySpec接口中into()方法配置target目录,将一个空的字符串作为参数调用方法。
task copyLicense {
outputs.file newFile("$buildDir/LICENSE")
doLast {
copy {
from "LICENSE"
into "$buildDir"
}
}
}
applicationDistribution.from(copyLicense) {
into ""
}
- 演示
- 创建多项目构建:
到目前为止我们有两个模块
core模块包含一些通用的组件,它们能够被程序的其他模块使用。在我们的例子上,只包含一个类:MessageService类返回‘Hello World!’字符串。该模块只有一个依赖:它包含一个单元测试,使用Junit 4.11。
app模块包含HelloWorld类,是程序的开端,它从MessageService对象中获取信息,并将接收到的信息写入一个日志文件中。该模块拥有两个依赖:它需要core模块,还使用Log4j 1.2.17作为日志库。
(1)建立目录结构
建立core模块的根目录(core),并建立以下子目录:
- src/main/java目录包含core模块的源代码。
- src/test/java目录包含core模块的单元测试。
建立app模块的根目录(app),并建立以下子目录:
- src/main/java目录包含app模块的源代码。
- src/main/resources目录包含app模块的资源文件。
(2)多项目构建中的项目配置:
A、 在根目录下创建settings.gradle文件
确保app和core项目包含在多项目构建中
include 'app'
include 'core'
B、配置core
C、配置app
D、移除重复配置
共享配置:子项目之间必然会有相同的配置项,为了保持代码重用和整洁,gradle使用以下方式使不同的项目能够共享配置:.allprojects他是父项目的一个属性,用来配置所有项目包括父项目的共同配置。
给所有项目应用java插件。
allprojects {
//Add configuration here
}
Subprojects:用来配置所有子项目的共有配置,共同插件、repositories、依赖版本和配置
subprojects {
apply plugin: 'java'
repositories {
mavenCentral()
}
}
给所有子项目加上java插件,使用mavenCentral作为所有子项目的库,和对guava和junit的项目依赖。
扩展
Configure:只有部分子项目有共同配置
configure(subprojects.findAll {it.name.contains('war')}) {
apply plugin: 'war'
}
给有war关键字的所有子项目加上war插件。
独享配置:每个子项目的独有配置,在父项目的build.gradle文件通过project(‘:sub-project-name’)来设置对应子项目的配置,
project(‘:core’) {
ext{
hibernateVersion = ‘4.2.1.Final’
}
dependencies {
compile “org.hibernate:hibernate-core:${hibernateVersion}”
}
}
这是对于子项目相对较少的项目。
若一个项目较为复杂,子项目较多那么直接在每个子项目目录下为其建立一个build.gradle文件添加如下配置:
ext{
hibernateVersion = ‘4.2.1.Final’
}
dependencies {
compile “org.hibernate:hibernate-core:${hibernateVersion}”
}
- 创建web项目
使用java项目创建web项目,应用war插件
War插件在项目的目录布局下添加了一个新的目录,加入了两个新的依赖管理配置项,以及在项目中添加了一个新的任务。这些变化的详细描述如下:
War插件在项目的目录布局下添加了src/main/webapp目录,这个目录包含Web应用的源文件(CSS文件、Javascript文件、JSP文件等)。
War插件加入了两个新的依赖管理配置项providedCompile 和 providedRuntime.,这两个配置项与compile 和 runtime 配置项的作用域相同,但是区别是这两个配置项所属的依赖不会被添加到WAR文件中。
War插件也会在应用项目中添加war任务,这个任务会将WAR文件置于build/libs目录中。
运行web应用
我们可以使用Gretty在开发环境中运行Web应用。我们继续进行配置构建并使用Gretty运行Web应用。首先,必须配置构建脚本的依赖。可以通过以下步骤完成:
1. 使用Bintray的JCenter Maven仓库配置构建脚本,进行依赖解析。
2. 将Gretty插件的依赖加入到构建脚本的classpath中。
相关推荐
在本“spring+gradle学习案例”中,我们将深入探讨如何使用Spring框架、Spring MVC、Hibernate ORM以及Gradle构建一个完整的Web应用程序。这个项目旨在帮助开发者掌握这些技术的集成与应用,实现前后端数据交互,并...
《Gradle学习资料3》是针对Gradle这一高级构建工具的深入学习材料,适用于开发者、运维人员以及对自动化构建有兴趣的学习者。Gradle以其强大的灵活性、高性能和丰富的插件生态系统,已经成为Java和Android开发领域中...
"gradle学习资料2"这个压缩包可能包含一系列的学习资源,如文档、示例代码和教程,帮助用户深入理解Gradle的用法和特性。 1. **Gradle基本概念**: - **构建脚本**:Gradle使用Groovy或Kotlin DSL编写构建脚本,...
### IDEA中Gradle学习指南 #### 一、基本配置 **1.1 环境变量** Gradle的运行依赖于一系列的环境变量配置。最重要的环境变量为`GRADLE_USER_HOME`,它用于指定Gradle项目的缓存路径。通常情况下,这个路径会被...
Gradle 学习笔记简书1 本文档将对 Gradle 的基本命令、Groovy 语言基础和闭包委托进行详细的讲解。 Gradle 命令 ------------ ### 1. 生成 Wrapper 使用 `gradle wrapper` 命令可以生成 Wrapper。 ### 2. 打印...
**Gradle 学习笔记** Gradle 是一种高级的构建工具,它与 Maven 类似,主要负责管理和自动化软件项目的构建过程,包括管理依赖、编译、打包和部署等任务。然而,Gradle 提供了比 Maven 更高的灵活性,因为它的构建...
**Gradle 学习总结** Gradle 是一个现代的、灵活的构建自动化工具,它以其强大的依赖管理和插件系统在Java开发领域占据了重要的地位。在本文中,我们将深入探讨Gradle的基本概念、核心特性以及如何在实际项目中使用...
Gradle是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持maven, Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy....文档详细说明的gradle的使用规则以及语法,离线环境下可以学习此文档。
《Groovy学习与Gradle实践经典手册》是一本深度探讨Groovy编程语言和Gradle构建工具的指南,专为Android及Java开发人员提供全面的知识覆盖。本书旨在帮助开发者提升在项目管理和自动化构建方面的技能,使其能够高效...
根据提供的文件信息,我们可以深入探讨有关Gradle在Android开发中的应用与学习方法。Gradle作为Android Studio中的构建工具,对于Android开发者来说至关重要。下面将详细阐述Gradle的基础概念、核心功能以及如何通过...
SSM和Gradle是Java开发中...学习SSM和Gradle,不仅可以提升个人的Java Web开发能力,也有助于适应现代企业级开发的需求。通过实践项目和不断探索,可以深入理解这些工具的使用和最佳实践,从而提高开发效率和代码质量。
这两本书结合在一起,为读者提供了一个全面的Gradle学习路径。从基础知识到进阶技巧,读者可以逐步掌握Gradle在软件开发中的应用,提升构建自动化的能力。对于希望在现代软件开发环境中使用Gradle的开发者来说,这两...
Git 和 Gradle 入门学习笔记 Git 是一个分布式版本控制系统,Gradle 是一个基于 Apache Ant 和 Maven 的构建自动化工具。在本笔记中,我们将学习如何安装和使用 Git 和 Gradle。 Git 安装 要安装 Git,可以从 ...
该文件记录了我在 Gradle 讲解中的所有示例代码
在本文中,我们将深入探讨如何使用Gradle进行项目部署上传,这是现代软件开发流程中的重要环节。Gradle作为一款强大的构建工具,不仅适用于Java虚拟机(JVM)平台,还能处理多种语言和项目的构建需求。它以其灵活性...
《Gradle学习指南:从基础到实践》 Gradle是一款强大的构建自动化工具,尤其在Java、Android开发领域中被广泛使用。它以其灵活性、可扩展性和高性能著称,允许开发者自定义构建流程,同时支持多项目构建。本文将...
标题和描述中提到的文档是《Gradle用户指南》的中文版本。Gradle是一个开源的构建自动化工具,它基于Groovy语言,广泛用于Java项目,但...如果需要更深入的细节和实例,建议参考完整文档以获得全面的Gradle学习材料。
这个名为"gradleLearnDemo"的项目显然是一个用于学习Gradle的示例,通过实际操作来帮助开发者掌握Gradle的基本用法和高级特性。 Gradle基于Groovy语言构建,这使得它具有灵活性和可读性,允许开发者使用面向对象...