一 Maven项目打包配置
1 为整个项目统一指定字符集
<properties> <project.build.sourceEncoding>UTF-</project.build.sourceEncoding> <maven.compiler.encoding>UTF-8</maven.compiler.encoding> </properties>
project.build.sourceEncoding: 用来定义资源文件的编码格式
maven.compiler.encoding : 编译源码时使用的编码格式
2引入外部jar
1)把引入的外部jar放入指定的位置。比如路径D:/workpace_myeclipse/WeiXinWeb1/lib下
<properties> <project.build.sourceEncoding>UTF-</project.build.sourceEncoding> <maven.compiler.encoding>UTF-</maven.compiler.encoding> <compiler.path>D:/workpace_myeclipse/WeiXinWeb1/lib</compiler.path> </properties>
2)配置pom.xml的编译插件,指定需要编译的外部jar路径
<pluginManagement> <plugins> <!-- compiler插件, 设定JDK版本 参考网页:http://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html http://www.cnblogs.com/fantiantian/p/3645715.html --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version></version> <dependencies> <dependency> <groupId>org.codehaus.plexus</groupId> <artifactId>plexus-compiler-javac</artifactId> <version></version> </dependency> </dependencies> <configuration> <source>1.6</source> <target>1.6</target> <encoding>UTF-</encoding> <compilerArguments> <extdirs>${compiler.path}</extdirs> </compilerArguments> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.6</version> <configuration> <encoding>${project.build.sourceEncoding}</encoding> </configuration> </plugin> </plugins> </pluginManagement> </build>
3 打包的war名称设置
<build> <!-- 打包的war名称设置 --> <finalName>xpxiaowu4java</finalName> </build>
综合例子
<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></modelVersion> <groupId>com.xinping</groupId> <artifactId>TestWeb</artifactId> <version>-SNAPSHOT</version> <packaging>war</packaging> <!-- 为整个项目统一指定字符集 --> <properties> <project.build.sourceEncoding>UTF-</project.build.sourceEncoding> </properties> <build> <!-- 打包的war名称设置 --> <finalName>TestWeb</finalName> </build> </project>
4 引入本地jar包
方法一
加入当前工程需要引入本地的smgpGroup1-1.0.jar,那么在当前工程目录下新建文件夹lib,把smgpGroup1-1.0.jar放进入。然后在pom.xml中添加如下代码:
<dependency> <groupId>smgpGroup1</groupId> <artifactId>smgpGroup1</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${project.basedir}/lib/smgpGroup1-1.0.jar</systemPath> </dependency>
注意:
使用system scope, SystemPath.
方法二:
直接在控制台输入以下命令,来加载本地jar包,格式如下:
mvn install:install-file -Dfile=jar包的位置 -DgroupId=上面的groupId -DartifactId=上面的artifactId -Dversion=上面的version -Dpackaging=jar
比如:加载本地文件 smgpGroup1-1.0.jar
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 下编写算术业务逻辑,实现基本的加,减,乘和除功能。
import java.util.Random; public class Math { public int add(int p1, int p2) { int result = p1 + p2 ; long startTime = System.currentTimeMillis(); lazy(); long endTime = System.currentTimeMillis(); long consumeTime = endTime - startTime ; System.out.println(p1+"+" + p2 + "=" + result); System.out.println("消耗时间 "+ consumeTime + " 毫秒"); return result; } public int sub(int p1, int p2) { int result = p1 - p2 ; long startTime = System.currentTimeMillis(); lazy(); long endTime = System.currentTimeMillis(); long consumeTime = endTime - startTime ; System.out.println(p1+"-" + p2 + "=" + result); System.out.println("消耗时间 "+ consumeTime + " 毫秒"); return result; } public int mul(int p1, int p2) { int result = p1 * p2 ; long startTime = System.currentTimeMillis(); lazy(); long endTime = System.currentTimeMillis(); long consumeTime = endTime - startTime ; System.out.println(p1+"*" + p2 + "=" + result); System.out.println("消耗时间 "+ consumeTime + " 毫秒"); return result; } public int div(int p1, int p2) { int result = p1 / p2 ; long startTime = System.currentTimeMillis(); lazy(); long endTime = System.currentTimeMillis(); long consumeTime = endTime - startTime ; System.out.println(p1+"/" + p2 + "=" + result); System.out.println("消耗时间 "+ consumeTime + " 毫秒"); return result; } public void lazy() { Random random = new Random(); ); try { Thread.sleep(lazyMils); } catch (InterruptedException e) { e.printStackTrace(); } } }
2 编写测试用例
在src/test/java下编写单元测试,可以编写一个或多个测试用例。
public class TestJunit extends TestCase { protected void setUp() throws Exception { super.setUp(); } 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 的测试用例。
mvn test
执行maven命令后做所有的类和方法的测试并打印测试结果。
如果运行 mvn package 命令,会对项目自动进行编译和打包,也会执行junit的测试用例。如果想跳过自动执行测试用例,需要执行
mvn package -DskipTests=true
3 生成测试报告
如果需要对整个项目的单元测试做一个统计,并生成测试报告,给管理人员提供项目质量的一个监控服务的。可以选择covertura插件,插件cobertura-maven-plugin提供单元测试整体覆盖率以及分支覆盖率的工具,给编写单元测试的开发者提供一个参考,看其中是否存在有重要代码遗漏的情况。
首先在maven项目的pom.xml 文件添加如下配置:
<reporting> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>cobertura-maven-plugin</artifactId> </plugin> </plugins> </reporting>
在项目目录下运行以下命令即可生成target目录下生成site\cobertura目录,里面存放了所有的单元测试报告,组织形式如javadoc.其中index.html对所有包的覆盖率做了统计。
mvn cobertura:cobertura
点击任意包名,再点击类名,可以看到类中每一行代码是否被覆盖:
如上图所示,左端行号上为绿色的表示应该被覆盖到的代码行,右边无颜色的为已覆盖的代码,红色的为未覆盖的代码,非常直观的提醒了开发者。
需要提醒的是,cobertura只提供了行覆盖率的指标,但是对覆盖的代码质量如何它是无力判断的,不可过度推崇代码覆盖率,还应该和代码走查结合起来看覆盖的测试质量,再做总体判断为宜。