Gradle构建多模块项目(工程拆分与聚合)
- 首先创建一个Gradle项目的父工程项目
- 删除父工程的src目录
- 根据指定的父工程 , 来创建一个子工程 , 右键父工程
- 创建完子工程后 ,
- 在父工程的setting.gradle文件中 , 就会自动生成如下配置
rootProject.name = 'Gradle_demo'
<!-- 表示该父工程中的所有的子工程的工程名称 -->
include 'gradle_dao'
include 'gradle_server'
- 工程创建成功 , 修改父工程的配置文件(build.gradle) , 让子模块共享父模块的配置
// 配置所有项目公共的内容 (以下是我的配置 , 仅供参考)
// 注意 : 只有 allprojects 代码块包裹的配置信息 , 才是父子工程共享的配置信息
allprojects {
// 指定需要的插件
// 指定语言
apply plugin: 'java'
//指定编辑器
apply plugin: 'idea'
// 配置项目信息
group 'fit.hrkj'
version '1.0-SNAPSHOT'
// 配置仓库
repositories {
mavenLocal()
mavenCentral()
}
}
// 配置子工程
subprojects {
// 指定编译版本
sourceCompatibility = 1.8
targetCompatibility = 1.8
// 配置字符编码
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
// 配置全局依赖版本信息
ext {
junitVersion = '4.12'
}
//配置子模块依赖
dependencies {
testCompile group: 'junit', name: 'junit', version:"${junitVersion}"
}
}
如果配置了父模块与子模块 , 那么所有的子模块都可以共享一个父模块的配置 , 举个例子 , 如果在父模块里面加入了mysql的依赖 , 那么所有的子模块 , 不需要配置 , 也都默认加入的mysql的依赖
- 父工程与子工程都创建好了 , 一个dao工程 , 一个service工程 , 那么 , 如果我想在service工程里面使用dao工程里面的代码 , 该怎么使用呢 , 像这种跨模块之间的调用 , 该怎么办呢 , 如果是Spring Cloud 的话 , 我们想到的肯定是 OpenFeign 远程调用 , 但是在Gradle里面 , 不需要使用远程调用 , 就可以调用其他服务的代码 , 就像调用自己的服务代码一样那么随便 。
同模块之间调用教程
- 编辑gradle_service工程的
build.gradle
配置文件
// 因为父工程都配置过了这些信息 ,
// 所以子工程 , 没必要再重新配置一遍 , 所以我的都删除掉了 ,
// 只留下了项目的打包方式
plugins {
id 'war'
}
dependencies {
// 添加子模块 , 通过这样的方式 ,我们在service模块里面 , 就可以调用dao模块里面的方法了
compile project(":gradle_dao")
... //以下可以配置很多服务
}
加入了这行配置后 , gradle_service
服务调用 gradle_dao
服务的方法 , , 就可以随意调了 , 就像调用自己服务的一样 , 同理 , gradle_dao
服务调用 gradle_service
服务的方法 , 我们只需要修改gradle_dao
服务的配置文件 , 就可以了
案例
- 我们在gradle_dao模块中 , 创建一个dao层的接口 , 以及对应的实现类
package fit.hrkj.dao;
/**
* @date 2021-05-11 10:27
*/
public interface TestDao {
String getTestDao();
}
package fit.hrkj.dao.Impl;
import fit.hrkj.dao.TestDao;
/**
* @date 2021-05-11 10:28
*/
public class TestDaoImpl implements TestDao {
@Override
public String getTestDao() {
return "Hello Gradle";
}
}
- 我们在
gradle_service
服务里面来使用这个方法
package fit.hrkj.service;
<!-- 导入gradle_dao层里面的类 , -->
import fit.hrkj.dao.Impl.TestDaoImpl;
import fit.hrkj.dao.TestDao;
/**
* gradle_service模块
* @date 2021-05-11 10:27
*/
public class TestService {
public static void main(String[] args) {
TestDao testDao=new TestDaoImpl();
System.out.println(testDao.getTestDao());
}
}
- 执行项目 , 看看效果