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

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

一、模块结构

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

Maven工程聚合,多个Java工程、web工程聚合_第1张图片

二、模块作用及配置文件

  • tool

Maven工程聚合,多个Java工程、web工程聚合_第2张图片

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

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

  • spring-springmvc-mybatis

Maven工程聚合,多个Java工程、web工程聚合_第3张图片

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

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

  • shiro

Maven工程聚合,多个Java工程、web工程聚合_第4张图片

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

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

  • shiroproject-core

Maven工程聚合,多个Java工程、web工程聚合_第5张图片

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

pom关键配置

    <dependencies>
        
        <dependency>
            <groupId>org.bc.framegroupId>
            <artifactId>shiroartifactId>
            <version>0.0.1-SNAPSHOTversion>
        dependency>
        <dependency>
            <groupId>org.bc.framegroupId>
            <artifactId>spring-springmvc-mybatisartifactId>
            <version>0.0.1-SNAPSHOTversion>
        dependency>
        <dependency>
            <groupId>org.bc.commongroupId>
            <artifactId>toolartifactId>
            <version>0.0.1-SNAPSHOTversion>
        dependency>
    dependencies>
  • shiroproject Maven Webapp

Maven工程聚合,多个Java工程、web工程聚合_第6张图片

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

pom关键配置

<dependencies>
        
        <dependency>
            <groupId>org.bc.shirogroupId>
            <artifactId>shiroproject-coreartifactId>
            <version>0.0.1-SNAPSHOTversion>
        dependency>
    dependencies>

    <build>
        <finalName>shiroprojectfinalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-war-pluginartifactId>
                <configuration>
                    
                    <failOnMissingWebXml>falsefailOnMissingWebXml>
                configuration>
            plugin>
        plugins>
        
        
    build>
  • sss-sys-web Maven Webapp

Maven工程聚合,多个Java工程、web工程聚合_第7张图片

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

pom关键配置

    <dependencies>
        
        <dependency>
            <groupId>org.bc.shirogroupId>
            <artifactId>shiroproject-coreartifactId>
            <version>0.0.1-SNAPSHOTversion>
        dependency>
        
        <dependency>
            <groupId>org.bc.shirogroupId>
            <artifactId>shiroprojectartifactId>
            <version>0.0.1-SNAPSHOTversion>
            <type>wartype>
        dependency>
    dependencies>
    <build>
        <finalName>sss-sys-webfinalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-war-pluginartifactId>
                <configuration>
                    <failOnMissingWebXml>falsefailOnMissingWebXml>
                configuration>
            plugin>
            
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-war-pluginartifactId>
                <configuration>
                    <packagingExcludes>WEB-INF/web.xmlpackagingExcludes>
                    <overlays>
                        <overlay>
                            <groupId>org.bc.shirogroupId>
                            <artifactId>shiroprojectartifactId>
                        overlay>
                    overlays>
                configuration>
            plugin>
        plugins>
        <resources>
            <resource>
                
                <directory>src/main/javadirectory>
                <includes>
                    <include>**/*.propertiesinclude>
                    <include>**/*.xmlinclude>
                includes>
                
                <filtering>falsefiltering>
            resource>
            <resource>
                
                <directory>src/main/resourcesdirectory>
                
            resource>
        resources>
    build>

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

  • sss-web Maven Webapp

Maven工程聚合,多个Java工程、web工程聚合_第8张图片

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

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

    <dependencies>
        
        <dependency>
            <groupId>org.bc.shirogroupId>
            <artifactId>shiroprojectartifactId>
            <version>0.0.1-SNAPSHOTversion>
            <type>wartype>
        dependency>
        <dependency>
            <groupId>org.bc.sssgroupId>
            <artifactId>sss-sys-webartifactId>
            <version>0.0.1-SNAPSHOTversion>
            <type>wartype>
        dependency>
    dependencies>
    <build>
        <finalName>sss-webfinalName>
        <plugins>
            
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-war-pluginartifactId>
                <configuration>
                    <packagingExcludes>WEB-INF/web.xmlpackagingExcludes>
                    <overlays>
                        <overlay>
                            <groupId>org.bc.shirogroupId>
                            <artifactId>shiroprojectartifactId>
                        overlay>
                        <overlay>
                            <groupId>org.bc.sssgroupId>
                            <artifactId>sss-sys-webartifactId>
                        overlay>
                    overlays>
                configuration>
            plugin>
        plugins>
    build>
  • sss-aggregator

Maven工程聚合,多个Java工程、web工程聚合_第9张图片

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

pom关键

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

    <groupId>org.bc.sssgroupId>
    <artifactId>sss-aggregatorartifactId>
    <version>0.0.1-SNAPSHOTversion>
    <packaging>pompackaging>

    
    <modules>
        <module>../toolmodule>
        <module>../spring-springmvc-mybatismodule>
        <module>../shiromodule>
        <module>../shiroproject-coremodule>
        <module>../shiroproject Maven Webappmodule>
        <module>../sss-sys-web Maven Webappmodule>
        <module>../sss-web Maven Webappmodule>
    modules>

    <name>sss-aggregatorname>
    <url>http://maven.apache.orgurl>

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

项目配置过程中问题

  • 项目报错

Maven工程聚合,多个Java工程、web工程聚合_第10张图片

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

  • 子模块pom配置parent如:
    <parent>
        <groupId>org.bc.sssgroupId>
        <artifactId>sss-aggregatorartifactId>
        <version>0.0.1-SNAPSHOTversion>
        <relativePath>../sss-aggregatorrelativePath>
    parent>

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

执行整合

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

你可能感兴趣的:(Maven)