2.1、maven父子模塊在實際開發中,我們基本都會用maven父子分模塊的方式進行項目的開發。2.2、實際操作2.2.1、手工建立一個ssmm0的文件夾,併在該文件夾中加入一個pom.xml文件,該pom.xml文件內容如下: 1 2 4 5 4.0.0 6 7 com.x...
2.1、maven父子模塊
在實際開發中,我們基本都會用maven父子分模塊的方式進行項目的開發。
2.2、實際操作
2.2.1、手工建立一個ssmm0的文件夾,併在該文件夾中加入一個pom.xml文件,該pom.xml文件內容如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4 5 <modelVersion>4.0.0</modelVersion> 6 7 <groupId>com.xxx</groupId> 8 <artifactId>ssmm0</artifactId> 9 <version>1.0-SNAPSHOT</version> 10 11 <name>ssmm0</name> 12 <packaging>pom</packaging><!-- 父模塊 --> 13 14 <!-- 管理子模塊 --> 15 <modules> 16 <module>ssmm</module> 17 </modules> 18 19 <properties> 20 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 21 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 22 </properties> 23 </project>View Code
註意:
- 父模塊的pom.xml文件的<packaging>標簽內容為pom;而需要部署的子項目為war;只是作為其他項目的工具的子項目為jar
- 使用<modules>標簽管理所有的子模塊,以後再有新的子模塊,只需要在<modules>添加新的<module>子標簽即可
2.2.2、將上一章建好的那個項目ssmm放入ssmm0文件夾下,修改pom.xml如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4 5 <modelVersion>4.0.0</modelVersion> 6 7 <!-- 指定父模塊 --> 8 <parent> 9 <groupId>com.xxx</groupId> 10 <artifactId>ssmm0</artifactId> 11 <version>1.0-SNAPSHOT</version> 12 </parent> 13 14 <groupId>com.xxx.ssmm0</groupId> 15 <artifactId>ssmm0-ssmm</artifactId> 16 <!--<version>1.0-SNAPSHOT</version>--><!-- 父模塊已經指定了版本號,這裡就不用了--> 17 18 <name>ssmm0-ssmm</name> 19 <packaging>war</packaging> 20 21 <properties> 22 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 23 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 24 </properties> 25 26 <!-- 引入實際依賴 --> 27 <dependencies> 28 <!-- json --> 29 <dependency> 30 <groupId>com.alibaba</groupId> 31 <artifactId>fastjson</artifactId> 32 <version>1.1.39</version> 33 </dependency> 34 <!-- servlet --> 35 <dependency> 36 <groupId>javax.servlet</groupId> 37 <artifactId>javax.servlet-api</artifactId> 38 <version>3.0.1</version> 39 <scope>provided</scope> 40 </dependency> 41 <!-- spring --> 42 <dependency> 43 <groupId>org.springframework</groupId> 44 <artifactId>spring-core</artifactId> 45 <version>3.2.6.RELEASE</version> 46 </dependency> 47 <dependency> 48 <groupId>org.springframework</groupId> 49 <artifactId>spring-beans</artifactId> 50 <version>3.2.6.RELEASE</version> 51 </dependency> 52 <dependency> 53 <groupId>org.springframework</groupId> 54 <artifactId>spring-context</artifactId> 55 <version>3.2.6.RELEASE</version> 56 </dependency> 57 <dependency> 58 <groupId>org.springframework</groupId> 59 <artifactId>spring-web</artifactId> 60 <version>3.2.6.RELEASE</version> 61 </dependency> 62 <dependency> 63 <groupId>org.springframework</groupId> 64 <artifactId>spring-webmvc</artifactId> 65 <version>3.2.6.RELEASE</version> 66 </dependency> 67 <!-- 這個是使用velocity的必備包 --> 68 <dependency> 69 <groupId>org.springframework</groupId> 70 <artifactId>spring-context-support</artifactId> 71 <version>3.2.6.RELEASE</version> 72 <scope>compile</scope> 73 </dependency> 74 <!-- mysql --> 75 <dependency> 76 <groupId>mysql</groupId> 77 <artifactId>mysql-connector-java</artifactId> 78 <version>5.1.27</version> 79 <scope>runtime</scope> 80 </dependency> 81 <!-- 數據源 --> 82 <dependency> 83 <groupId>org.apache.tomcat</groupId> 84 <artifactId>tomcat-jdbc</artifactId> 85 <version>7.0.47</version> 86 </dependency> 87 <!-- mybatis --> 88 <dependency> 89 <groupId>org.mybatis</groupId> 90 <artifactId>mybatis</artifactId> 91 <version>3.1.1</version> 92 </dependency> 93 <dependency> 94 <groupId>org.mybatis</groupId> 95 <artifactId>mybatis-spring</artifactId> 96 <version>1.1.1</version> 97 </dependency> 98 <!-- velocity --> 99 <dependency> 100 <groupId>org.apache.velocity</groupId> 101 <artifactId>velocity</artifactId> 102 <version>1.5</version> 103 </dependency> 104 <dependency> 105 <groupId>velocity-tools</groupId> 106 <artifactId>velocity-tools-generic</artifactId> 107 <version>1.2</version> 108 </dependency> 109 <!-- 用於加解密 --> 110 <dependency> 111 <groupId>commons-codec</groupId> 112 <artifactId>commons-codec</artifactId> 113 <version>1.7</version> 114 </dependency> 115 <dependency> 116 <groupId>org.bouncycastle</groupId> 117 <artifactId>bcprov-jdk15on</artifactId> 118 <version>1.47</version> 119 </dependency> 120 <!-- 集合工具類 --> 121 <dependency> 122 <groupId>org.apache.commons</groupId> 123 <artifactId>commons-collections4</artifactId> 124 <version>4.0</version> 125 </dependency> 126 <!-- http --> 127 <dependency> 128 <groupId>org.apache.httpcomponents</groupId> 129 <artifactId>httpclient</artifactId> 130 <version>4.2.6</version> 131 </dependency> 132 </dependencies> 133 </project>View Code
註意:在上一章的基礎上做了以下幾點修改
- 添加了<parent>標簽,用來指定父模塊,該標簽內有父模塊的坐標(三要素:groupId/artifactId/version)
- 子模塊不需要再有版本號了,由父模塊來指定就好
- 將子模塊中下邊這一塊兒代碼也刪掉(因為在父模塊中已經指定了)
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties>
建議:
- "子模塊的groupId"設為"父模塊的groupId.父模塊的artifactId"
- "子模塊的artifactId"設為"父模塊的artifactId-子模塊的的名稱","父模塊的artifactId-子模塊的的名稱"也就是子模塊的項目名
- 無論父模塊還是子模塊,建議同一個pom.xml文件中的artifactId與name標簽內容相同
這幾點建議,在我們編寫和部署項目的時候都一目瞭然;以上幾點建議,請對照著以上兩個pom.xml文件對號入座。
2.2.3、在ssmm0的文件夾中,即父模塊pom.xml所在的文件夾中運行命令視窗,執行"mvn clean compile"命令
2.2.4、編譯成功後,將項目ssmm0以maven項目引入eclipse(具體方法:見第一章)
引入的項目結構如下:
註意:
- 以上第一個框處的內容是ssmm0-ssmm編譯出來的
- 第二個紅框正好印證了"父模塊的artifactId-子模塊的的名稱"也就是子模塊的項目名這句
2.2.5、運行ssmm項目,進行測試
這樣,就建立起了一個maven的父子模塊項目了。
註:若以後再增加一個新的模塊該怎麼做?
1)我們在父模塊的pom.xml文件中添加<module>
2)在ssmm0文件夾下手工創建一個字maven項目(創建方式見第一章),假設為ssmm2,ssmm2的pom.xml文件類似於ssmm子項目的pom.xml即可
3)在ssmm2文件夾中,打開命令視窗,執行"mvn compile"
4)將ssmm2引入eclipse
5)用eclipse的maven插件編譯在ssmm0上執行:"Run as"-->"Maven build"-->"clean compile"
這樣,就新建了一個子項目了。
針對maven這一塊有幾點建議:(很重要)
- 安裝maven後,最好在M2_HOME/conf/setting.xml文件添加如下代碼,將之後項目中用到的jar包全部下載到下邊的文件夾中(當然,在修改setting.xml文件時,最好先複製一份最備份),防止C盤撐爆。
<localRepository>E:/Java/mavenLocalRepository</localRepository>
- 在實際使用中,我們會架設私服(一般採用nexus),這樣做主要是為了加快jar的下載速度,之後需要在父pom.xml文件中指定私服的位置
<!-- nexus --> <repositories> <repository> <id>xxx-Nexus</id> <name>xxx Maven Repository</name> <url>http://xxx.com/nexus/</url> </repository> </repositories>
View Code一個<repository>標簽就是一個私服,可以加多個私服。
- 在實際使用中,我們會在父pom.xml文件中加入一個依賴管理池<dependencyManagement>,在這個池中指定了jar的版本號<version>和範圍<scope>,之後在子項目中實際引入jar的坐標的時候,就不需要寫<version>標簽和<scope>了;當然,這樣做,也可以保證在整個項目中,我們使用的同一個jar都是同一個版本;同時,需要指出的是,為了子模塊重覆代碼的減少,在父模塊處,會先引入一些所有子模塊都會使用的jar(例如:log4j等),這樣在子項目中就不需要再引入這些jar了。這裡給出父pom.xml與子項目ssmm的pom.xml的完整版。對著代碼,理解一下這一條。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4 5 <modelVersion>4.0.0</modelVersion> 6 7 <groupId>com.xxx</groupId> 8 <artifactId>ssmm0</artifactId> 9 <version>1.0-SNAPSHOT</version> 10 11 <name>ssmm0</name> 12 <packaging>pom</packaging><!-- 父模塊 --> 13 14 <!-- 管理子模塊 --> 15 <modules> 16 <module>ssmm</module> 17 </modules> 18 19 <properties> 20 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 21 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 22 </properties> 23 24 <!-- dependencyManagement不會引入實際的依賴,只是作為一個依賴池,供其和其子類使用 --> 25 <dependencyManagement> 26 <dependencies> 27 <!-- json --> 28 <dependency> 29 <groupId>com.alibaba</groupId> 30 <artifactId>fastjson</artifactId> 31 <version>1.1.39</version> 32 </dependency> 33 <!-- servlet --> 34 <dependency> 35 <groupId>javax.servlet</groupId> 36 <artifactId>javax.servlet-api</artifactId> 37 <version>3.0.1</version> 38 <scope>provided</scope> 39 </dependency> 40 <!-- spring --> 41 <dependency> 42 <groupId>org.springframework</groupId> 43 <artifactId>spring-core</artifactId> 44 <version>3.2.6.RELEASE</version> 45 </dependency> 46 <dependency> 47 <groupId>org.springframework</groupId> 48 <artifactId>spring-beans</artifactId> 49 <version>3.2.6.RELEASE</version> 50 </dependency> 51 <dependency> 52 <groupId>org.springframework</groupId> 53 <artifactId>spring-context</artifactId> 54 <version>3.2.6.RELEASE</version> 55 </dependency> 56 <dependency> 57 <groupId>org.springframework</groupId> 58 <artifactId>spring-web</artifactId> 59 <version>3.2.6.RELEASE</version> 60 </dependency> 61 <dependency> 62 <groupId>org.springframework</groupId> 63 <artifactId>spring-webmvc</artifactId> 64 <version>3.2.6.RELEASE</version> 65 </dependency> 66 <!-- 這個是使用velocity的必備包 --> 67 <dependency> 68 <groupId>org.springframework</