那个时候初入java这个大家庭,学习的方向很乱。毕业后,在公司磨练了一年,总想着是该交一份答卷了,可能成绩不会很好,但求及格!那么考试题目呢,我计划搭建一个横向可扩展的项目,可以在平台自扩展各种子项目,包括 后台权限控制,日志分析,秒杀,微信小程序,爱代客(www.idaike.com)项目等等,所以首先需要一个高可扩展的管理系统!

一:说说我们最早搭建的项目

可能是一个ssm、也可能是一个springboot或者其他,这个是框架本身的问题,这是一个小问题,但是你的业务代码是如何的?

这应该是一个最简单的项目结构,也是我刚刚接触java的时候,最常见的项目,但是等你的业务量越来越大的时候,你发现代码也越来越臃肿,甚至在三天后,你都不知道这段代码你有什么用!也知道无法管理。在到后来,你开始去建立子项目,去隔离不同的业务!去在项目下面建立子项目

二:建立各种子项目

这种系统框架基本能够满足项目的需求,工具包、公用包、接口和后台互补干扰,但是这种框架最坑爹的问题就是你无法剥离或者很难剥离已经停用的业务,到最后一个非常可怕的问题是 你的系统可能有10w行代码,实际上只有不到1w行代码有效!那么我们该如何做呢?

三:纵向扩展的项目模块

如图所示,在model-pojo中加入mybatis-plus的jar包和spring-web的jar包,spring-web为上层model提供@controller和@service注解!这样在每个自模块中都有属于自己的controller和service,然后在model-web中扫码这些模块,并打包发布!如图所示,如果我不在需要model-log,那我在model-web.xml中不在依赖这个jar包即可,这样我就可以直接移除掉model-log这个文件下掉所有内容了,当然模块与模块之间也可以相互依赖,提供了一个扩展性和延展性都非常好的后台开发项目,至于interface项目,也可以通过这种方法来完成,只不过interface面临的流量要比后台大的多.所以这种系统架构后面在介绍

四:具体的搭建方式

具体的pom依赖结构图为:

