升级Cucumber后guice.injector-source弃用,InjectorSource配置求助
guice.injector-source后的配置调整 针对你遇到的问题,Cucumber 7+版本的guice模块确实移除了对cucumber.properties中guice.injector-source配置项的支持,改为自动扫描glue路径下的InjectorSource实现类,具体调整步骤如下:
确认自定义InjectorSource实现
确保你的实现类正确实现io.cucumber.guice.InjectorSource接口,guice 4.1.0的API完全兼容,示例代码:public class CustomInjectorSource implements InjectorSource { @Override public Injector getInjector() { // 替换为你的Guice模块配置 return Guice.createInjector(new YourServiceModule()); } }注意类必须是
public权限,且无私有构造方法,保证Cucumber能正常实例化。将实现类移至glue扫描路径
把上述CustomInjectorSource类放到你Cucumber配置中指定的glue包下(或其子包)。比如你的glue配置是com.yourproject.stepdefs,可以把类放到com.yourproject.stepdefs.injectors子包,Cucumber会自动扫描所有glue路径下的InjectorSource实现类并绑定。清理旧配置
删除cucumber.properties中的guice.injector-source=xxx配置项,避免残留配置干扰。验证glue路径配置
确保build.gradle或Cucumber运行配置中的glue参数包含存放InjectorSource类的包:- 若用build.gradle配置:
tasks.withType(Test) { systemProperty "cucumber.glue", "com.yourproject.stepdefs,com.yourproject.stepdefs.injectors" } - 若用CucumberOptions注解(在测试启动类上):
@CucumberOptions( glue = {"com.yourproject.stepdefs", "com.yourproject.stepdefs.injectors"}, // 其他配置如features路径等 ) public class CucumberTestRunner {}
- 若用build.gradle配置:
另外,cucumber-guice 7.8.1与guice 4.1.0是兼容的,无需强制升级guice到5.x版本,你可以先完成上述配置解决绑定问题,后续再处理guice升级的guice-no_app.jar问题。
内容的提问来源于stack exchange,提问作者NoiseGate

