如何在 Maven/Surefire unittest run "mvn test" 期间使清单可用?
我有一个开源项目,我正在从 Ant 转换为 Maven,包括它的单元测试。这是 Maven 项目的项目源存储库:http: //github.com/znerd/logdoc
我的问题与称为“基础”的主要模块有关。该模块有一个单元测试,用于测试getVersion()
类中静态方法的行为org.znerd.logdoc.Library
。此方法返回:
Library.class.getPackage().getImplementationVersion()
该getImplementationVersion()
方法返回清单文件中的设置值。到现在为止还挺好。我过去对此进行了测试,它运行良好,只要清单确实在路径的类路径上可用META-INF/MANIFEST.MF
(在文件系统上或在 JAR 文件内)。
现在我的挑战是当我运行单元测试时清单文件不可用:
mvn test
Surefire 运行单元测试,但我的单元测试失败并显示一条消息,指示Library.getVersion()
返回null
.
当我想检查 JAR 时,我发现它甚至还没有生成。在将资源添加到类路径之前, Maven/Surefire 针对类运行单元测试。
进一步调查显示 Surefire 在临时目录中生成自己的 JAR 文件,例如
/private/var/folders/TR/TREvj1wIHYyAcUy-xmc3UU+++TI/-Tmp-/surefirebooter7448562488934426857.jar
然后使用这个 JAR 加载 Library 类。这个 JAR 不包含我停留在src/main/resources
. 所以放一个META-INF/MANIFEST.MF
文件也行不通。
那么我如何告诉 Surefire 让我的META-INF/MANIFEST.MF
文件从与该类相同的类加载器中可用Library
。
请注意,我在 Mac OS X 10.6.2 上使用 Maven 2.2.0、Java 1.6.0_17 和 JUnit 4.8.1。