码迷,mamicode.com
首页 > 编程语言 > 详细

第二章 Java框架整合--maven父子模块

时间:2016-01-06 23:24:11      阅读:1256      评论:0      收藏:0      [点我收藏+]

标签:

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</groupId>
     69                 <artifactId>spring-context-support</artifactId>
     70                 <version>3.2.6.RELEASE</version>
     71             </dependency>
     72             <!-- mysql -->
     73             <dependency>
     74                 <groupId>mysql</groupId>
     75                 <artifactId>mysql-connector-java</artifactId>
     76                 <version>5.1.27</version>
     77                 <scope>runtime</scope>
     78             </dependency>
     79             <!-- 数据源 -->
     80             <dependency>
     81                 <groupId>org.apache.tomcat</groupId>
     82                 <artifactId>tomcat-jdbc</artifactId>
     83                 <version>7.0.47</version>
     84             </dependency>
     85             <!-- mybatis -->
     86             <dependency>
     87                 <groupId>org.mybatis</groupId>
     88                 <artifactId>mybatis</artifactId>
     89                 <version>3.1.1</version>
     90             </dependency>
     91             <dependency>
     92                 <groupId>org.mybatis</groupId>
     93                 <artifactId>mybatis-spring</artifactId>
     94                 <version>1.1.1</version>
     95             </dependency>
     96             <!-- velocity -->
     97             <dependency>
     98                 <groupId>org.apache.velocity</groupId>
     99                 <artifactId>velocity</artifactId>
    100                 <version>1.5</version>
    101             </dependency>
    102             <dependency>
    103                 <groupId>velocity-tools</groupId>
    104                 <artifactId>velocity-tools-generic</artifactId>
    105                 <version>1.2</version>
    106             </dependency>
    107             <!-- 用于加解密 -->
    108             <dependency>
    109                 <groupId>commons-codec</groupId>
    110                 <artifactId>commons-codec</artifactId>
    111                 <version>1.7</version>
    112             </dependency>
    113             <dependency>
    114                 <groupId>org.bouncycastle</groupId>
    115                 <artifactId>bcprov-jdk15on</artifactId>
    116                 <version>1.47</version>
    117             </dependency>
    118             <!-- 集合工具类 -->
    119             <dependency>
    120                 <groupId>org.apache.commons</groupId>
    121                 <artifactId>commons-collections4</artifactId>
    122                 <version>4.0</version>
    123             </dependency>
    124             <!-- http -->
    125             <dependency>
    126                 <groupId>org.apache.httpcomponents</groupId>
    127                 <artifactId>httpclient</artifactId>
    128                 <version>4.2.6</version>
    129             </dependency>
    130         </dependencies>
    131     </dependencyManagement>
    132     
    133     <!-- 引入实际依赖 -->
    134     <dependencies>
    135         <!-- json -->
    136         <dependency>
    137             <groupId>com.alibaba</groupId>
    138             <artifactId>fastjson</artifactId>
    139         </dependency>
    140         <!-- servlet -->
    141         <dependency>
    142             <groupId>javax.servlet</groupId>
    143             <artifactId>javax.servlet-api</artifactId>
    144         </dependency>
    145         <!-- spring -->
    146         <dependency>
    147             <groupId>org.springframework</groupId>
    148             <artifactId>spring-core</artifactId>
    149         </dependency>
    150         <dependency>
    151             <groupId>org.springframework</groupId>
    152             <artifactId>spring-beans</artifactId>
    153         </dependency>
    154         <dependency>
    155             <groupId>org.springframework</groupId>
    156             <artifactId>spring-context</artifactId>
    157         </dependency>
    158         <dependency>
    159             <groupId>org.springframework</groupId>
    160             <artifactId>spring-web</artifactId>
    161         </dependency>
    162         <dependency>
    163             <groupId>org.springframework</groupId>
    164             <artifactId>spring-webmvc</artifactId>
    165         </dependency>
    166         <!-- 这个是使用velocity的必备包 -->
    167         <dependency>
    168             <groupId>org.springframework</groupId>
    169             <artifactId>spring-context-support</artifactId>
    170         </dependency>
    171         <!-- mysql -->
    172         <dependency>
    173             <groupId>mysql</groupId>
    174             <artifactId>mysql-connector-java</artifactId>
    175         </dependency>
    176         <!-- 数据源 -->
    177         <dependency>
    178             <groupId>org.apache.tomcat</groupId>
    179             <artifactId>tomcat-jdbc</artifactId>
    180         </dependency>
    181         <!-- mybatis -->
    182         <dependency>
    183             <groupId>org.mybatis</groupId>
    184             <artifactId>mybatis</artifactId>
    185         </dependency>
    186         <dependency>
    187             <groupId>org.mybatis</groupId>
    188             <artifactId>mybatis-spring</artifactId>
    189         </dependency>
    190         <!-- velocity -->
    191         <dependency>
    192             <groupId>org.apache.velocity</groupId>
    193             <artifactId>velocity</artifactId>
    194         </dependency>
    195         <dependency>
    196             <groupId>velocity-tools</groupId>
    197             <artifactId>velocity-tools-generic</artifactId>
    198         </dependency>
    199         <!-- 集合工具类 -->
    200         <dependency>
    201             <groupId>org.apache.commons</groupId>
    202             <artifactId>commons-collections4</artifactId>
    203         </dependency>
    204     </dependencies>
    205 </project>
    View Code
    技术分享
     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         <!-- 用于加解密 -->
    29         <dependency>
    30             <groupId>commons-codec</groupId>
    31             <artifactId>commons-codec</artifactId>
    32         </dependency>
    33         <dependency>
    34             <groupId>org.bouncycastle</groupId>
    35             <artifactId>bcprov-jdk15on</artifactId>
    36         </dependency>
    37         <!-- http -->
    38         <dependency>
    39             <groupId>org.apache.httpcomponents</groupId>
    40             <artifactId>httpclient</artifactId>
    41         </dependency>
    42     </dependencies>
    43 </project>
    View Code
    对于maven3来讲,常用的scope有以下4种:
    • compile:默认,作用于编译、测试和运行
    • provided:常见的就是servlet-api,作用于编译和测试(运行的时候由容器提供了)
    • runtime:常见的就是mysql-connector,作用在运行和测试时
    • test:常见的就是junit,spring-test,作用在测试时
    在配置pom.xml的时候,需要将这些写上scope写上。
  • 在实际使用中,我们会在父pom.xml配置<profiles>标签,在其中配置多套运行环境(一般而言,配置三套:开发,预上线,上线),每套环境配置不同的数据库和服务器。

第二章 Java框架整合--maven父子模块

标签:

原文地址:http://www.cnblogs.com/java-zhao/p/5107569.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!