实际状况:基于开源做者开源的web项目,扩展开发本身的业务功能,又不想跟原项目混在一块儿开发,即要实现开源web项目与本身的扩展web项目合并部署且本身的web项目依赖开源的web项目,经网上查询资料和实际测试以下方案可行。html
开源的web项目pom: <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> 下的<configuration>中添加下面两行web
<!--注意增长这两行,在打包时相关的类会被独立打成jar add by kool.zhao 2016-09-04 -->apache
<attachClasses>true</attachClasses> <classesClassifier>api</classesClassifier>api
本身的web项目pom: 添加依赖:分别依赖开源web项目的war和jar <dependency> <groupId>com.thinkgem.jeesite</groupId> <artifactId>jeesite</artifactId> <version>1.2.7</version> <type>war</type> </dependency>tomcat
<dependency> <groupId>com.thinkgem.jeesite</groupId> <artifactId>jeesite</artifactId> <version>1.2.7</version> <type>jar</type> <scope>compile</scope> <classifier>api</classifier> </dependency>
<build> <finalName>mysite</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <!-- 测试合并web模块项目 --> <overlays> <overlay> <groupId>com.thinkgem.jeesite</groupId> <artifactId>jeesite</artifactId> </overlay> </overlays> </configuration> </plugin> </plugins> </build>服务器
参考: http://www.tuicool.com/articles/ArE3iaA http://www.cnblogs.com/silentjesse/p/5071965.htmlapp
maven多web合并项目 多web项目合并,主要是我在网上找到的资料都不是我最终想要的效果,因此这里就介绍下我最终使用的方案,网上有不少方案都是介绍用caro插件,我到如今也不明白为何要使用这个插件。 maven的多web模块maven-war-plugin插件的overlays属性来处理,最终主web项目pom.xml代码以下eclipse
<build> <finalName>bpmcenter</finalName> <plugins> <!-- 合并多个war --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <packagingExcludes>WEB-INF/web.xml</packagingExcludes> <overlays> <overlay> <groupId>com.founder.fix.fixflow</groupId> <artifactId>fixflow-webapp-taskcenter</artifactId> </overlay> </overlays> </configuration> </plugin> </plugins> </build> 这里使用到了maven-war-plugin,用overlay属性已经足够将多web合并了,只是用的过程当中须要注意如下几点: 1. 被合并的子web项目packaging属性必须是war 2. 被合并的子web项目,必须在主项目中添加依赖关系。 3. 被合并的子web项目中,若是没有web.xml,则须要在pom.xml中声明 <build> <finalName>fixflow-webapp-editor</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build>webapp
作完以上几点,多web项目合并就基本上作完了,运行mvn install就会发现打出的war包中已经存在了其余子模块的项目。 多web项目在eclipse+tomcat环境下部署调试 在eclipse里面使用,其实更简单,只是网上的说法太复杂了而已,对于习惯了tomcat开发的用户来讲。 对于maven项目,一个环境到另外一个环境应该只有pom.xml文件和src文件夹就够了,其余都是用户根据本身的环境来作的。
Maven支撑下的War应用依赖另一个WAR应用的解决方案 最近在作项目中,用Maven管理项目间的依赖关系,遇到一个问题,快折腾死了,不过初步试出来一种解决方案。在此把问题及解决方案描述一下,以资共享。 问题描述:有两个项目A和B,Dynamic Web Project。依赖关系是,B-->A,一种方式是利用maven-war-plugin的Overlay机制(例子可参见官网),但这种解决方案默认是将两个Web应用的资源进行合并,相关的class都会被复制到WEB-INF/classes下面,相关的JSP等资源也合并到一块儿。个人要求是A的class被独立打包成一个jar,在发布到应用服务器后存在于B应用的WEB-INF/lib下面,A应用的其余资源都不要。 处理思路: 1、A应用的POM处理 <?xml version="1.0" encoding="UTF-8"?> <project ......"> <modelVersion>4.0.0</modelVersion> <groupId>com.xxx</groupId> <version>0.0.1-SNAPSHOT</version> <name>A-web</name> <artifactId>A-web</artifactId> <packaging>war</packaging>maven
<build>
<plugins>
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <!--注意增长这两行,在打包时相关的类会被独立打成jar--> <attachClasses>true</attachClasses> <classesClassifier>api</classesClassifier> </configuration> <version>2.3</version> <executions> </executions> </plugin>
</plugins> </build> </project>
打包完成后,包含A-web.war和a-web-api.jar及其余文件。
2、B应用的POM处理
<?xml version="1.0" encoding="UTF-8"?>
<project ...........> <modelVersion>4.0.0</modelVersion> <groupId>com.xxx</groupId> <version>0.0.1-SNAPSHOT</version> <name>B</name> <artifactId>B</artifactId> <packaging>war</packaging>
<dependencies> <dependency> <groupId>com.xxx</groupId> <artifactId>A-web</artifactId> <version>0.0.1-SNAPSHOT</version> <type>jar</type> <scope>compile</scope> <classifier>api</classifier> </dependency> </dependencies>
</project> 注意以上的依赖中的type属性为jar,而不是默认的war。classifier的值api与A中的classesClassifier的值api要一致。