Maven工程聚合,多个Java工程、web工程聚合

最近写个自己的小项目,牵扯到maven工程聚合问题,网上看了大量资料研究了下,成功了,按照自己的理解简单粗暴的记录下。。。

一、模块结构

粗略画了个草图表示下现有模块之间的关系(图片被缩太小右键另存查看)

这里写图片描述

二、模块作用及配置文件

  • tool

这里写图片描述

工具类模块,Maven创建的Java项目,提供一些工具类。

pom略,仅仅为工具类依赖的相关jar包配置

  • spring-springmvc-mybatis

这里写图片描述

用于管理SSM框架所需的jar包的Java项目。

pom略,仅仅为ssm框架相关所需jar包配置

  • shiro

这里写图片描述

用于管理shiro框架所需的jar包的Java项目

pom略,仅仅为shiro框架相关所需jar包配置

  • shiroproject-core

这里写图片描述

shiro权限模块的类模块,Maven创建的java项目,包含shiro权限模块所有的类文件,之所以拆出来是因为本模块的类需要在其他模块中复用。

pom关键配置

    <dependencies>
        <!-- 依赖的子模块 -->
        <dependency>
            <groupId>org.bc.frame</groupId>
            <artifactId>shiro</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.bc.frame</groupId>
            <artifactId>spring-springmvc-mybatis</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.bc.common</groupId>
            <artifactId>tool</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
  • shiroproject Maven Webapp

这里写图片描述

shiro权限模块的web资源模块,提供shiro权限模块的配置文件、资源、页面,依赖于shiroproject-core,与shiroproject-core一起为整个shiro权限模块,之所以拆开如上面所说,便于本模块类的复用。

pom关键配置

<dependencies>
        <!-- 依赖的子模块 -->
        <dependency>
            <groupId>org.bc.shiro</groupId>
            <artifactId>shiroproject-core</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>shiroproject</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <!-- 配置此项是防止缺失web.xml文件导致项目打包失败,因为此项目将被用于web整合, web整合时各个web模块的同名文件以上级项目优先级最高,也就是说本项目web.xml将被覆盖, 
                        因此本项目可以不具备web.xml文件,为了防止本项目不具备web.xml文件从而导致打包失败, 故配置此项。 -->
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
        <!-- 因为本项目的类文件被单独拆分为一个Java项目作为jar包被本项目引入,因此以下配置可省略。 -->
        <!-- <resources> <resource> 将src/main/java下资源文件打包, 主要是为了编译时将非resources目录下MyBatis的Mapper文件打包 
            <directory>src/main/java</directory> <includes> <include>**/*.properties</include> 
            <include>**/*.xml</include> </includes> 是否替换资源中的属性 <filtering>false</filtering> 
            </resource> <resource> 将src/main/resources下资源文件打包 <directory>src/main/resources</directory> 
            <includes> <include>**/*.properties</include> <include>**/*.xml</include> 
            </includes> <filtering>true</filtering> </resource> </resources> -->
    </build>
  • sss-sys-web Maven Webapp

这里写图片描述

项目模块,Maven创建的web模块,因为需要使用shiroproject-core中的类,因此依赖于shiroproject-core模块,此模块的类如果需要复用,也可以像shiro模块一样拆出一个Java模块。

pom关键配置

    <dependencies>
        <!-- 依赖的项目模块 -->
        <dependency>
            <groupId>org.bc.shiro</groupId>
            <artifactId>shiroproject-core</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <!-- 合并依赖war,因为需要整合shiroproject模块,所需必须配置此项 -->
        <dependency>
            <groupId>org.bc.shiro</groupId>
            <artifactId>shiroproject</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <type>war</type>
        </dependency>
    </dependencies>
    <build>
        <finalName>sss-sys-web</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
            <!-- 合并多个war,需要整合的web模块必须先配置依赖,见上面配置。 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <packagingExcludes>WEB-INF/web.xml</packagingExcludes>
                    <overlays>
                        <overlay>
                            <groupId>org.bc.shiro</groupId>
                            <artifactId>shiroproject</artifactId>
                        </overlay>
                    </overlays>
                </configuration>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <!--将src/main/java下资源文件打包 -->
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <!-- 是否替换资源中的属性 -->
                <filtering>false</filtering>
            </resource>
            <resource>
                <!--将src/main/resources下资源文件打包 -->
                <directory>src/main/resources</directory>
                <!-- <includes> <include>**/*.properties</include> <include>**/*.xml</include> 
                    </includes> <filtering>true</filtering> -->
            </resource>
        </resources>
    </build>

至此,如果我们打包sss-sys-web Maven Webapp这个项目,就会将shiroproject Maven Webapp这个web项目的文件合并进本项目,且本项目作为父项目对于同名文件拥有优先权。我们还可以单独创建一个只用于整合web项目的父项目,如下。

  • sss-web Maven Webapp

这里写图片描述

Maven创建的web项目,用于整合所有子web项目文件的整合项目,作为最顶层的整合项目,对于子项目同名文件有着最高优先权,因此一些公共的文件可以在此项目中进行配置。

