Gradle多项目构建
关于项目模块化:
在企业项目中,包层次和类关系比较复杂,把代码拆分成模块通常是最佳实践,这需要你清晰的划分功能的边界,比如把业务逻辑层和数据持久化层拆分开来。项目符合高内聚低耦合时,模块化就变得很容易,这是一条非常好的软件开发实践
通常在使用Maven构建项目的时候,我们会将一个项目划分为多个模块,然后通过父工程去管理子模块。而 Gradle 也拥有类似的功能,我们将其称之为多项目构建(multi-project build)。所以本小节我们来看看,如何使用 Gradle 进行多项目构建,首先创建一个Gradle工程,过程如下:
自定义GroupId和ArtifactId:
选择本地的Gradle:
项目创建完成后,目录结构如下:
build.gradle构建脚本的内容如下:
代码语言:javascript复制plugins {
id 'java'
}
group 'org.zero.example'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
setting.gradle文件的内容如下:
代码语言:javascript复制rootProject.name = 'gradle-model'
然后在gradle-model基础上创建多个模块,和创建gradle项目是一样的,这里以 dao 、pojo 和 service 模块为例。创建好后工程目录结构如下:
注:父工程的src目录可以删除掉
从上图中可以看到子模块中是没有setting.gradle文件的,而此时父工程的setting.gradle文件的内容如下:
代码语言:javascript复制rootProject.name = 'gradle-model'
include 'dao'
include 'service'
include 'pojo'
不难看出,gradle的setting.gradle文件导入了子模块,所以它用来管理父工程包含哪些子模块
此时,我们会发现父工程与子模块的build.gradle构建脚本的内容都是一样的,如下:
subprojects 方法可以设定所有子模块共享的配置,例如:所有模块都引入 java 插件、 repositories中配置的仓库以及依赖包和版本等。这样我们就可以将一些配置复用起来,那么就不需要每个子模块的build.gradle里都写一样的配置了。如下:
pojo模块因为不需要依赖外部的jar包,所以复用父工程的配置后可以留空,而dao依赖于pojo,所以需要单独配置一下依赖,service也是同理。gradle子模块引用另一个子模块时,需要使用project方法,与引用外部依赖是不同的。
将项目发布到本地Maven仓库
在上一小节中,我们完成了最简单的多项目构建,本小节则介绍一下如何将项目发布到本地的Maven仓库中,这也是比较常见的需求。因为有些项目需要依赖别的项目,又没有搭建私服的情况下,就只能发布到本地仓库,然后在别的项目去依赖本地仓库中的jar包。Gradle发布项目到本地及远程Maven仓库的流程:
修改build.gradle构建脚本的内容如下,引用maven的发布插件:
代码语言:javascript复制// allprojects用于定义所有项目的配置
allprojects {
apply plugin: 'maven-publish'
apply plugin: 'java'
sourceCompatibility = 1.8
group 'org.zero.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
publishing {
publications {
myPublish(MavenPublication){
from components.java
}
}
}
}
在构建脚本里引用了maven的发布插件后,此时gradle的控制台就会出现publishing选项,点击下图中的publishToMavenLocal即可发布到本地maven仓库中:
发布成功后,可以在本地仓库中查找到相应的目录:
以及jar包:
如果需要发布到私服上的话,可以配置私服地址,如下示例:
代码语言:javascript复制publishing {
publications {
myPublish(MavenPublication){
from components.java
}
}
repositories {
maven {
url 'http://example.com'
}
}
}
然后点击publishing选项下的publish就可以进行发布了,但由于我这里没有现成的私服,就不对此做演示了