构建一个maven聚合类型的横向可扩展项目

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

一:说说咱们最先搭建的项目mysql

多是一个ssm、也多是一个springboot或者其余,这个是框架自己的问题,这是一个小问题,可是你的业务代码是如何的?web

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

二:创建各类子项目sql

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

三:纵向扩展的项目模块小程序

如图所示,在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面临的流量要比后台大的多.因此这种系统架构后面在介绍微信小程序

四:具体的搭建方式springboot

具体的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!这样这个问题就解决了!!

相关文章
相关标签/搜索