java组件化_Java 组件化(gradle)

本文介绍了Java组件化的概念,并通过实例展示了非组件化项目存在的问题,如依赖管理困难、打包繁琐、开发成本高。文章详细阐述了组件化的解决办法,包括创建模块、设置Gradle配置以及分离依赖管理。通过组件化,可以实现单独打包、优化依赖管理和降低开发成本,提高项目维护效率。
摘要由CSDN通过智能技术生成

68f724bad5a33d9a9f6bd2ca7369ecb7.png组件化

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

598d2f930a90c423fd3ab47de400715c.png

ae1ea6e90da1f93e428638c2ff2a369b.png

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

非组件化的问题

如果项目本身有多个互相不影响的模块,甚至有多人分开负责各个模块的开发时,非组件化项目的弊端就会暴露出来,主要是有下面几个:

1、依赖难以管理,不同的模块依赖不同的库,甚至是同一个库的不同版本。

2、各个模块单独打包麻烦。

3、增加额外开发成本,开发本身可能只需要开发一个模块,但是由于代码写在一起,所以不得不去了解整个项目。

4、如果一个项目有几十甚至几百个模块,模块化能极大减少编译时间。

例子

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

f78a6cd3b9aca0c9d221fabcb6cf518c.png

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

import implement.Consumer;public classMain {public static voidmain(String[] args){newConsumer().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也会自动帮忙创建好。

创建后如下图:

428871c1be8a907aa244503e425d8d19.png

如果不是使用IDEA,直接在主项目目录下创建BaseProject文件就可以,然后再去创建src等文件。

module都创建完毕后将代码都放到各个module中,效果大致如下:

513e5e04fc853d89a655c63676ca06ce.png

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的,效果大致如下:

e35dfaaea6118352093947bebd10e24a.png

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

28347e8b6285c1138f65233e92050748.png

如果本身在主项目中,module就有一些依赖,可以将这些依赖分开到各个module中。

就拿例子中的项目来说,共用的一些依赖可以放到BaseProject这个module中,私有的一些依赖就分别放到Consumer和Producer这两个module中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值