我正在努力将我的测试类包含在jar包中,但没有运行它们。经过一些谷歌搜索后,我尝试了mvn package -DskipTests
,但我的测试类根本没有添加到jar中。
有什么想法吗?
答案 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。