父maven中的pom.xml 主要是用来做版本控制,例如springboot的版本控制,mysql,mybatis的版本控制等,此次项目用的是springboot + mybatia-plus + jedis

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.rubber.fruit</groupId>
<artifactId>rubber-fruit</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>rubber-util</module>
<module>rubber-pojo</module>
<module>rubber-sys</module>
<module>rubber-web</module>
<module>rubber-log</module> </modules> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <properties>
<rubber.version>1.0-SNAPSHOT</rubber.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<springboot.version>2.0.3.RELEASE</springboot.version>
<spring.version>5.0.7.RELEASE</spring.version> <mybatis-plus.version>3.0-RELEASE</mybatis-plus.version>
<mysql-connector.version>5.1.45</mysql-connector.version>
</properties> <build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/**</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build> </project>

我们在来看,model-pojo中的pom.xml

 <parent>
<artifactId>rubber-fruit</artifactId>
<groupId>com.rubber.fruit</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion> <groupId>com.rubber.fruit</groupId>
<artifactId>rubber-pojo</artifactId> <dependencies> <dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector.version}</version>
</dependency>
<!--目的为了依赖这个包的 可以用 @controller的注解-->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>com.rubber.fruit</groupId>
<artifactId>rubber-util</artifactId>
<version>${rubber.version}</version>
</dependency>
</dependencies>

请问中间可横向扩展层 model - sys的pom.xml 备注如下:

<parent>
<artifactId>rubber-fruit</artifactId>
<groupId>com.rubber.fruit</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion> <groupId>com.rubber.fruit</groupId>
<artifactId>rubber-sys</artifactId> <dependencies>
<dependency>
<groupId>com.rubber.fruit</groupId>
<artifactId>rubber-pojo</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>

model-log中的pom.xml 配置如下

<parent>
<artifactId>rubber-fruit</artifactId>
<groupId>com.rubber.fruit</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion> <groupId>com.rubber.fruit</groupId>
<artifactId>rubber-log</artifactId> <dependencies>
<dependency>
<groupId>com.rubber.fruit</groupId>
<artifactId>rubber-pojo</artifactId>
<version>${rubber.version}</version>
</dependency>
</dependencies>

上面父pom控制版本,下面model-pojo 提供基础数据,然后在web.pom中 引入,就可以来使用了

<groupId>com.rubber.fruit.web</groupId>
<artifactId>rubber-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>rubber-web</name>
<description>Demo project for Spring Boot</description> <parent>
<artifactId>rubber-fruit</artifactId>
<groupId>com.rubber.fruit</groupId>
<version>1.0-SNAPSHOT</version>
</parent> <dependencies>
<!-- SpringBoot 的jar包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> <!--项目本身的jar包-->
<dependency>
<groupId>com.rubber.fruit</groupId>
<artifactId>rubber-sys</artifactId>
<version>${rubber.version}</version>
</dependency> <dependency>
<groupId>com.rubber.fruit</groupId>
<artifactId>rubber-log</artifactId>
<version>${rubber.version}</version>
</dependency> </dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

五:遇到的问题

当我想通过model-web子项目打包生成jar包的时候,总是出现我的某一个子项目,无法被依赖的问题,并提示

*******.jar   was cached in the local repository, resolution will not be reattempted until the update interval of 的错误,后面通过查阅资料,例如博客:https://blog.csdn.net/HeatDeath/article/details/79702803,网上大部分都是这种提示,但是我照做了,并没有解决问题!

后来我仔细考虑后,发现提示是该jar包从网络上下载一般,没有下载!但是我这个jar包应该是我本地的,而且,这个错误的原因也是因为maven在本地只找到啦一个不完整的jar,然后就去远程仓库中下载,这样远程仓库是肯定没有的!那么这就说明我本地压根就没有打包成功!

经过多次尝试和打磨我发现,我准备打包的子项目(model-web) 和 里面依赖的(model-sys或者model-log)都是属于(rubber-fruit)的子项目,你只打包model-web,那它依赖的其他jar肯定是找不到的,本地找不到就会去远程仓库找,那更找不到,所以就报错了。解决版本是 就是直接 package跟项目,也就是这里的rubber-fruit!这样这个问题就解决了!!

构建一个maven聚合类型的横向可扩展项目的更多相关文章

  1. jenkins构建一个maven项目[五]

    标签(linux): jenkins 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 构建一个maven项目,即为构建java项目.模拟实验之前先把实验代码推送到 ...

  2. jenkins 构建一个maven项目

    1.首先在 全局工具配置 里配置maven的路径信息 这里因为之前已经下载了maven并放在了E盘,因此只需要在 MAVEN_HOME 添加maven文件夹的路径 如若本地还没maven,勾选 “自动 ...

  3. 【Jenkins】构建一个maven项目

    一 .Ubuntu18.04安装Maven 官方安装文档:http://maven.apache.org/install.html ①去官网下载maven: ②解压到/opt/maven目录(我安装在 ...

  4. 使用jenkins构建一个maven项目

    1.登陆到jenkins首页,创建项目-->选择maven-->输入项目名称-->选择项目类型 2.进入项目配置:{先写一下项目描述和设置下保留的历史构建,然后向下拉} 找到源吗管理 ...

  5. 构建Maven聚合工程

    最近,准备构建一个Maven的项目,基于模块化的结构思想,决定使用Maven的聚合工程进行构建. 环境准备: (1)eclipse 这里推荐使用spring封装的eclipse(即STS) ,STS中 ...

  6. 学习一下 SpringCloud (一)-- 从单体架构到微服务架构、代码拆分(maven 聚合)

    一.架构演变 1.系统架构.集群.分布式系统 简单理解 (1)什么是系统架构? [什么是系统架构?] 系统架构 描述了 在应用程序内部,如何根据 业务.技术.灵活性.可扩展性.可维护性 等因素,将系统 ...

  7. Eclipse的maven构建一个web项目,以构建SpringMVC项目为例

    http://www.cnblogs.com/javaTest/archive/2012/04/28/2589574.html springmvc demo实例教程源代码下载:http://zuida ...

  8. Maven- 使用Maven构建一个可执行jar

    How to Create an Executable JAR with Maven 1.最重要的是使用jar类型,<packaging>jar</packaging>.当然不 ...

  9. MAVEN学习-第一个Maven项目的构建

    MAVEN安装成功之后就可以进行项目的构建和管理了: 为什么要用maven进行项目的构建和管理? 对于初学者来说一个最直接的也是最容易里的优点在于JAR包的管理,相对于以前开发一个项目的时候我们需要用 ...

随机推荐

  1. Redis 过期键删除策略

    Redis 中数据库键的过期时间都保存在过期字典中,当一个键过期了,Redis 存在三种不同的删除策略:定时删除.惰性删除和定期删除 定时删除 定义 在设置键的过期时间的同时创建一个计时器,让定时器在 ...

  2. Golang学习笔记(一)

    这个系列学习文章是对ASTAXIE大神的GoWeb编程的读书笔记. 1. 关于GOPATH $GOPATH 是系统中重要的环境变量,他不是Go的安装目录. 假如我们将GOPATH设置在这里: /hom ...

  3. Testlink插件工具

    目的: 使用Testlink时间长了,会发现有些功能体验不是很好,比如用例编写就无法快速复制,且展示能力很弱 使用对象: 测试人员.测试leader,技术经理 xmind2testlink:xmind ...

  4. 工具资源系列之给虚拟机装个centos

    前文我们已经讲解了如何在 mac 系统上安装虚拟机软件,这节我们接着讲解如何利用虚拟机安装 centos 镜像. 安装镜像的大致步骤基本相同,只不过是配置项略显不同而已,如果需要安装其他系统镜像,请参 ...

  5. Postgres中文分词

    环境 CentOS Linux release 7.2.1511 (Core) 安装Postgres 安装postgres很简单 yum安装 sudo yum install postgresql-s ...

  6. modbus串口通讯C#

    简介 公司给的一个小任务,这篇文章进行详细讲解 题目: modbus串口通讯 主要内容如下: 1.实现使用modbus通讯规约的测试软件: 2.具有通信超时功能: 3.分主站从站,并能编辑报文.生成报 ...

  7. RocketMQ4.3.x对顺序消息的理解

    1.RocketMQ消息队列简单介绍 这里简单介绍一下RocketMQ的消息队列的模型 一个topic对应多个队列如下图: 生产者和消费者分别向队列中发送和消费消息,生产者和消费者都可以是多个,通过组 ...

  8. # 20175329 2018-2019-3 《Java程序设计》第九周学习总结

    20175329 2018-2019-3 <Java程序设计>第九周学习总结

  9. selenium跳过webdriver检测并爬取淘宝我已购买的宝贝数据

    简介 上一个博文已经讲述了如何使用selenium跳过webdriver检测并爬取天猫商品数据,所以在此不再详细讲,有需要思路的可以查看另外一篇博文. 源代码 # -*- coding: utf-8 ...

  10. completable 用法

    CompletableFuture 前面我们使用过jdk5 提出future的用法,但是在获取结果上并不是那么友好 在Java8中,CompletableFuture提供了非常强大的Future的扩展 ...