我正在使用 junit 运行一组测试,并为它创建了一个 maven 项目。我使用 surefire 插件来运行测试。为了方便起见,我想将这个项目打包为一个自我可执行的 jar。所以我将所有测试类放在 src/main/java 目录中,推荐使用 maven shade 插件生成 uber jar。我创建了一个带有 main 方法的类,并使用 maven 调用程序来执行我的测试。当我使用我的 ide 运行 main 方法时,测试会完美执行。但是,在我将其打包为 jar 之后,调用者无法找到 pom.xml。如果我将 pom.xml 的副本放在与 jar 相同的目录中,则会调用 maven 但它无法执行测试,因为 surefire 无法找到测试。
我很想知道是否有解决方案,或者是否有更好的方法来实现我的目标。
@khmarbaise 和其他试图帮助我的人,让我更详细地描述一下我的场景。让我们以任何 api 为例,例如 lastfm api,我将为每个 api 端点编写类,每个类中的每个方法都是一个测试。我使用 junit 来执行测试。我使用一个名为 serenity bdd 的 junit 包装器,它可以帮助我构建测试并生成汇总报告。maven 目标 serenity:aggregate 将生成所有测试的汇总报告。我正在使用 maven 调用程序使用 surefire 插件运行测试,然后使用 serenity 聚合测试。在我的 Eclipse 项目中,我只是创建了一个 Maven 运行配置并提供了 Maven 目标。否则我会使用终端从我的项目基目录运行 maven。除了我的类文件,我还有几个资源,比如作为参数测试输入的 csv 文件 一个日志文件夹,其中保存了所有生成的日志文件和其他用于测试文件上传 api 的示例文件。我觉得将所有这些打包为一个 jar 并让我的开发人员将此 jar 添加为依赖项并运行一个简单的脚本,该脚本在每次创建和部署构建时运行该 jar 会很简单。在 eclipse 或命令行的情况下,获取用于调用 maven 的 pom 文件是微不足道的,但当它在包内部时就不是那么直接了。