一 Maven项目打包配置

1 为整个项目统一指定字符集

  1. <properties>
  2. <project.build.sourceEncoding>UTF-</project.build.sourceEncoding>     <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
  3. </properties>

project.build.sourceEncoding:  用来定义资源文件的编码格式

maven.compiler.encoding : 编译源码时使用的编码格式

2引入外部jar

1)把引入的外部jar放入指定的位置。比如路径D:/workpace_myeclipse/WeiXinWeb1/lib下

  1. <properties>
  2. <project.build.sourceEncoding>UTF-</project.build.sourceEncoding>
  3. <maven.compiler.encoding>UTF-</maven.compiler.encoding>
  4.  
  5. <compiler.path>D:/workpace_myeclipse/WeiXinWeb1/lib</compiler.path>
  6.  
  7. </properties>

2)配置pom.xml的编译插件,指定需要编译的外部jar路径

  1. <pluginManagement>
  2. <plugins>
  3. <!-- compiler插件, 设定JDK版本 参考网页:http://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html
  4. http://www.cnblogs.com/fantiantian/p/3645715.html -->
  5. <plugin>
  6. <groupId>org.apache.maven.plugins</groupId>
  7. <artifactId>maven-compiler-plugin</artifactId>
  8. <version></version>
  9. <dependencies>
  10. <dependency>
  11. <groupId>org.codehaus.plexus</groupId>
  12. <artifactId>plexus-compiler-javac</artifactId>
  13. <version></version>
  14. </dependency>
  15. </dependencies>
  16. <configuration>
  17. <source>1.6</source>
  18. <target>1.6</target>
  19.  
  20. <encoding>UTF-</encoding>
  21. <compilerArguments>
  22. <extdirs>${compiler.path}</extdirs>
  23. </compilerArguments>
  24.  
  25. </configuration>
  26. </plugin>
  27. <plugin>
  28. <groupId>org.apache.maven.plugins</groupId>
  29. <artifactId>maven-resources-plugin</artifactId>
  30. <version>2.6</version>
  31. <configuration>
  32. <encoding>${project.build.sourceEncoding}</encoding>
  33. </configuration>
  34. </plugin>
  35. </plugins>
  36. </pluginManagement>
  37. </build>

3 打包的war名称设置

  1. <build>
  2. <!-- 打包的war名称设置 -->
  3. <finalName>xpxiaowu4java</finalName>
  4.  
  5. </build>

  综合例子

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion></modelVersion>
  4. <groupId>com.xinping</groupId>
  5. <artifactId>TestWeb</artifactId>
  6. <version>-SNAPSHOT</version>
  7. <packaging>war</packaging>
  8.  
  9. <!-- 为整个项目统一指定字符集 -->
  10. <properties>
  11. <project.build.sourceEncoding>UTF-</project.build.sourceEncoding>
  12. </properties>
  13.  
  14. <build>
  15. <!-- 打包的war名称设置 -->
  16. <finalName>TestWeb</finalName>
  17.  
  18. </build>
  19.  
  20. </project>

4 引入本地jar包

方法一

  加入当前工程需要引入本地的smgpGroup1-1.0.jar,那么在当前工程目录下新建文件夹lib,把smgpGroup1-1.0.jar放进入。然后在pom.xml中添加如下代码:

  1. <dependency>
  2. <groupId>smgpGroup1</groupId>
  3. <artifactId>smgpGroup1</artifactId>
  4. <version>1.0</version>
  5. <scope>system</scope>
  6. <systemPath>${project.basedir}/lib/smgpGroup1-1.0.jar</systemPath>
  7. </dependency>

注意:

  使用system scope, SystemPath.

方法二:

  直接在控制台输入以下命令,来加载本地jar包,格式如下:

  1. mvn install:install-file -Dfile=jar包的位置 -DgroupId=上面的groupId -DartifactId=上面的artifactId -Dversion=上面的version -Dpackaging=jar

  比如:加载本地文件 smgpGroup1-1.0.jar

  1. mvn install:install-file -Dfile=D:/taobaojar/sms/smgpGroup1-1.0.jar -DgroupId=smgpGroup1 -DartifactId=smgpGroup1 -Dversion=1.0 -Dpackaging=jar

二 Maven项目测试

1 编写业务类

