我在一个模块中有一个测试类,它在一个依赖模块中扩展了另一个测试类.如何将依赖项的测试代码导入到依赖模块的测试范围中?
为了文盲,我有两个模块,"模块一"是"模块二"的依赖.SubTestCase
是.的子类TestCase
.
module-one \src\test\java\com\example\TestCase.java module-two \src\test\java\com\example\SubTestCase.java
但是构建失败了,因为"module-one"的测试代码没有被导入"module-two",只是主代码.
您可以使用maven-jar-plugin的test-jar目标将测试代码部署为其他工件.它将附加到项目并使用分类器测试进行部署.
org.apache.maven.plugins maven-jar-plugin package test-jar
然后,其他项目可以通过在依赖项中声明测试分类器来引用测试jar.
name.seller.rich foo 1.0.0 tests test
关于Rich Seller的答案:使用
过时请参阅用户指南.
我正在使用maven 2.2.1和maven-jar-plugin 2.2,它需要切换
而不是
.
请注意,测试jar不是传递的,因此您可能需要显式添加它们.
... ... name.seller.rich foo 1.0.0 test-jar test
更新以下Mike Sokolov评论:
2014-03-28更新了maven 3的用户公会,请参阅上面的链接说的
请注意,本指南的先前版本建议使用
tests classifier>而不是 test-jar type>. 虽然目前适用于某些情况,但在调试JAR模块的反应器构建期间,如果调用安装之前的生命周期阶段,则它在任何使用者中都无法正常工作.在这种情况下,Maven不会从reactor构建的输出解析测试JAR,而是从本地/远程存储库解析测试JAR.显然,来自存储库的JAR可能已过时或完全丢失,导致构建失败(参见MNG-2045).
通常,除了常规modulename.jar文件之外,还可以通过构建和部署modulename-test.jar文件来解决此问题.您可以像常规工件一样将这些部署到repos.这并非完全无瑕疵,但对于代码工件来说效果不错.
然后,你会增加测试范围的依赖于测试罐到其他模块.
您还可以通过将"主"范围中的测试范围工件放在其自己的单独模块中来解决此问题,然后将其包含在其他模块的常规测试范围中.此解决方案在多模块构建中不能很好地工作,其中每个模块导出一些测试工件,因为您基本上获得2N模块.
当我们意识到类的数量相当有限并且存在与这两种解决方案相关的问题时,我们中的许多人实际上都放弃了这两种解决方案.我们只是将它们放在"主要"范围内的适当命名的包中.我只是忘记了为什么这两个第一个解决方案都很痛苦.