我有一个 Maven 构建过程,将可执行 jar 及其测试发布到 Nexus。我有另一个需要访问这些 jars(可执行文件 + 测试)并运行测试的 maven 构建过程。
我该怎么做?到目前为止,只有当 jar 被分解为类文件时,我才设法做到这一点。我是 Maven 新手,完全迷失在文档中。
我有一个 Maven 构建过程,将可执行 jar 及其测试发布到 Nexus。我有另一个需要访问这些 jars(可执行文件 + 测试)并运行测试的 maven 构建过程。
我该怎么做?到目前为止,只有当 jar 被分解为类文件时,我才设法做到这一点。我是 Maven 新手,完全迷失在文档中。
Surefire 和 failsafe 目前不支持从 jar 中运行测试。
这主要是无法识别测试的情况。
有两种方法可以让测试运行。
使用列出来自 test-jar 的所有测试的测试套件。因为测试套件将在 src/test/java 中(更准确地说是编译成 target/test-classes)将被拾取并且套件中的所有测试都将由 Surefire/failsafe 运行(假设套件类名称匹配包含规则:以 Test 开头或结尾)
使用 maven 依赖插件的 unpack-dependencies 目标将 test-jar 解压到 target/test-classes 中(这是骇客的尖叫,但效果很好)
第一个选项的主要问题是您不能轻松地从套件中只运行一个测试,并且您需要从 test-jar 中命名每个测试
出于这个原因,我倾向于选择选项 2……还有一个额外的好处是,选项 2 并不意味着编写代码来解决构建工具插件中的限制……你越少将自己锁定在特定的构建工具中,更好的恕我直言
这实际上适用于较新的surefire和failsafe插件,请参阅相关问题:
因此,您不再需要解压 jar,只需提供要扫描的依赖项的组和工件 ID(这适用于“main jar”依赖项以及“test-jar”依赖项)
附加的 test-jar 可以用作其他项目中的常用依赖项,它支持在测试区域中重用代码,但您不能从 jar 中运行测试。如果您真的需要解决方案,您必须至少编写一个套件(等等?)才能从 jar 开始测试。