在maven工程的 src/main/java 下编写算术业务逻辑,实现基本的加,减,乘和除功能。

  1. import java.util.Random;
  2.  
  3. public class Math {
  4.  
  5. public int add(int p1, int p2) {
  6. int result = p1 + p2 ;
  7. long startTime = System.currentTimeMillis();
  8. lazy();
  9. long endTime = System.currentTimeMillis();
  10. long consumeTime = endTime - startTime ;
  11. System.out.println(p1+"+" + p2 + "=" + result);
  12. System.out.println("消耗时间 "+ consumeTime + " 毫秒");
  13. return result;
  14. }
  15.  
  16. public int sub(int p1, int p2) {
  17. int result = p1 - p2 ;
  18. long startTime = System.currentTimeMillis();
  19. lazy();
  20. long endTime = System.currentTimeMillis();
  21. long consumeTime = endTime - startTime ;
  22. System.out.println(p1+"-" + p2 + "=" + result);
  23. System.out.println("消耗时间 "+ consumeTime + " 毫秒");
  24. return result;
  25. }
  26.  
  27. public int mul(int p1, int p2) {
  28. int result = p1 * p2 ;
  29. long startTime = System.currentTimeMillis();
  30. lazy();
  31. long endTime = System.currentTimeMillis();
  32. long consumeTime = endTime - startTime ;
  33. System.out.println(p1+"*" + p2 + "=" + result);
  34. System.out.println("消耗时间 "+ consumeTime + " 毫秒");
  35. return result;
  36. }
  37.  
  38. public int div(int p1, int p2) {
  39. int result = p1 / p2 ;
  40. long startTime = System.currentTimeMillis();
  41. lazy();
  42. long endTime = System.currentTimeMillis();
  43. long consumeTime = endTime - startTime ;
  44. System.out.println(p1+"/" + p2 + "=" + result);
  45. System.out.println("消耗时间 "+ consumeTime + " 毫秒");
  46. return result;
  47. }
  48.  
  49. public void lazy() {
  50. Random random = new Random();
  51. );
  52. try {
  53. Thread.sleep(lazyMils);
  54. } catch (InterruptedException e) {
  55. e.printStackTrace();
  56. }
  57. }
  58.  
  59. }

2 编写测试用例

  在src/test/java下编写单元测试,可以编写一个或多个测试用例。

  1. public class TestJunit extends TestCase {
  2.  
  3.     protected void setUp() throws Exception {        super.setUp();    }
  4.  
  5.     protected void tearDown() throws Exception {        super.tearDown();    }        public void testRunMath(){         System.out.println("---- testRun ----");         Math math = new Math();         math.add(3, 7);         math.sub(3, 7);         math.mul(13, 7);         math.div(13, 7);             }}

  maven运行单元测试, cd到mavn项目目录,运行以下命令,就在maven中执行Junit 的测试用例。

  1. mvn test

  执行maven命令后做所有的类和方法的测试并打印测试结果。

如果运行 mvn package 命令,会对项目自动进行编译和打包,也会执行junit的测试用例。如果想跳过自动执行测试用例,需要执行

  1. mvn package -DskipTests=true

3 生成测试报告

如果需要对整个项目的单元测试做一个统计,并生成测试报告,给管理人员提供项目质量的一个监控服务的。可以选择covertura插件,插件cobertura-maven-plugin提供单元测试整体覆盖率以及分支覆盖率的工具,给编写单元测试的开发者提供一个参考,看其中是否存在有重要代码遗漏的情况。

首先在maven项目的pom.xml 文件添加如下配置:

  1. <reporting>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.codehaus.mojo</groupId>
  5. <artifactId>cobertura-maven-plugin</artifactId>
  6. </plugin>
  7. </plugins>
  8. </reporting>

  在项目目录下运行以下命令即可生成target目录下生成site\cobertura目录,里面存放了所有的单元测试报告,组织形式如javadoc.其中index.html对所有包的覆盖率做了统计。

  1. mvn cobertura:cobertura

  点击任意包名,再点击类名,可以看到类中每一行代码是否被覆盖:

  如上图所示,左端行号上为绿色的表示应该被覆盖到的代码行,右边无颜色的为已覆盖的代码,红色的为未覆盖的代码,非常直观的提醒了开发者。
  需要提醒的是,cobertura只提供了行覆盖率的指标,但是对覆盖的代码质量如何它是无力判断的,不可过度推崇代码覆盖率,还应该和代码走查结合起来看覆盖的测试质量,再做总体判断为宜。

