我正在努力将我的测试类包含到 jar 包中,但没有运行它们。经过一番谷歌搜索,我试过mvn package -DskipTests
了,但我的测试类根本没有添加到 jar 中。
有任何想法吗?
我正在努力将我的测试类包含到 jar 包中,但没有运行它们。经过一番谷歌搜索,我试过mvn package -DskipTests
了,但我的测试类根本没有添加到 jar 中。
有任何想法吗?
如果您遵循 Maven 约定,那么您的测试类在src/test/java
. maven 从不将测试源子目录的内容打包到工件中。
你有(至少......)3个替代品:
使用“正常”来源进行测试
如果您真的希望将它们打包(为什么?),那么您应该将测试类放在src/main/java
它们将被视为正常源的位置,并将它们的编译类打包到工件中(通常是 *.jar)
你这样做会遇到各种各样的问题。例如,您的工件将对 junit 具有编译范围的依赖关系,这可能会干扰使用您的 jar 的其他模块。
此外,如果您这样做,您可能必须配置运行测试的 maven 插件以了解您的测试类(也就是说,如果您确实想在构建过程中运行测试)。例如surefire和failsafe插件。
配置 maven jar 插件以构建测试 jar
请参阅maven jar 插件文档。他们甚至有一个标题为“如何创建包含测试类的 jar”的部分 - 那里的说明将导致您的测试被打包到一个单独的 jar 文件中(这可能是一个更好的主意)。
直接使用程序集插件创建 jar
yuo 可以禁用 jar 插件的默认执行,而是将程序集插件的执行添加到 package 阶段以创建 jar。您将需要为此编写一个程序集描述符(不像上面的链接那样复杂)。这将使 yu 完全控制所生产的 jar 中包含的内容。最好从复制预定义程序集之一开始
如果它是当前项目的测试,那么它应该在src/test/java
并且它不会包含在主 jar 中。这是最常见的用例。如果您正在编写一个将在其他项目中使用的测试库,请将它们放入 中src/main/java
,并将其作为具有test
范围的依赖项添加到这些项目中。
如果您想在“自包含包”中分发所有内容,您可以通过版本控制存储库共享代码,或者使用 maven 程序集插件创建源 jar。