我們都知道,我們常常將一個(gè)復(fù)雜的java應(yīng)用拆分成多個(gè)java子應(yīng)用。由于maven的出現(xiàn),這種拆分就更加容易了,因?yàn)槲覀兺ㄟ^maven可以創(chuàng)建多個(gè)關(guān)聯(lián)模塊的項(xiàng)目(Multiple Module Projects)。由一個(gè)總的模塊,下面包含多個(gè)子模塊(子模塊還可以包含子模塊)。
一、通過在Maven命令行創(chuàng)建。
1. 創(chuàng)建父模塊(總的POM) - cms-validator
使用命令mvn archetype:create -DgroupId=com.ebay.tools.cms.validator -DartifactId=cms-validator
創(chuàng)建一個(gè)maven項(xiàng)目,然后修改該項(xiàng)目的pom.xml文件,將package類型改為pom
<packaging>pom</packaging>
并刪除其中的src目錄。
2. 創(chuàng)建提供rest service的子模塊:validator-rest
在父模塊的目錄下,
使用命令mvn archetype:create -DgroupId=com.ebay.tools.cms.validator.rest -DartifactId=validator-rest
創(chuàng)建一個(gè)maven(子)項(xiàng)目。
3. 創(chuàng)建一個(gè)web子模塊: validator-web
在父模塊的目錄下,
mvn archetype:create -DgroupId=com.ebay.tools.cms.validator.web -DartifactId=validator-web -DarchetypeArtifactId=maven-archetype-webapp
完成以上3步以后,會(huì)在總的pom.xml中已經(jīng)自動(dòng)加入:
<modules> <module>validator-rest</module> <module>validator-web</module></modules>
在各個(gè)子模塊中也自動(dòng)的加入了:
<parent>
<artifactId>cms-validator</artifactId><groupId>com.ebay.tools.cms.validator</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
由于默認(rèn)情況下子模塊繼承了總POM的package(pom),這里需要修改子模塊的pom的package類型。
validator-web模塊覆蓋為<packaging>war</packaging>, validator-rest模塊修改為:<packaging>jar</packaging>。
4. 對(duì)父模塊的特別設(shè)置:
需要在上級(jí)模塊中設(shè)置java編譯的參數(shù),現(xiàn)在eclipse一般都使用比較新的版本,默認(rèn)jdk是1.6,而maven默認(rèn)的Jdk版本很有可能還是1.4。 所以需要設(shè)置java編譯參數(shù)。
<plugin>
<artifactId>maven-compiler-plugin</artifactId><configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
5. 如果web子模塊需要wtp的支持,則可以在web模塊的pom中設(shè)置wtp的支持,需要設(shè)置elcipse插件:
<build>
<plugins><plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<configuration>
<wtpmanifest>true</wtpmanifest>
<wtpapplicationxml>true</wtpapplicationxml>
<wtpversion>2.0</wtpversion>
</configuration>
</plugin>
</plugins>
</build>
6. 生成eclipse項(xiàng)目:
在父模塊的根目錄下,執(zhí)行命令:
mvn eclipse:eclipse
注:在eclipse中導(dǎo)入如上的項(xiàng)目后,如果沒有在eclipse中設(shè)置"M2_REPO",導(dǎo)入的項(xiàng)目可能會(huì)報(bào)錯(cuò),
可以在eclipse中設(shè)置M2_REPO, 配置步驟:window >> preferences >> Java >> Build Path >> Classpath Variables
新建一個(gè) M2_REPO 的變量,變量值指向你系統(tǒng)的Maven2的數(shù)據(jù)倉庫位置(例如我自己的路徑為:C:\maven-repo\swang\ebox)。如果要在eclipse中使用m2eclipse,需要執(zhí)行命令mvn eclipse:m2eclipse, 這樣就不需要設(shè)置M2_REPO類庫變量了。
二、在Eclipse中創(chuàng)建多個(gè)maven項(xiàng)目模塊
在Eclipse中創(chuàng)建父模塊及其子模塊也非常簡單,主要也是通過選擇模塊的路徑來完成。
1. 創(chuàng)建父模塊:ast
例如在eclipse中new 一個(gè)simple maven project,注意選擇父模塊的路徑為:C:\Users\swang6\workspace\ast
在創(chuàng)建的steps中輸入如下信息:
Group Id: com.ebay.tools
Artifact Id: ASTController
version: 1.0.0
Packaging: pom
Name: Tools:ASTController:ASTController
Description:eBox command application using the command pipeline framework.
2. 創(chuàng)建子模塊: ASTRestService
在eclipse new 一個(gè)simple maven project,注意選擇該子模塊的路徑為:C:\Users\swang6\workspace\ast\ASTRestService,
在創(chuàng)建的steps中輸入如下信息:
Group Id:com.ebay.tools.ast
Artifact Id:ASTRestService
version: 1.0.0
Packaging: jar
Name: Tools:ASTController:AST-REST
Description:Restful services for load balance controller.
Parent Project
Group Id:com.ebay.tools
Artifact Id:ASTController
Version:1.0.0
3. 創(chuàng)建子模塊: ASTWeb
在eclipse new 一個(gè)maven-archetype-webapp類型的project,注意選擇該子模塊的路徑為:C:\Users\swang6\workspace\ast\ASTWeb
在創(chuàng)建的steps中輸入如下信息:
Group Id:com.ebay.tools.ast
Artifact Id:ASTWeb
version: 1.0.0
Packaging: war
Name: Tools:ASTController:AST-WEB
Description:The Load Balance Controller Web application for handling the requests
Parent Project
Group Id:com.ebay.tools
Artifact Id:ASTController
Version:1.0.0
完成以上操作后,如果在父模塊(ast, ASTController)中的pom.xml中沒有如下的配置,則加上:
<modules>
<module>ASTWeb</module>
<module>ASTRestService</module>
</modules>
如果在ASTRestService和ASTWeb中的pom.mxl中沒有如下配置,則加上:
<parent>
<artifactId>ASTController</artifactId>
<groupId>com.ebay.tools</groupId>
<version>1.0.0</version>
</parent>
這樣就完成了在Eclipse中創(chuàng)建一個(gè)父模塊ASTController,然后在其下創(chuàng)建另外兩個(gè)子模塊:ASTRestService和web模塊:ASTWeb。
聯(lián)系客服