Maven工程聚合,多个Java工程、web工程聚合
2016-07-17 23:08
309 查看
最近写个自己的小项目,牵扯到maven工程聚合问题,网上看了大量资料研究了下,成功了,按照自己的理解简单粗暴的记录下。。。
工具类模块,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关键配置
shiroproject Maven Webapp
shiro权限模块的web资源模块,提供shiro权限模块的配置文件、资源、页面,依赖于shiroproject-core,与shiroproject-core一起为整个shiro权限模块,之所以拆开如上面所说,便于本模块类的复用。
pom关键配置
sss-sys-web Maven Webapp
项目模块,Maven创建的web模块,因为需要使用shiroproject-core中的类,因此依赖于shiroproject-core模块,此模块的类如果需要复用,也可以像shiro模块一样拆出一个Java模块。
pom关键配置
至此,如果我们打包sss-sys-web Maven Webapp这个项目,就会将shiroproject Maven Webapp这个web项目的文件合并进本项目,且本项目作为父项目对于同名文件拥有优先权。我们还可以单独创建一个只用于整合web项目的父项目,如下。
sss-web Maven Webapp
Maven创建的web项目,用于整合所有子web项目文件的整合项目,作为最顶层的整合项目,对于子项目同名文件有着最高优先权,因此一些公共的文件可以在此项目中进行配置。
pom关键配置(其实就是配置个插件,在上个项目中也配置了)
sss-aggregator
聚合工程,本项目所有工程的父工程,可以仅为一个pom配置文件。为什么要创建一个聚合工程,因为在以上项目打包过程中,会发现,加入A项目依赖于B项目,那么首先我们要先将B项目install到maven仓库中,才可以对A项目进行打包后者install,否则会报错,提示在maven仓库中找不到B项目,如果按每次都按照依赖顺序一个个打包过于麻烦,因此可以配置一个聚合项目对依赖项目依次进行install,而且作为聚合工程,也就是所有模块的父工程,可以在此项目中进行一些公共jar包和插件的配置管理。
pom关键
关于在聚合工程内配置一些对依赖jar包及插件的公共管理,就不介绍了,个人感觉配置公共管理会降低各个子模块的独立性。
右键更新下项目,如果依赖的项目代码发生变动也要更新下。
子模块pom配置parent如:
感觉这东西不配置也没什么问题啊,唯一的作用就是简化子模块的配置,或将各个子模块依赖的jar包插件版本管理权交给聚合工程,个人不喜欢配置,配置此项感觉会将子模块依赖于某个指定的聚合工程
一、模块结构
粗略画了个草图表示下现有模块之间的关系(图片被缩太小右键另存查看)二、模块作用及配置文件
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项目代码及资源被整合到一起。相关文章推荐
- maven学习
- maven插件maven-war-plugin的使用
- jenkins------部署项目到jboss eap下
- maven使用经验集
- java application maven项目打自定义zip包实例(推荐)
- Maven安装及MyEclipse中使用Maven
- window下安装和配置maven环境
- Eclipse使用maven搭建spring mvc图文教程
- 使用maven+eclipse搭建struts2开发环境
- myeclipse中使用maven前常见错误及解决办法
- Spring整合MyBatis(Maven+MySQL)图文教程详解
- 用Maven插件生成Mybatis代码的实现方法
- Java随手笔记8之包、环境变量和访问控制及maven profile实现多环境打包
- Eclipse 使用Maven构建SpringMVC项目
- maven利用tomcat插件部署远程Linux服务器的步骤详解
- 配置pom.xml用maven打包java工程的方法(推荐)
- maven搭建java ee项目图文教程
- Java的项目构建工具Maven的配置和使用教程
- maven中下载jar包源码和javadoc的命令介绍
- 表单重复提交处理总结