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

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

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

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

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

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

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

所选的的模板是quickstart

pom文件中的配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<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">
<modelVersion>4.0.0</modelVersion> <groupId>com.tgb.demo</groupId>
<artifactId>demo-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging> <name>demo-parent</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<springframework.version>3.1.1.RELEASE</springframework.version>
</properties> <modules>
<module>demo-core</module>
<module>demo-persistent</module>
<module>demo-service</module>
<module>demo-web</module>
</modules> <dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactid>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement> <build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin> </plugins>
</pluginManagement>
</build>
</project>

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

<?xml version="1.0"?>
<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"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.tgb.demo</groupId>
<artifactId>demo-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.tgb.demo</groupId>
<artifactId>demo-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>demo-web Maven Webapp</name>
<url>http://maven.apache.org</url> <dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>student-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
</dependencies>
<build>
<finalName>demo-web</finalName>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<!-- 使用的是jetty-maven-plugin的插件 -->
<artifactId>jetty-maven-plugin</artifactId>
<configuration>
<scanIntervalSeconds>2000</scanIntervalSeconds>
<webApp>
<!-- 上下文路径 -->
<contextPath>/stu</contextPath>
</webApp>
<connectors>
<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
<!-- 端口号 -->
<port>8787</port>
<maxIdleTime>500000</maxIdleTime>
</connector>
</connectors>
</configuration>
</plugin>
<!--
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.1</version>
<configuration> <port>8080</port>
<contextFile>src/main/resources/context.xml</contextFile> </configuration>
</plugin> -->
</plugins>
</build>
</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到此结束了,这篇写的很粗糙,大家有问题随时留言或邮件。

Maven--多模块依赖实例解析(五)的更多相关文章

  1. maven多模块依赖源码调试

    Maven多模块项目中,通常存在摸个模块同时依赖其他多个基础模块的情况.在eclipse中使用run-jetty-run插件调试时,常常会出现找不到被依赖模块对应源码的错误提示.举个例子,模块A同时依 ...

  2. Maven多模块构建实例

    创建coffee-parent项目 New->Maven Project 创建coffee-web项目 右键coffee-parent项目->New->Project... 注意:需 ...

  3. 谈谈maven多模块

    记得在校的时候,通常用的比较多是动态web工程,动态web工程导入最多就是jar包,这些jar包需要自己手动复制粘贴放入lib目录下,然后build path,有的IDE会自动build path有的 ...

  4. Maven提高篇系列之(五)——处理依赖冲突

    这是一个Maven提高篇的系列,包含有以下文章: Maven提高篇系列之(一)——多模块 vs 继承 Maven提高篇系列之(二)——配置Plugin到某个Phase(以Selenium集成测试为例) ...

  5. python 解析XML python模块xml.dom解析xml实例代码

    分享下python中使用模块xml.dom解析xml文件的实例代码,学习下python解析xml文件的方法. 原文转自:http://www.jbxue.com/article/16587.html ...

  6. SpringBoot+Maven多模块项目(创建、依赖、打包可执行jar包部署测试)完整流程

    一,创建Maven多模块项目先建立外层父工程         File →new →project  选择Spring Initializr          Next下一步到以下页面 工程结构如下 ...

  7. Maven多模块项目依赖管理

    Maven多模块项目依赖管理及dependencies与dependencyManagement的区别 转自:http://blog.csdn.net/liutengteng130/article/d ...

  8. Spring-boot构建多模块依赖工程时,maven打包异常:程序包xxx不存在

    在qizhi项目改版的时候, 所有代码都迁移好了, 但是compile的时候报程序包*****不存在, 具体到某一个类就是: 找不到符号. 下面这篇文章是正解 http://hbxflihua.ite ...

  9. Idea创建多模块依赖Maven项目

    idea 创建多模块依赖Maven项目   本来网上的教程还算多,但是本着自己有的才是自己的原则,还是自己写一份的好,虽然可能自己也不会真的用得着. 1. 创建一个新maven项目 2. 3. 输入g ...

随机推荐

  1. css入门之css选择器

    CSS选择器 css的选择器最常用的是class选择器,定义方式如下. <!DOCTYPE html> <html lang="en"> <head& ...

  2. URL中的空格字符如何编码

    URL encoding the space character: + or %20? 简单理解: ‘?’前的路径中的空格必须为’20%’ ‘?’后的参数中空格可以被编码成’+’(正常情况),然而有时 ...

  3. mybatis知识总结

    基于昨天的mybatis入门详解,今天我们再来看看mybatis稍微高深些的知识点. 1.解决Model属性和数据库字段不一致的问题 1),开启驼峰命名 2),使用resultMap进行映射, < ...

  4. 服务 IntentService 前台服务 定时后台服务

    Activity public class MainActivity extends ListActivity {     private int intentNumber = 0;     @Ove ...

  5. 基本 XAML 语法指南

    我们介绍了 XAML 语法规则,以及用于描述 XAML 语法中存在的限制或选项的术语.当出现以下情况时你会发现本主题很有用:不熟悉 XAML 语言的使用,希望加强对术语或某些语法部分的理解,或者对 X ...

  6. iframe顶部跳转跨域问题

    $("#button").on("click", function () {                  //  top.location.locatio ...

  7. SVN—patch的应用

    svn 补丁的应用,在eclipse下有时候不能把全部变化加入,出现中文乱码问题.以下转载其他文章 原文地址:http://xiebh.iteye.com/blog/347458 1.create p ...

  8. defer和async

    1.decument.wirte不能使用 2.<script src="text.js" type="text/javascript" defer=&qu ...

  9. JavaScript学习笔记(三十八) 复制属性继承

    复制属性继承(Inheritance by Copying Properties) 让我们看一下另一个继承模式—复制属性继承(inheritance by copying properties).在这 ...

  10. dedecms 织梦ping服务插件 最新破解可用版

    dedecms 织梦ping服务插件 最新破解可用版  ping_gbk.xml <module> <baseinfo> name=ping服务 team=井哥 time=20 ...