pom关键配置(其实就是配置个插件,在上个项目中也配置了)

    <dependencies>
        <!-- 对于需要整合的web项目需要先配置war类型依赖 -->
        <dependency>
            <groupId>org.bc.shiro</groupId>
            <artifactId>shiroproject</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <type>war</type>
        </dependency>
        <dependency>
            <groupId>org.bc.sss</groupId>
            <artifactId>sss-sys-web</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <type>war</type>
        </dependency>
    </dependencies>
    <build>
        <finalName>sss-web</finalName>
        <plugins>
            <!-- 合并多个war,必须先配置要合并的war项目为依赖项目 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <packagingExcludes>WEB-INF/web.xml</packagingExcludes>
                    <overlays>
                        <overlay>
                            <groupId>org.bc.shiro</groupId>
                            <artifactId>shiroproject</artifactId>
                        </overlay>
                        <overlay>
                            <groupId>org.bc.sss</groupId>
                            <artifactId>sss-sys-web</artifactId>
                        </overlay>
                    </overlays>
                </configuration>
            </plugin>
        </plugins>
    </build>
  • sss-aggregator

这里写图片描述

聚合工程,本项目所有工程的父工程,可以仅为一个pom配置文件。为什么要创建一个聚合工程,因为在以上项目打包过程中,会发现,加入A项目依赖于B项目,那么首先我们要先将B项目install到maven仓库中,才可以对A项目进行打包后者install,否则会报错,提示在maven仓库中找不到B项目,如果按每次都按照依赖顺序一个个打包过于麻烦,因此可以配置一个聚合项目对依赖项目依次进行install,而且作为聚合工程,也就是所有模块的父工程,可以在此项目中进行一些公共jar包和插件的配置管理。

pom关键

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <groupId>org.bc.sss</groupId>
    <artifactId>sss-aggregator</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <!-- 按照模块依赖顺序进行配置 -->
    <modules>
        <module>../tool</module>
        <module>../spring-springmvc-mybatis</module>
        <module>../shiro</module>
        <module>../shiroproject-core</module>
        <module>../shiroproject Maven Webapp</module>
        <module>../sss-sys-web Maven Webapp</module>
        <module>../sss-web Maven Webapp</module>
    </modules>

    <name>sss-aggregator</name>
    <url>http://maven.apache.org</url>

关于在聚合工程内配置一些对依赖jar包及插件的公共管理,就不介绍了,个人感觉配置公共管理会降低各个子模块的独立性。

项目配置过程中问题

  • 项目报错

这里写图片描述

右键更新下项目,如果依赖的项目代码发生变动也要更新下。

  • 子模块pom配置parent如:
    <parent>
        <groupId>org.bc.sss</groupId>
        <artifactId>sss-aggregator</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../sss-aggregator</relativePath>
    </parent>

感觉这东西不配置也没什么问题啊,唯一的作用就是简化子模块的配置,或将各个子模块依赖的jar包插件版本管理权交给聚合工程,个人不喜欢配置,配置此项感觉会将子模块依赖于某个指定的聚合工程

执行整合

打开cmd进入聚合项目目录执行mvn install命令进行项目聚合,然后在maven仓库找到聚合后的项目,打开war包会发现依赖的java项目被打成jar包放在lib下,而多个web项目代码及资源被整合到一起。

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
资源简介:SSM Java 项目集合 一、概述 在这个平台上,我们为大家带来了一系列的 JavaSSM(Spring + SpringMVC + MyBatis)项目。这些项目旨在展示SSM框架在实际应用中的魅力,同时也为开发者提供了一个快速学习和实践的机会。通过下载和使用这些项目,您将能够深入了解SSM框架的核心概念、设计模式和最佳实践。 二、项目特点 实战性强:这些项目均来自实际业务场景多个领域,具有很强的实战性和参考价值。 技术先进:所有项目均采用最新的SSM框架版本,包括Spring 、SpringMVC 和MyBatis 等,确保技术的先进性和稳定性。 代码规范:项目代码严格按照行业标准和最佳实践进行编写,易于阅读和维护。 文档齐全:每个项目都配备了详细的开发文档和使用说明,方便您快速上手和定制开发。 三、适用人群 Java初学者:通过学习和实践这些项目,您将能够快速掌握SSM框架的基础知识和核心技术。 中高级开发者:这些项目将为您提供丰富的实战经验和灵感,帮助您提升技术水平和解决问题的能力。 项目经理和架构师:这些项目可以作为参考和模板,帮助您更好地规划和设计实际业务场景中的Java项目。 四、下载与使用 下载:所有项目均提供下载,您只需在平台上注册并登录即可获取。 安装与部署:每个项目都提供了详细的安装和部署指南,帮助您快速搭建和运行项目。 定制开发:您可以根据实际需求对项目进行定制开发,扩展功能和优化性能。 五、结语 通过这一系列SSM Java项目的下载和学习,您将能够深入了解SSM框架的核心技术,提升自己的编程能力,并在实际业务场景中灵活应用。我们期待您能够通过这些项目获得更多的成长和进步!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值