Maven--多模块依赖实例解析(五)

13 篇文章 0 订阅

Maven--搭建开发环境(一)

Maven--构建企业级仓库(二)

Maven—几个需要补充的问题(三)

Maven—生命周期和插件(四)

Maven--多模块依赖实例解析(五)

 


这是最后一篇,做一个多模块依赖的正式例子,简单的讲一下单元测试、覆盖率以及发布和站点的部署。只想讲讲和Maven相关的东西,因此,注重看pom文件,里面具体的代码就不实现了,下面是我项目骨架:


首先创建一个MavenProject,命名为demo-parent,此为父模块,重要的是如下两步:


所选的的模板是quickstart


pom文件中的配置如下:

[html]  view plain  copy   在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" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  3.   <modelVersion>4.0.0</modelVersion>  
  4.   
  5.      <groupId>com.tgb.demo</groupId>  
  6.      <artifactId>demo-parent</artifactId>  
  7.      <version>0.0.1-SNAPSHOT</version>  
  8.      <packaging>pom</packaging>  
  9.       
  10.      <name>demo-parent</name>  
  11.      <url>http://maven.apache.org</url>  
  12.   
  13.      <properties>  
  14.        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
  15.        <springframework.version>3.1.1.RELEASE</springframework.version>  
  16.      </properties>  
  17.   
  18.      <modules>  
  19.         <module>demo-core</module>  
  20.         <module>demo-persistent</module>  
  21.         <module>demo-service</module>  
  22.        <module>demo-web</module>  
  23.      </modules>  
  24.     
  25.     <dependencyManagement>  
  26.         <dependencies>  
  27.             <dependency>  
  28.                 <groupId>org.springframework</groupId>  
  29.                 <artifactId>spring-context-support</artifactId>  
  30.                 <version>${springframework.version}</version>  
  31.             </dependency>  
  32.             <dependency>  
  33.                 <groupId>junit</groupId>  
  34.                 <artifactid>junit</artifactId>  
  35.                 <version>4.8.2</version>  
  36.                 <scope>test</scope>  
  37.              </dependency>  
  38.         </dependencies>  
  39.      </dependencyManagement>  
  40.     
  41.     <build>  
  42.         <pluginManagement>  
  43.             <plugins>  
  44.                 <plugin>  
  45.                     <groupId>org.apache.maven.plugins</groupId>  
  46.                     <artifactId>maven-compiler-plugin</artifactId>  
  47.                     <version>2.3.2</version>  
  48.                     <configuration>  
  49.                       <source>1.5</source>  
  50.                       <target>1.5</target>  
  51.                       <encoding>UTF-8</encoding>  
  52.                     </configuration>  
  53.                 </plugin>  
  54.                   
  55.                 <plugin>    
  56.                    <groupId>org.apache.maven.plugins</groupId>    
  57.                    <artifactId>maven-resources-plugin</artifactId>    
  58.                    <configuration>    
  59.                           <encoding>UTF-8</encoding>    
  60.                    </configuration>    
  61.                 </plugin>  
  62.   
  63.             </plugins>  
  64.         </pluginManagement>  
  65.     </build>  
  66. </project>  

后面我们会一一讲解上面这个pom文件,接下来,继续创建MavenProject或者MavenModule,Module在创建时需要选择父模块,而Project创建完成之后需要在pom中添加依赖的父模块,没什么区别,将此模块命名为demo-core,之后依次创建demo-persistent、demo-service、demo-web,值得注意的是,创建demo-web时选择的模板必须是webapp,demo-web的pom配置如下,其余的都和demo-web差不多,读者可仿照配置:

