由于缺少 java.util.Optional 的实现,Guice CreationException
Guice CreationException due to missing implementation for java.util.Optional
我正在将为 Java 7 编写的应用程序升级到版本 8。它使用 Guice 将配置值注入对象的构造函数。但是,在升级 Java 版本之后,我现在在 运行 单元测试时遇到这个神秘错误:
java.lang.RuntimeException: com.google.inject.CreationException: Guice creation errors:
1) No implementation for java.util.Optional<java.lang.Boolean> annotated with @Config(value=AsyncHttpClientConfigProvider.allowPoolingConnection) was bound.
while locating java.util.Optional<java.lang.Boolean> annotated with @Config(value=AsyncHttpClientConfigProvider.allowPoolingConnection)
for field at AsyncHttpClientConfigProvider.allowPoolingConnection(AsyncHttpClientConfigProvider.java:212)
at Module.configure(Module.java:24)
...
13 errors
at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:435)
at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:154)
at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:106)
at com.google.inject.Guice.createInjector(Guice.java:95)
at com.google.inject.Guice.createInjector(Guice.java:72)
at com.google.inject.Guice.createInjector(Guice.java:62)
at org.jukito.JukitoRunner.ensureInjector(JukitoRunner.java:105)
at org.jukito.JukitoRunner.computeTestMethods(JukitoRunner.java:233)
... 19 more
我可能遗漏了什么会导致此错误?
很简单,您缺少 @Config(AsyncHttpClientConfigProvider.allowPoolingConnection) Optional<Boolean>
的绑定,这与 @Config(AsyncHttpClientConfigProvider.allowPoolingConnection) Boolean
不同。对于更具体的答案,我们需要查看更多您以前的工作注入点和当前失败的注入点,但鉴于 java.util.Optional 在 Java 8 之前不存在,您可能添加了你自己并因此更改了用于查找绑定的 Guice 密钥。
支持 Java 8's Optional<T>
, like the rest of Java 8 support, came out in Guice 4.0 (Apr 2015), and only when using the Multibindings OptionalBinder
。如果没有它,或者在以前版本的 Guice 中,您的 Injector 在用作 Key 时将像对待任何其他泛型类型一样对待 Optional。
Guice 3.0 的 "optional" 绑定仅限于使用 @Inject(optional=true)
的方法和字段注入,这仍然有效,但 Guice 4.0 的升级中没有任何内容自动支持 Multibindings 情况之外的可选类型.
我正在将为 Java 7 编写的应用程序升级到版本 8。它使用 Guice 将配置值注入对象的构造函数。但是,在升级 Java 版本之后,我现在在 运行 单元测试时遇到这个神秘错误:
java.lang.RuntimeException: com.google.inject.CreationException: Guice creation errors:
1) No implementation for java.util.Optional<java.lang.Boolean> annotated with @Config(value=AsyncHttpClientConfigProvider.allowPoolingConnection) was bound.
while locating java.util.Optional<java.lang.Boolean> annotated with @Config(value=AsyncHttpClientConfigProvider.allowPoolingConnection)
for field at AsyncHttpClientConfigProvider.allowPoolingConnection(AsyncHttpClientConfigProvider.java:212)
at Module.configure(Module.java:24)
...
13 errors
at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:435)
at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:154)
at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:106)
at com.google.inject.Guice.createInjector(Guice.java:95)
at com.google.inject.Guice.createInjector(Guice.java:72)
at com.google.inject.Guice.createInjector(Guice.java:62)
at org.jukito.JukitoRunner.ensureInjector(JukitoRunner.java:105)
at org.jukito.JukitoRunner.computeTestMethods(JukitoRunner.java:233)
... 19 more
我可能遗漏了什么会导致此错误?
很简单,您缺少 @Config(AsyncHttpClientConfigProvider.allowPoolingConnection) Optional<Boolean>
的绑定,这与 @Config(AsyncHttpClientConfigProvider.allowPoolingConnection) Boolean
不同。对于更具体的答案,我们需要查看更多您以前的工作注入点和当前失败的注入点,但鉴于 java.util.Optional 在 Java 8 之前不存在,您可能添加了你自己并因此更改了用于查找绑定的 Guice 密钥。
支持 Java 8's Optional<T>
, like the rest of Java 8 support, came out in Guice 4.0 (Apr 2015), and only when using the Multibindings OptionalBinder
。如果没有它,或者在以前版本的 Guice 中,您的 Injector 在用作 Key 时将像对待任何其他泛型类型一样对待 Optional。
Guice 3.0 的 "optional" 绑定仅限于使用 @Inject(optional=true)
的方法和字段注入,这仍然有效,但 Guice 4.0 的升级中没有任何内容自动支持 Multibindings 情况之外的可选类型.