到目前为止,一切都很顺利。你已经知道了Maven是什么,以及如何使用它从头开始构建一个项目。你也掌握了如何生成项目的文档,以及如何在 Eclipse中导入项目。
为了继续下面的讨论,我们从本书的第1部分中获取源代码,并且把它保存在src/main/java目录中,Maven默认将源代码保存在这个目录中。我们也为示例项目获取了相应的测试,并且把测试保存在src/testjava目录中(这也是一项约定)。现在,是调用Maven并指示它编译源代码和测试并执行测试的时候了。
但是,首先我们需要清理之前对项目的各种操作:
mvn clean
这将使得 Maven经历了Clean阶段,并且调用了所有添加到这个阶段的插件,尤其是maven-clean-plugin插件,这个插件将会删除生成的站点所在的目标/目录。
像任何其他构建系统一样,Maven被用来构建你的项目——在一个归档中编译你的软件和封装包。正如我们在本章开头提到的那样,在 Maven中的每一个任务通过一个相应的插件以及项目描述文件的<plugins>部分中所出现的插件配置来完成。为了编译源代码,你唯一所要做的事情就是在命令行中调用Compile阶段:
mvn eompile
这将使得 Maven会执行所有被添加到 Compile阶段的插件(尤其是它会调用maven-compiler-plugin插件)。但是在调用Compile阶段之前,就像上文中提到的那样,Maven将经历Validate阶段,而且会下载所有在pom.xml文件中列出的依赖库,并且会把它们都添加到项目的类路径中。一旦这个编译过程结束,那么你就可以查看目标/类/目录,并且在此你应该也会看到编译类。
接下里我们将要尝试配置 Compiler 插件。注意到了前一个句子中的粗体字吗?是的,没错——我们要摆脱“约定优于配置”原则,并且要试着配置Compiler插件。
到目前为止,我们已经使用了常见的Compiler插件,而且一切运行正常。但是,如果我们需要将-source和-target属性添加到编译器的调用中,以便为JVM 的某个具体版本生成类文件,那要怎么做?我们应该将代码10.7中的几行代码添加到构建文件的<build>部分中。
这是一个通用方法,可以用来配置每一个 Maven插件。你要在<build>部分中添加一个<plugins>部分,然后你就可以在此处列出了每一个你想要配置的插件。在以上示例中,列出的插件是maven-compiler-plugin。接下来你需要在插件的<configuration>部分添加配置参数。你可以从 Maven的站点上获取每个插件的参数列表。
正如你在代码10.7中的maven-compiler-plugin 插件的声明中所看到的那样,我们并没有配置groupId参数。这是因为maven-compiler-plugin插件是核心的Maven插件之一,而核心的 Maven插件都带有一个名为org.apache.maven.plugins的groupId,并且就像我们在本章开头所提到的那样,所有带有这么一个groupId的插件都可以跳过这一步。
Ant使用javac任务来编译所有我们选定的测试,Maven以同样的方式使用maven-compiler-plugin来编译所有位于src/main/java/目录中的源代码。同样的情况也会发生在对项目进行单元测试的过程中,Ant使用junit任务并且执行我们选定的测试用例,而Maven使用——猜一猜是什么?——一个插件。执行单元测试的这个 Maven 插件叫做maven-surefire-plugin。注意前一个句子中的黑体部分,Surefire插件被用来执行代码的单元测试,但是这些单元测试并不一定要是JUnit测试。还可以使用一些其他的单元测试框架,并且 Surefire插件也能够执行它们的测试。
启用maven-surefire-plugin插件的常规方法非常简单,你唯一所要做的是调用Maven的Test阶段。采用这个方法,Maven将首先调用所有应该在Test阶段之前出现的阶段(Validate阶段和Compile阶段),然后再调用所有添加到Test 阶段的插件,从而调用了maven-surefire-plugin。要这样做的话,可以输入以下命令:
mvn elean tegt
Maven首先清理目标/目录,然后编译源代码和测试,最后执行所有位于src/test/java目录中的测试(要牢记这项约定)。输出结果应该类似于如图10.3所示的内容。
图10.3 使用Maven2执行JUnit测试
这非常好,但是,如果我们不想执行所有的测试,那么该怎么做?如果我们只想执行其中的某一个测试用例,又该怎么做?这就要用到所谓的非常规方法,这样我们就需要配置maven-surefire-plugin来实现它。幸运的是,这里提供了一个插件参数,专门用来指定我们想要执行的测试用例的模式。Surefire插件的配置可以采用与配置Compiler插件相同的方式来实现,如代码10.8所示。
在以上代码中可以发现,我们已经指定了includes参数,以表明我们只希望执行与指定模式匹配的测试用例。是的,但是我们如何知道maven-surefire-plugin 会接受什么参数呢?恐怕没有人能够将这些参数都熟记于心,但是你可以随时参考Maven 官方网站(http:/maven.apache.org/)上的maven-surefire-plugin文档(以及任何其他插件文档)。
在前面的章节中可以看到,Ant有一个任务,专门用来从JUnit的XML输出信息中生成美观易读的报告。同样的情况也适用于Maven。因为在默认情况下,Maven 会生成纯文本格式和XML格式的输出信息(根据约定,把它保存在目标/Surefire报告目录中),所以我们不需要为了生成JUnit测试的HTML 的 Surefire报告进行任何其他的配置。
你可以已经猜到,生成HTML报告的这项工作是由Maven的一个插件来完成的。这个插件叫做maven-surefire-report-plugin,而且在默认情况下,它并不会被添加到任何一个我们已知的核心阶段(许多用户并不是在每次构建软件时都需要 HTML报告)。这就意味着我们无法通过运行某一个阶段来调用它(就像我们使用Compiler插件和 Surefire插件所做的那样),但是我们却不得不从命令行中直接调用它:
mvn surefire-report:report
当我们这样做时,Maven将试图编译源文件和测试用例,然后再调用Surefire插件来生成纯文本格式和XML 格式的测试输出信息。在此之后,Surefire报告插件将会试着把保存在 target/surefire-reports/目录中的所有XML 报告都转换成一份HTML 报告,这份
HTML 报告将会保存在 targetlsite目录中(记住,关于这个目录的约定是,用于保存这个项目所有生成的文档,并且HTML报告也被认为是文档)。
如果你尝试着打开生成的 HTML报告,它应该比较类似于如图10.4所示的效果。
图10.4 由 Maven的 Surefire报告插件生成的HTML 报告
在下一节中,我们将讨论一些Maven的不足之处。
上一篇:《JUnit实战》第10章 从Maven2中运行JUnit 测试(续2)
下一篇:已经是最后一篇