[html]  view plain  copy   在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0"?>  
  2. <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  
  4.   <modelVersion>4.0.0</modelVersion>  
  5.   <parent>  
  6.     <groupId>com.tgb.demo</groupId>  
  7.     <artifactId>demo-parent</artifactId>  
  8.     <version>0.0.1-SNAPSHOT</version>  
  9.   </parent>  
  10.   <groupId>com.tgb.demo</groupId>  
  11.   <artifactId>demo-web</artifactId>  
  12.   <version>0.0.1-SNAPSHOT</version>  
  13.   <packaging>war</packaging>  
  14.   <name>demo-web Maven Webapp</name>  
  15.   <url>http://maven.apache.org</url>  
  16.   
  17.   <dependencies>  
  18.         <dependency>  
  19.             <groupId>${project.groupId}</groupId>  
  20.             <artifactId>student-service</artifactId>  
  21.             <version>0.0.1-SNAPSHOT</version>  
  22.         </dependency>  
  23.         <dependency>  
  24.             <groupId>org.springframework</groupId>  
  25.             <artifactId>spring-webmvc</artifactId>  
  26.         </dependency>  
  27.     </dependencies>  
  28.     <build>  
  29.         <finalName>demo-web</finalName>  
  30.         <plugins>  
  31.             <plugin>  
  32.                 <groupId>org.mortbay.jetty</groupId>  
  33.                 <!-- 使用的是jetty-maven-plugin的插件 -->  
  34.                 <artifactId>jetty-maven-plugin</artifactId>  
  35.                 <configuration>  
  36.                     <scanIntervalSeconds>2000</scanIntervalSeconds>  
  37.                     <webApp>  
  38.                     <!-- 上下文路径 -->  
  39.                         <contextPath>/stu</contextPath>  
  40.                     </webApp>  
  41.                     <connectors>  
  42.                         <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">  
  43.                         <!-- 端口号 -->  
  44.                             <port>8787</port>  
  45.                             <maxIdleTime>500000</maxIdleTime>  
  46.                         </connector>  
  47.                     </connectors>  
  48.                 </configuration>  
  49.             </plugin>  
  50.             <!--   
  51.             <plugin>  
  52.                 <groupId>org.codehaus.mojo</groupId>  
  53.                 <artifactId>tomcat-maven-plugin</artifactId>  
  54.                 <version>1.1</version>  
  55.                 <configuration>  
  56.                       
  57.                     <port>8080</port>  
  58.                     <contextFile>src/main/resources/context.xml</contextFile>  
  59.                       
  60.                 </configuration>  
  61.             </plugin> -->  
  62.         </plugins>  
  63.     </build>  
  64. </project>  

OK,几个模板创建完成后,我想你的模块有可能在报错,那么接下来需要设置编译、发布等等,我废话不多说,右击你的模块,然后打开Properties窗口,按照下面的图依次设置:

选择javabuild path:


再到javacompiler,把编译jdk给改了:


现在来设置WTP:



以后设置wtp编译目录:



到此为止我们的大概环境算是配置完成了,那么接下来就需要分析很重要的pom文件了,一些基础的东西我不会讲,大家可上网查,先来分析demo-parent的pom文件,在demo-parent的pom值得注意的有以下几点:

1.            <packaging>pom</packaging>,必须改成pom,不是jar,也不是war,因为他是parent,大家可以想想接口的作用;

2.            在<modules></modules>必须要配上你所有相关的模块,当eclipse导入项目时,就是根据这个标签把相关的模块一起导入进来的;

3.            消除重复,在<properties></properties>中,配置了<springframework.version>3.1.1.RELEASE</springframework.version>,下面依赖配置中就可以直接引用此配置了,如果将来改变版本,既改此一处;

4.            消除多模块依赖配置重复,我们知道依赖是可以继承的,既父模块中定义的依赖,子模块可自动继承,但是有些子模块需要,有些不需要的情况下该怎么办呢?那就必须用<dependencyManagement>标签了,子模块的pom中就可以 <dependency><groupId>junit</groupId><artifactid>junit</artifactId> </dependency>,这样引用,没有引用的就不会自动继承;

5.            消除多模块插件配置重复,与dependencyManagement类似的,我们也可以使用pluginManagement元素管理插件。一个常见的用法就是我们希望项目所有模块的使用MavenCompiler Plugin的时候,都使用Java 1.6,以及指定Java源文件编码为UTF-8,如父模块的POM中的配置;这段配置会被应用到所有子模块的maven-compiler-plugin中,由于Maven内置了maven-compiler-plugin与生命周期的绑定,因此子模块就不再需要任何maven-compiler-plugin的配置了。与依赖配置不同的是,通常所有项目对于任意一个依赖的配置都应该是统一的,但插件却不是这样,例如你可以希望模块A运行所有单元测试,模块B要跳过一些测试,这时就需要配置maven-surefire-plugin来实现,那样两个模块的插件配置就不一致了。这也就是说,简单的把插件配置提取到父POM的pluginManagement中往往不适合所有情况,那我们在使用的时候就需要注意了,只有那些普适的插件配置才应该使用pluginManagement提取到父POM中。

完成了环境的配置,下面就是单元测试、覆盖率报告和站点的发布了,其实这些都是对插件的应用,单元测试可以用maven-surefire-plugin,覆盖率Maven自带了一个插件,叫做cobertura,可以执行目标cobertura:cobertura,web的发布,有jetty和tomcat插件,具体用法我已经在上面给出来了,站点的发布有maven-project-info-reports-plugin插件,使用mvnsite可以完成站点的生成,具体用法如下


还有很多插件,三天三夜都说不完,掌握再多也是徒劳,极为重要的是,自己需要什么随时去查,会查,然后能迅速掌握插件的用法,关于Maven到此结束了,这篇写的很粗糙,大家有问题随时留言或邮件。

关于本文实例源码弄丢了,因此上传了一个别人写的例子,很全面,可参考:http://download.csdn.net/detail/stubbornpotatoes/7071803

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值