Gradle构建多模块项目(工程拆分与聚合)

  1. 首先创建一个Gradle项目的父工程项目
  2. android gradle多模块公用 gradle多模块构建_android gradle多模块公用

  3. 删除父工程的src目录

android gradle多模块公用 gradle多模块构建_android gradle多模块公用_02

  1. 根据指定的父工程 , 来创建一个子工程 , 右键父工程

android gradle多模块公用 gradle多模块构建_android gradle多模块公用_03

  1. 创建完子工程后 ,
  • 在父工程的setting.gradle文件中 , 就会自动生成如下配置
rootProject.name = 'Gradle_demo'
<!-- 表示该父工程中的所有的子工程的工程名称 -->
include 'gradle_dao'
include 'gradle_server'
  1. 工程创建成功 , 修改父工程的配置文件(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的依赖

  1. 父工程与子工程都创建好了 , 一个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服务的配置文件 , 就可以了

案例
  1. 我们在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";
    }
}
  1. 我们在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());
        
    }
}
  1. 执行项目 , 看看效果