如何在不运行测试类的情况下将测试类打包到jar中?

时间:2013-05-04 14:43:35

标签: java unit-testing jar maven-2

我正在努力将我的测试类包含在jar包中,但没有运行它们。经过一些谷歌搜索后,我尝试了mvn package -DskipTests,但我的测试类根本没有添加到jar中。

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

如果您遵循maven约定,那么您的测试类位于src/test/java下。 maven永远不会将测试源子目录的内容打包到工件中。

你有(至少......)3个替代方案:

使用“正常”来源进行测试

如果你真的想要打包它们(为什么?)那么你应该把测试类放在src/main/java下,它们将被视为普通源,它们的编译类被打包到工件中(通常* .jar)

你不会遇到各种各样的问题。例如,你的工件将在junit上具有编译范围的依赖关系,这可能会干扰使用你的jar的其他模块。

另外,您可能必须配置运行测试的maven插件,以便在执行此操作时了解您的测试类(即,如果您确实希望在构建过程中运行测试)。例如,surefire和failafe插件。

配置maven jar插件以构建测试jar

请参阅maven jar plugin documentation。他们甚至有一个标题为“如何创建一个包含测试类的jar”的部分 - 这些说明将导致您的测试被打包到一个单独的jar文件中(这可能是一个更好的主意)。

直接使用程序集插件创建jar

yuo可以disable the default execution of the jar plugin而是将assembly plugin的执行添加到包阶段以创建jar。你需要为此写一个assembly descriptor(不像上面的链接那么复杂)。这将使yu完全控制生产的jar中包含的内容。最好先复制一个predefined assemblies

答案 1 :(得分:2)

如果它是当前项目的测试,那么它应该在src/test/java中,并且它不会包含在主jar中。这是最常见的用例。如果您正在编写将在其他项目中使用的测试库,请将它们放在src/main/java中,并将其作为具有test范围的依赖项添加到这些项目中。

如果要将所有内容分发到“自包含”中,可以通过版本控制存储库共享代码,也可以使用maven程序集插件创建源jar。