Skip to content
springside edited this page Mar 2, 2012 · 25 revisions

Maven已经进入成熟期,没什么大的变化了,值得一提的地方有两个:

1.被Sonatype主管后,中央仓库用Nexus管起来了。

http://search.maven.org 就可以方便的找到jar。另外和Sun,Hibernate几家Repository的关系也好了,所有的jar都可以在中央库找到,不需要再同时指向多个Repository。

2.测试插件长进了

2.1 区分单元测试与集成测试

原本Maven一直没有很好的区分单元测试和集成测试的用例。因为集成用例依赖可能很多,执行又慢,很多时候我们都不要Skip掉它们。

现在的解决方法是,原来的surefire插件继续负责在test阶段测试Test.java的单元测试用例。 新增failsafe插件负责在integration-test阶段(package阶段之后)执行IT.java的集成测试。

2.2 Skip Test

mvn install -Dmaven.test.skip=true 最狠的,连测试用例的编译都省掉了。 mvn install -DskipTests 不执行所有测试。 mvn install -DskipITs 只不执行集成测试。

2.3 分组执行

TestNG的皇牌功能,可以将用例分成几组,比如超慢的Nightly组放到半夜才运行。 Junit4后来的新版也支持一个@Category的定义,但是,必须在一个TestSuite维护所有Case,或者使用一个叫ClassPathSuite的项目。

在Maven的测试插件里没这个麻烦,它会自行读取@Category标签来过滤。

pom.xml

    <plugin>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.11</version>
      <configuration>
        <groups>com.mycompany.FastTests</groups>
      </configuration>
    </plugin>

TestCase中的testSlow()将不会被执行。

    public class AppTest {
      @Test
      @Category(SlowTests.class)
      public void testSlow() {
        System.out.println("slow");
      }

      @Test
      @Category(FastTests.class)
      public void testFast() {
        System.out.println("fast");
      }
    }

##3.脚本?脚本!! 虽然Maven的理想很丰满,什么都是插件,什么都是阶段,但实际项目还是有很多需要脚本干点小事情的时候,比如springside里更新本地测试数据库。这时候有几种选择,一种是用ant脚本,需要依赖包的时候用ant的maven插件,另一种是maven里用antrun插件。

因为Ant的maven插件老是被忘记下,所以springside里选择了用maven的antrun插件,另外也不搞什么阶段了,定义出独立的profile,直接运行goal: mvn -Prefreshdb antrun:run

返回参考手册