通过Spring Boot jar运行Cucumber测试报错,如何在执行前解压应用?
手动解压执行方案(临时调试场景)
- 首先执行解压命令,将Spring Boot可执行jar解压到本地目录
Linux/Mac命令:unzip eq-data-0.0.1.jar -d eq-data-unpacked
Windows PowerShell命令:Expand-Archive -Path eq-data-0.0.1.jar -DestinationPath eq-data-unpacked - 进入解压后的目录:
cd eq-data-unpacked - 执行测试命令,注意Windows环境下类路径分隔符需替换为
;java -cp "BOOT-INF/classes:BOOT-INF/lib/*" io.cucumber.core.cli.Main \ --glue com.xyz \ --plugin pretty \ classpath:features
构建时自动配置解压方案(CI/CD流程场景)
不需要全量解压整个jar,只需要在Spring Boot打包插件中配置Cucumber需要扫描的依赖包为启动时自动解压即可:
Maven配置
修改pom.xml中spring-boot-maven-plugin配置:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <requiresUnpack> <!-- 配置所有Cucumber相关依赖,以及需要被扫描的业务包所在的jar --> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-java</artifactId> </dependency> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-spring</artifactId> </dependency> <dependency> <groupId>com.xyz</groupId> <artifactId>xyz-service-starter</artifactId> </dependency> </requiresUnpack> </configuration> </plugin>
配置完成后重新打包生成的jar,可直接用java -jar命令运行,不需要手动解压。
Gradle配置
修改build.gradle配置:
bootJar { requiresUnpack 'io.cucumber:cucumber-java', 'io.cucumber:cucumber-spring', 'com.xyz:xyz-service-starter' }
自动解压执行脚本方案(批量运行场景)
可以编写shell脚本自动完成解压、执行、清理全流程:
#!/bin/bash # 替换为你的实际jar名称 JAR_NAME="eq-data-0.0.1.jar" UNPACK_TMP_DIR="cucumber-run-tmp" # 清理旧临时目录 rm -rf ${UNPACK_TMP_DIR} mkdir ${UNPACK_TMP_DIR} # 静默解压jar unzip -q ${JAR_NAME} -d ${UNPACK_TMP_DIR} # 进入目录执行测试 cd ${UNPACK_TMP_DIR} java -cp "BOOT-INF/classes:BOOT-INF/lib/*" io.cucumber.core.cli.Main \ --glue com.xyz \ --plugin pretty \ classpath:features # 清理临时目录 cd .. rm -rf ${UNPACK_TMP_DIR}
注意:如果你的测试类、Feature文件没有打包入主jar,需要在-cp参数中额外添加对应文件所在的目录路径,保证Cucumber可以正常扫描到资源。
内容的提问来源于stack exchange,提问作者Itsik Mauyhas
相关产品推荐
相关产品推荐

