實際狀況:基於開源做者開源的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要一致。