您现在的位置是:首页 > 正文

Java 组件化(gradle)

2024-02-29 17:26:36阅读 5

组件化
什么是组件化,直接看下面两张图。

 

 


上面是非组件化的项目,下面是组件化的项目。

非组件化的问题
如果项目本身有多个互相不影响的模块,甚至有多人分开负责各个模块的开发时,非组件化项目的弊端就会暴露出来,主要是有下面几个:
1、依赖难以管理,不同的模块依赖不同的库,甚至是同一个库的不同版本。
2、各个模块单独打包麻烦。
3、增加额外开发成本,开发本身可能只需要开发一个模块,但是由于代码写在一起,所以不得不去了解整个项目。
4、如果一个项目有几十甚至几百个模块,模块化能极大减少编译时间。

例子
光讲理论还是让人难以理解,那么用个简单的例子来具体讲一下。

 

上图是非模块化的一个项目,其中包括base包中的一些基类,然后有Consumer和Producer两个应用类,Main类如下:

import implement.Consumer;

public class Main {
    public static void main(String[] args){
        new Consumer().start();
//        new Producer().start();
    }
}

场景是这样:我们有两个服务器,一个是消费者服务器,一个是生产者服务器,他们有相同的基类,但是提供服务器的逻辑是不同的,所以不同服务器上的jar需要分别打包。

如果是非模块化项目,我们就只能像上面的代码一样做,在打包Consumer的jar的时候将Producer代码注释掉,而在打包Producer的jar的时候将Consumer代码注释掉。
但是,实际开发中,代码并不是这么简单的,Consumer和Producer本身的逻辑可能就会比较复杂,这就会带来每次打包就会带来额外工作量的问题,久而久之,项目越来越大,只有对整个项目都了解了才会知道如何打包。
甚至,之后如果是多人负责这个项目,由于Consumer和Producer的代码都写在一个Project内,Consumer的程序员改动某一个依赖,很可能会给Producer的代码带去风险。
在这个例子中,如果使用组件化,就可以解决一下几个问题:
1、单独打包问题
2、依赖管理问题
3、开发只需要专注自己的模块,降低开发成本

如何组件化
主要步骤如下:
1、创建module,将代码放到各个module中
2、setting.gradle 添加module
3、依赖分开管理

创建module
如果和笔者一样使用的是IDEA的话,直接File->New->Module就可以创建。使用IDEA创建,src、build.gradle等文件,IDEA也会自动帮忙创建好。
创建后如下图:

如果不是使用IDEA,直接在主项目目录下创建BaseProject文件就可以,然后再去创建src等文件。
module都创建完毕后将代码都放到各个module中,效果大致如下:

setting.gradle 添加module
只有在setting.gradle 中添加了module,gradle构建项目的时候才能识别这几个文件夹是module。
如果是使用IDEA创建的,IDEA会自动在setting.gradle 添加module,如果是自己手动创建的项目,则也需要手动添加,该文件内容如下:

rootProject.name = 'TestProject'
include 'BaseProject'
include 'Consumer'
include 'Producer'

依赖分开管理

创建完module,将原来的类直接移动到module中,我们可以发现是会有error的,效果大致如下:

可以看到是因为找不到Base类,因此我们要在Consumer和Producer的module中添加BaseProject这个module的依赖,如下图,可以看到error已经消失。

如果本身在主项目中,module就有一些依赖,可以将这些依赖分开到各个module中。
就拿例子中的项目来说,共用的一些依赖可以放到BaseProject这个module中,私有的一些依赖就分别放到Consumer和Producer这两个module中。

转载于:https://www.cnblogs.com/Im-Victor/p/10901528.html

网站文章

  • Python ORM Pony 事务和db_session

    Pony是一个高级的对象关系映射器ORM框架。Pony它能够使用Python生成器表达式和lambdas向数据库编写查询。Pony分析表达式的抽象语法树,并将其转换为SQL查询。支持SQLite, MySQL, PostgreSQL和Oracle等数据库,本文主要介绍Python pony 中事务和db_session。原文地址:Python ORM Pony 事务和db_session

    2024-02-29 17:26:28
  • Bootstrap第二式

    根据Bootstrap第一节我们了解到了一些关于Bootstrap的基本知识,什么是Bootstrap,为什么用,用在哪里,怎么用。在Bootstrap第二式我们近一半了解一些关于Bootstrap的...

    2024-02-29 17:26:22
  • LeetCode90:Subsets II

    LeetCode90:Subsets II

    Given a collection of integers that might contain duplicates, nums, return all possible subsets.Note: Elements in a subset must be in non-descending order. The solution set must not contain duplicate

    2024-02-29 17:25:54
  • Docker安装mysql无法远程客户端访问

    Docker安装mysql无法远程客户端访问

    可以看到箭头部分,该库的root用户只允许当前主机连接,所以要登录到数据库中,修改root的连接方式为‘%’解决办法:1进入到mysql容器内部docker exec -it mysql_slave3...

    2024-02-29 17:25:14
  • C#基础知识(以宝马,车,车轮为例)

    C#基础知识(以宝马,车,车轮为例)

    派生类using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using ClassLibrary1.util;using ClassLibrary1.util.util2;namespace ClassLibrary1...

    2024-02-29 17:25:05
  • Java7的异常处理新特性-addSuppressed()方法等

    Java7的异常处理新特性-addSuppressed()方法等

    2024-02-29 17:24:57
  • linux显卡被占用但是找不到对应pid问题

    linux显卡被占用但是找不到对应pid问题

    目录问题解决参考完 问题 在运行任务时,报错显卡memory不够,但是用nvidia-smi发现该卡并没有对应的pid,但是memory却使用了很多 猜想应该是上个任务没被完全杀死,因为几分钟前自己把...

    2024-02-29 17:24:48
  • 计算机毕业设计:基于微信小程序的企业工作日报系统(教程+代码框架)

    计算机毕业设计:基于微信小程序的企业工作日报系统(教程+代码框架)

    基于微信小程序的企业工作日报系统是一个有潜力的项目,可以提高企业内部的工作效率和信息管理。通过上述功能模块、技术架构和用户界面设计,可以实现一个全面的平台。这个项目可以不断改进和扩展,以满足不断增长的企业需求,帮助更多企业实现高效的内部管理。

    2024-02-29 17:24:21
  • 你的前半生,可曾有过下定决心做某件事的时候?

    作者:陆小凤首发:微信公众号【程序员江湖】不知道你们有没有看过电视剧《我的前半生》里面的女主在遭遇家庭变故之后终于颠覆了自己,最终成为了独立的女性。平淡的生活看似波澜不惊,实际上也在消磨着你的时间,磨...

    2024-02-29 17:24:08
  • Codeforces Round #609 (Div. 2) E. K Integers

    题目连接数字相邻只需求出逆序对就好,但是 不相邻,那么我们可以将所有的数字移到中间位置(贪心可证明),然后求出每个数字移到中间的代价之和即可,逆序对可以边算边求,每次求出这个数字之前比它小的数字的个数,那么 用这个数字减去个数在减一就是后面的比它小的数字的个数,也就是逆序对要增大的值。#include <bits/stdc++.h>using namespace std; #d...

    2024-02-29 17:23:38