利用Gradle构建Java多模块项目
Java新手,准备写个项目来巩固下知识点,在新建项目时不知道选择用什么作为构建工具,Maven肯定用过,只限于使用过,没有系统的去学习。之前做Android开发时用过Gradle来构建项目,也没深入研究过。后来在公司接触过用Gradle构建的java项目,才去深入了解过,描述的是Gradle是作为下一代构建工具,很灵活。我个人觉得这个灵活是体现在配置上,我看了很多使用Gradle构建多模块的项目的博客,配置都不相同。反正Gradle优点很多,想了解的自行百度,有很多Gradle方面的教程。
写这篇博客主要是为了记忆一下,加深印象,也为各位提供一种思路,有什么不对的地方勿喷,我害怕!
1、项目结构
简单说明一下项目结构,其中project-parent是根项目,project-core和project-app是子模块,project-app依赖project-core模块,其中IDEA我用的是ULTIMATE 2018.1版本,gradle使用的是gradle-4.4版本。
2、新建根项目project-parent
通过IDEA来新建项目,左边菜单栏选择Gradle工具,右边的Additional Libraries and Frameworks什么都不勾选,因为根项目我们只需要setting.gradle和build.gradle两个文件就行了。然后一直下一步,我就不在提供操作截图了,如果还不知道怎么新建一个Gradle项目,请百度一下,教程很多。
项目新建完成,其中能看到setting.gradle和build.gradle两个文件。
3、新建子項目project-core
选择根项目,然后右键,弹出操作菜单,然后执行new->Module操作,会弹出和新建根项目一样的操作弹窗。
然后按照新建项目,直接下一步,直到finish。我将贴出每一步的截图
然后点击Finish完成后,得到如下项目结构:
4、新建子項目project-app
新建流程和第三步操作一样,我不再贴出具体截图了,只贴出新建后的项目结构图:
5、修改根目录build.gradle配置:
setting.gradle就不说了,可以说是一个包含项目所有module的一个脚本配置,具体可以自行查阅。
主要说下build.gradle的配置,分三部分,分别是buildscript,allprojects,subprojects
buildscript {
ext {
springBootVersion = '2.0.0.RELEASE'
}
repositories {
mavenCentral()
jcenter()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
allprojects {
group 'com.gradle.project'
version '1.0-SNAPSHOT'
}
subprojects {
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: "io.spring.dependency-management"
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenLocal()
mavenCentral()
jcenter()
}
dependencies{
//这里如果配置了jar包依赖,所有子项目共享,使用了gradle的依赖传递特性。
testCompile group: 'junit', name: 'junit', version: '4.12'
}
}
6、project-core的build.gradle配置:
这里gradle.project什么都没有写,根项目的build.gradle脚本已经为所有模块提供了基本的配置,每个模块的build.gradle脚本可以根据不同业务提供不同的配置。
dependencies {
}
7、project-app模块build.gradle配置:
app模块使用SpringBoot框架快速发布一个测试用的应用,并且依赖于project-core模块,具体配置如下:
apply plugin: 'org.springframework.boot'
dependencies {
compile project(':project-core')
compile('org.springframework.boot:spring-boot-starter')
compile('org.springframework.boot:spring-boot-starter-actuator')
compile('org.springframework.boot:spring-boot-starter-web')
}
8、project-core模块发布类:
在此模块下新建一个类,供app模块调用:
9、发布project-app模块:
通过SpringBoot配置,写一个测试接口,使用project-core模块的代码提供响应消息,然后将此模块发布为一个应用,供外部访问:
然后启动这个应用,可以根据控制台日志查看启动状态,这里启动成功,并成功发布了request接口:
默认端口是8080,我们现在可以通过浏览器去访问一下request测试接口,成功返回数据: