2

最近,我们的开发团队已从 Ant 构建文件转移到 Maven 以进行项目管理和构建周期。到目前为止,我对结果非常满意。由于我仍在掌握 Maven,因此我没有准备好应对不寻常的构建要求的答案。

现在我创建了一个新项目并决定立即开始进行适当的 Maven 设置。该项目实际上是一个 API,它使用 Java 服务提供者接口 (SPI) 来查找可插入的实现。实现可以以常规 META-INF/services/ factoryname方式注册自己。API 完成了大部分工作,但需要一个实现来获得任何真正有用的东西。

我现在的问题是:我该如何为此编写单元测试?想到了两种方法:

  1. 在测试包中创建一个简单的实现,构建它,然后将其用于单元测试。这似乎不适合 Maven 项目生命周期。

  2. 创建一个包含测试实现的单独项目。虽然这意味着我们的 SVN 存储库中的另一个条目,但它感觉像是更清洁的方法。该项目可以在主 API 项目的测试周期中构建并用作 jar。它可以在主项目中列为具有测试范围的依赖项工件。

在这两种情况下,都有一个基本问题……实现需要主 API 进行编译。毕竟,它必须有一个实现API抽象工厂的工厂类。但是为了正确构建主 API、测试阶段和所有内容,它需要测试实现。这实际上是一个循环依赖的问题。

在 Maven 中处理这个问题的好方法是什么?在 Ant 中,我只是在 API 和它的测试之间构建实现。如果有帮助的话,我会稍微滥用 SPI 来定位对象模型包,而不是单个实现。它不像 JAXP,更像是一种注册资源的方式。

4

1 回答 1

2

您可以使用maven-jar-plugin生成 test-jar 作为正常构建过程的一部分。这样,您可以一步生成两个工件。

于 2011-03-04T17:21:08.730 回答