java - 为什么 Cucumber.options 在 MAVEN_OPTS 环境变量中不起作用?
问题描述
我正在查看一个 Gitlab CI 脚本,该脚本在MAVEN_OPTS
环境变量中定义了一些标志:
## etc...
variables:
MAVEN_CLI_OPTS: "-s .m2/settings.xml"
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository -Dspring.profiles.active=acc"
test-application:
image: maven:3.6-jdk-11
stage: test-run
script:
- mvn $MAVEN_CLI_OPTS test $MAVEN_OPTS -DCucumber.options='--glue com/example/app'
## etc...
有了上面的脚本,管道就成功了。
但是,我注意到当我尝试在变量中移动-DCucumber.options='--glue com/example/app'
标志时,例如MAVEN_OPTS
## etc...
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository -Dspring.profiles.active=acc -DCucumber.options='--glue com/example/app'"
## etc...
script:
- mvn $MAVEN_CLI_OPTS test $MAVEN_OPTS
## etc...
管道现在失败并显示以下消息:
Error: Could not find or load main class com.example.app'
Caused by: java.lang.ClassNotFoundException: com.example.app'
我能够在没有 Gitlab 的情况下在本地复制它,所以我放弃了它的问题。
据我了解,MAVEN_OPTS
Maven 在设置 JVM 进程期间使用了该变量,因此我可以在其中为所有 Maven 命令添加一些标志,而无需稍后显式添加它们。所以,从我的角度来看,两个脚本应该是等价的。
我的理解有问题吗?如果是这样,有人可以向我解释这里出了什么问题吗?谢谢!
解决方案
您可以使用以下命令重现此错误:
$ java com/example/App
Error: Could not find or load main class com.example.App
Caused by: java.lang.ClassNotFoundException: com.example.App
这表明 GitlabCI 或 Maven 正在重新解释命令行选项。看看MSHARED-750和cucumber-jvm/#596可能是 Maven。
如果您使用的是 Cucumber v5+,则应使用cucumber.glue=com.example.app
而不是cucumber.options
. 请参阅属性、环境变量、系统选项。或者,对于 v5+,您可以选择根本不提供任何胶水,因为 Cucumber 默认会从类路径根目录中搜索胶水类。
推荐阅读
- java - QAF:com.qmetry.qaf.automation.step.StepInvocationException:无法实例化 JavaStep:
- c# - 将附件上传到 Dynamics CRM 时设置相关参考时出现问题
- sql - 在 cassandra 和 sql 中连接表
- javascript - 如何在块引用文本 HTML 旁边添加星号?
- asp.net - 我正在尝试在我的索引页面中包含两个模型
- go - 如果在循环中调用父函数,是否会复制从父函数传递到作为 goroutine 运行的闭包的参数?
- python - S3ResponseError:使用 boto 进行多部分上传期间出现 400 Bad Request
- php - Laravel 6.2:Laravel“与”不符合条件
- cassandra - 在 cassandra 中拥有两个较小的单独表格是否比一张大桌子更好?
- c# - 使用 Azure 功能将文件下载并存储到 Azure