gpt4 book ai didi

spring-boot - 从 Spring Boot 应用程序启动的 Cucumber 在 jar 中找不到胶水类

转载 作者:行者123 更新时间:2023-12-01 05:49:59 33 4
gpt4 key购买 nike

我们有一个 Spring Boot 应用程序,我们想从这个应用程序中开始执行 Cucumber 功能。
每当用户单击 spring 应用程序中的按钮时,调用就会进入一个类( CucumberTestService ),我们开始执行我们的 Cucumber 功能。

以下是我们感兴趣的源代码结构:

    - src
-main
-com
-bino
-panel
-server
-reference
-cucumber
-steps
-SendMessagesDefs.java
-CucumberTestService.java

我们在 CucumberTestService 中准备参数:
   String[] args = new String[]{
"--strict",
"--glue",
"com.bino.panel.server.reference.cucumber.steps",
"--plugin",
"pretty",
"/CUCUMBER-FEATS/" + feature + ".feature",
"--plugin",
"json:" + reports_path + "/cucumber-reports-" + feature + "/Cucumber.json",
"--plugin",
"junit:" + reports_path + "/cucumber-reports-" + feature + "/Cucumber.xml",
"--plugin",
"html:" + reports_path + "/cucumber-reports-" + feature,
"--plugin",
"usage:" + reports_path + "/cucumber-reports-" + feature + "/cucumber-usage.json",
"--plugin",
"pretty:" + reports_path + "/cucumber-reports-" + feature + "/cucumber-pretty.txt"
};

然后我们尝试以下列方式启动它 - 与它在 cucumber.api.cli.Main 中启动的完全一样:
    run(args, Thread.currentThread().getContextClassLoader());

现在这在我们的 IDE(Eclipse 和 IntelliJ)中工作得很好,但是当我们将它打包到一个 Spring Boot jar 中时,它就停止工作了。

对于部署,整个应用程序捆绑在一个 jar 中,并具有以下结构:
    - BOOT-INF
-classes
-com
-bino
-panel
-server
-reference
-cucumber
-steps
-lib
- META-INF
MANIFEST.ML
- org
-springframework
-boot
-loader

在尝试执行它时,Cucumber 似乎无法找到在glue 参数中定义的实现:
1 Scenarios (1 undefined)
7 Steps (7 undefined)
0m0.000s

我们花了相当多的时间调查这个问题,得出的结论是,Cucumber 无法找到
此路径中的类 "com.bino.panel.server.reference.cucumber.steps"从 Spring Boot jar 执行它时。
但是当从 IDE(Eclipse、IntelliJ)执行相同的代码时,它们会被正确找到。

关于我们如何“帮助” Cucumber & Spring 在 Spring Boot jar 中找到胶水类的任何建议?

使用的 Jar 版本(取自我们的 build.gradle 文件):
    - compile group: 'io.cucumber', name: 'gherkin', version: '6.0.14'
- compile(group: 'info.cukes', name: 'cucumber-java8', version: '1.2.5')
- compile(group: 'io.cucumber', name: 'cucumber-junit', version: '4.2.6')
- compile(group: 'io.cucumber', name: 'cucumber-picocontainer', version: '2.4.0')

Spring Boot 版本是 2.1.3
任何帮助/建议/想法都非常感谢!非常感谢!

最佳答案

使用 Gradle,将 Cucumber 工件(即特性、步骤实现等)放入一个子项目中,例如 my-cucumber-tests ,与 Spring Boot 应用程序分开。

然后在 Spring Boot 应用程序的 build.gradle 中,添加:

bootJar {
// make backend, features, and steps available to Cucumber at runtime
requiresUnpack '**/my-cucumber-tests-*.jar', '**/cucumber-java-*.jar'
}

关于spring-boot - 从 Spring Boot 应用程序启动的 Cucumber 在 jar 中找不到胶水类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55707509/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com