将 cucumber-java 从 info.cukes 的 1.2.4 更新到 cucumber.io 的 4.2.2 抛出 import Given(Or When/Then) cannot be resolved 错误
Updating cucumber-java from 1.2.4 of info.cukes's to 4.2.2 of cucumber.io throwing import Given(Or When/Then) cannot be resolved error
作为更新的一部分,我不得不从 info.cukes 的 cucumber-java 版本 1.2.4 迁移到 io.cucumber 的 cucumber-java版本 4.2.2,但是 运行 成功使用旧版本的黄瓜的代码开始抛出错误,显示无法解析导入 cucumber.api.java.en.Given(或 When/Then)
下面是开始执行的黄瓜 class
{
@RunWith(Cucumber.class)
@CucumberOptions(features = "classpath:features/functional/",
glue = {"com.jacksparrow.automation.steps_definitions.functional" },
tags = { "@guest_search_in_progress" },
plugin = { "pretty","json:target/cucumber-json/cucumber.json",
"junit:target/cucumber-reports/Cucumber.xml", "html:target/cucumber-
reports"},
strict = false,
dryRun = false,
monochrome = true)
public class FunctionalRunCuke {
}
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-core</artifactId>
<version>4.2.2</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>4.2.2</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>4.2.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-jvm-deps</artifactId>
<version>1.0.6</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>gherkin</artifactId>
<version>6.0.14</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.10.19</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-testng</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-picocontainer</artifactId>
<version>2.1.0</version>
<scope>test</scope>
</dependency>
}
请建议我应该如何解决这个问题
首先,删除 cucumber-jvm-deps
和 gherkin
依赖项,因为它们可能会干扰 cucumber 4.2.2 的传递依赖项。
其次,如果您想将 Cucumber 与 JUnit 一起使用,您还需要导入 Junit(v4.12;因为 Cucumber 尚不支持 v5)。并且您需要删除 cucumber-testng
依赖项(反之亦然,如果您想使用 TestNg,请删除 cucumber-junit
并且您可能需要 TestNg 依赖项)。
最后,如果它们的位置在新的 Cucumber 版本中发生了变化,您可能需要更新导入语句。
请在 POM 中使用以下依赖项并根据您的框架要求添加 JUnit/TestNG 依赖项。(只需将 v.4.2.3 更改为 V.4.2.2)
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>4.2.3</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>4.2.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>datatable</artifactId>
<version>1.1.12</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-testng</artifactId>
<version>4.2.3</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-picocontainer</artifactId>
<version>4.2.3</version>
<scope>test</scope>
</dependency>
问题是因为使用了一组错误的黄瓜依赖项。以下是迁移到 4.0.0 时应使用的一组正确的 Cucumber 依赖项,请注意 -
1.所有的Cucumber依赖应该是同一个版本。
2. 根据您的框架要求使用 JUnit 或 TestNG。
作为更新的一部分,我不得不从 info.cukes 的 cucumber-java 版本 1.2.4 迁移到 io.cucumber 的 cucumber-java版本 4.2.2,但是 运行 成功使用旧版本的黄瓜的代码开始抛出错误,显示无法解析导入 cucumber.api.java.en.Given(或 When/Then)
下面是开始执行的黄瓜 class
{
@RunWith(Cucumber.class)
@CucumberOptions(features = "classpath:features/functional/",
glue = {"com.jacksparrow.automation.steps_definitions.functional" },
tags = { "@guest_search_in_progress" },
plugin = { "pretty","json:target/cucumber-json/cucumber.json",
"junit:target/cucumber-reports/Cucumber.xml", "html:target/cucumber-
reports"},
strict = false,
dryRun = false,
monochrome = true)
public class FunctionalRunCuke {
}
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-core</artifactId>
<version>4.2.2</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>4.2.2</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>4.2.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-jvm-deps</artifactId>
<version>1.0.6</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>gherkin</artifactId>
<version>6.0.14</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.10.19</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-testng</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-picocontainer</artifactId>
<version>2.1.0</version>
<scope>test</scope>
</dependency>
}
请建议我应该如何解决这个问题
首先,删除 cucumber-jvm-deps
和 gherkin
依赖项,因为它们可能会干扰 cucumber 4.2.2 的传递依赖项。
其次,如果您想将 Cucumber 与 JUnit 一起使用,您还需要导入 Junit(v4.12;因为 Cucumber 尚不支持 v5)。并且您需要删除 cucumber-testng
依赖项(反之亦然,如果您想使用 TestNg,请删除 cucumber-junit
并且您可能需要 TestNg 依赖项)。
最后,如果它们的位置在新的 Cucumber 版本中发生了变化,您可能需要更新导入语句。
请在 POM 中使用以下依赖项并根据您的框架要求添加 JUnit/TestNG 依赖项。(只需将 v.4.2.3 更改为 V.4.2.2)
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>4.2.3</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-junit</artifactId>
<version>4.2.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>datatable</artifactId>
<version>1.1.12</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-testng</artifactId>
<version>4.2.3</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-picocontainer</artifactId>
<version>4.2.3</version>
<scope>test</scope>
</dependency>
问题是因为使用了一组错误的黄瓜依赖项。以下是迁移到 4.0.0 时应使用的一组正确的 Cucumber 依赖项,请注意 - 1.所有的Cucumber依赖应该是同一个版本。 2. 根据您的框架要求使用 JUnit 或 TestNG。