Maven学习笔记-02-Maven项目打包配置与测试的更多相关文章

  1. MAVEN学习笔记之Maven生命周期和插件简介(3)

    MAVEN学习笔记之Maven生命周期和插件简介(3) clean compile site三套生命周期相互独立. clean pre-clean 执行清理前的工作 clean 清理上一次构建生成的所 ...

  2. MAVEN学习笔记之Maven插件的应用(4)

    MAVEN学习笔记之Maven插件的应用(4) <build> <pluginManagement> <plugins> <plugin> <gr ...

  3. Maven学习笔记:Maven简介

    Maven的概念 Maven是基于项目对象模型(POM,Project Object Model),可以通过描述信息来管理项目的构建,报告和文档的软件管理工具 Maven除了以程序构建能力为特色之外, ...

  4. Maven学习笔记-03-Eclipse下maven项目在Tomcat7和Jetty6中部署调试

    现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...

  5. Maven学习笔记-04-Eclipse下maven项目在Tomcat7和Jetty6中部署调试

    现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...

  6. Maven 学习笔记(二)

    前面一文——Maven 学习笔记(一)中已经提到了 pom 的大部分配置,Maven 本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给创建来完成,每一个任务都会对应一个插件 ...

  7. Maven学习笔记—仓库

    Maven仓库 1 什么是Maven仓库 在Maven中,任何一个依赖.插件或者项目构建的输出,都可以成为构件,而Maven通常在某个位置统一的存储所有Maven项目共享的构件,这个统一的位置就是Ma ...

  8. MAVEN学习笔记之私服Nexus(2)

    MAVEN学习笔记之私服Nexus(2) 私有服务器搭建 Nexus www.snatype.org下载 snatype-work 是默认nexus存储nexus a:将bin添加到环境中 Admin ...

  9. MAVEN学习笔记之基础(1)

    MAVEN学习笔记之基础(1) 0.0 maven文件结构 pom.xml src main java package resource test java package resource targ ...

随机推荐

  1. 实例化Model的三种方式

  2. 解决: osx内置vpn连接后无法ping自己的vpn ip地址

    The route table looks like this after connected to the VPN: 10.20.1/24 10.20.11.147 UGSc 0 0 utun0 1 ...

  3. HTTPS实现原理

    HTTPS实现原理 HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版 ...

  4. 矩形覆盖-我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

    class Solution { public: int rectCover(int number) { ; ; ; ||number==) ; ) ; ;i<number+;i++){ res ...

  5. .NET性能调优之一:ANTS Performance Profiler的使用

    .NET性能调优系列文章 系列文章索引 .NET性能调优之一:ANTS Performance Profiler的使用 .NET性能调优之二:使用Visual Studio进行代码度量 .NET性能调 ...

  6. oracle.jbo.JboException: JBO-29000: JBO-29000: Bad version number in .class file

    我在本地run Page的时候报以下错误. oracle.jbo.JboException: JBO-29000: JBO-29000: Bad version number in .class fi ...

  7. JS 之匿名函数

    匿名函数以及闭包 匿名函数就是没有名字的函数.闭包是指有权访问另一个函数作用域中的变量的函数.创建闭包的常见方式是在一个函数的内部创建另一个函数.闭包会携带包含它的函数的作用域,因此会比其他函数占用更 ...

  8. [CareerCup] 13.6 Virtual Destructor 虚析构函数

    13.6 Why does a destructor in base class need to be declared virtual? 这道题问我们为啥基类中的析构函数要定义为虚函数.首先来看下面 ...

  9. Ajax基础之封装3

    今天接着我们上篇博文的栗子,现在我来扩大一下需求,之前是点击按钮取出新闻,现在要实现每隔一段事件进行新闻的更新.这个时候,肯定是加一个定时器,然后每隔一段事件,再进行一次Ajax请求,既然要经常用到A ...

  10. NFine框架的T4模板

    1.前言 前段时间在网上看到一个开源框架很好的.开源:ASP.NET MVC+EF6+Bootstrap开发框架,写代码就是比较比较麻烦,分层比较多,对于我这种偷懒的人就想到了写一个T4模板.不了解框 ...