关于项目模块化:java
在企业项目中,包层次和类关系比较复杂,把代码拆分红模块一般是最佳实践,这须要你清晰的划分功能的边界,好比把业务逻辑层和数据持久化层拆分开来。项目符合高内聚低耦合时,模块化就变得很容易,这是一条很是好的软件开发实践app
一般在使用Maven构建项目的时候,咱们会将一个项目划分为多个模块,而后经过父工程去管理子模块。而 Gradle 也拥有相似的功能,咱们将其称之为多项目构建(multi-project build)。因此本小节咱们来看看,如何使用 Gradle 进行多项目构建,首先建立一个Gradle工程,过程以下:maven
自定义GroupId和ArtifactId:ide
选择本地的Gradle:模块化
项目建立完成后,目录结构以下:gradle
build.gradle构建脚本的内容以下:ui
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文件的内容以下:url
rootProject.name = 'gradle-model'
而后在gradle-model基础上建立多个模块,和建立gradle项目是同样的,这里以 dao 、pojo 和 service 模块为例。建立好后工程目录结构以下:插件
注:父工程的src目录能够删除掉3d
从上图中能够看到子模块中是没有setting.gradle文件的,而此时父工程的setting.gradle文件的内容以下:
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仓库中,这也是比较常见的需求。由于有些项目须要依赖别的项目,又没有搭建私服的状况下,就只能发布到本地仓库,而后在别的项目去依赖本地仓库中的jar包。Gradle发布项目到本地及远程Maven仓库的流程:
修改build.gradle构建脚本的内容以下,引用maven的发布插件:
// 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包:
若是须要发布到私服上的话,能够配置私服地址,以下示例:
publishing { publications { myPublish(MavenPublication){ from components.java } } repositories { maven { url 'http://example.com' } } }
而后点击publishing选项下的publish就能够进行发布了,但因为我这里没有现成的私服,就不对此作演示了