包含Selenium Jar时,Spring Boot Elasticsearch TransportClient创建失败

时间:2016-11-01 04:52:03

标签: spring-boot

我有一个带有外部化Elasticsearch服务器的Spring Boot应用程序,它可以正常启动。一旦我将Selenium添加到POM中,我就会收到以下错误。任何帮助如何解决将不胜感激。

.
.
.
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.elasticsearch.client.Client]: Factory method 'elasticsearchClient' threw exception; nested exception is java.lang.NoSuchMethodError: org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory.<init>(Ljava/util/concurrent/Executor;ILorg/jboss/netty/channel/socket/nio/WorkerPool;Lorg/jboss/netty/util/Timer;)V
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) ~[spring-beans-4.3.3.RELEASE.jar:4.3.3.RELEASE]
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) ~[spring-beans-4.3.3.RELEASE.jar:4.3.3.RELEASE]
    ... 54 common frames omitted
Caused by: java.lang.NoSuchMethodError: org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory.<init>(Ljava/util/concurrent/Executor;ILorg/jboss/netty/channel/socket/nio/WorkerPool;Lorg/jboss/netty/util/Timer;)V
    at org.elasticsearch.transport.netty.NettyTransport.createClientBootstrap(NettyTransport.java:354) ~[elasticsearch-2.4.0.jar:2.4.0]
    at org.elasticsearch.transport.netty.NettyTransport.doStart(NettyTransport.java:290) ~[elasticsearch-2.4.0.jar:2.4.0]
    at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:68) ~[elasticsearch-2.4.0.jar:2.4.0]
    at org.elasticsearch.transport.TransportService.doStart(TransportService.java:182) ~[elasticsearch-2.4.0.jar:2.4.0]
    at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:68) ~[elasticsearch-2.4.0.jar:2.4.0]
    at org.elasticsearch.client.transport.TransportClient$Builder.build(TransportClient.java:162) ~[elasticsearch-2.4.0.jar:2.4.0]
    at org.springframework.data.elasticsearch.client.TransportClientFactoryBean.buildClient(TransportClientFactoryBean.java:89) ~[spring-data-elasticsearch-2.0.3.RELEASE.jar:na]
    at org.springframework.data.elasticsearch.client.TransportClientFactoryBean.afterPropertiesSet(TransportClientFactoryBean.java:85) ~[spring-data-elasticsearch-2.0.3.RELEASE.jar:na]
    at org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration.createTransportClient(ElasticsearchAutoConfiguration.java:116) ~[spring-boot-autoconfigure-1.4.1.RELEASE.jar:1.4.1.RELEASE]
    at org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration.createClient(ElasticsearchAutoConfiguration.java:93) ~[spring-boot-autoconfigure-1.4.1.RELEASE.jar:1.4.1.RELEASE]
    at org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration.elasticsearchClient(ElasticsearchAutoConfiguration.java:84) ~[spring-boot-autoconfigure-1.4.1.RELEASE.jar:1.4.1.RELEASE]
    at org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration$$EnhancerBySpringCGLIB$$6e6239c5.CGLIB$elasticsearchClient$1(<generated>) ~[spring-boot-autoconfigure-1.4.1.RELEASE.jar:1.4.1.RELEASE]
    at org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration$$EnhancerBySpringCGLIB$$6e6239c5$$FastClassBySpringCGLIB$$4fb391a9.invoke(<generated>) ~[spring-boot-autoconfigure-1.4.1.RELEASE.jar:1.4.1.RELEASE]
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) ~[spring-core-4.3.3.RELEASE.jar:4.3.3.RELEASE]
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:356) ~[spring-context-4.3.3.RELEASE.jar:4.3.3.RELEASE]
    at org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration$$EnhancerBySpringCGLIB$$6e6239c5.elasticsearchClient(<generated>) ~[spring-boot-autoconfigure-1.4.1.RELEASE.jar:1.4.1.RELEASE]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_60]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_60]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_60]
    at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_60]
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) ~[spring-beans-4.3.3.RELEASE.jar:4.3.3.RELEASE]
    ... 55 common frames omitted

2 个答案:

答案 0 :(得分:2)

看起来Selenium正在推出一款旧版的netty-3.5.7.Final.jar。没有Selenium的Spring一直在使用netty-3.10.6.Final.jar。我无法用Maven解决这个问题。我使用Gradle创建了一个新项目,并复制到我的所有代码中。现在一切都有效。

答案 1 :(得分:1)

谢谢@Joe Reymann,你救了我的一天。

我将我的弹簧靴从1.3.5升级到1.4.3并且我遇到了与你相同的问题,Selenium正在使用旧的netty.jar。

对于Maven,将netty从selenium中排除,maven将拉动spring boot的netty

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>2.45.0</version>
    <exclusions>
        <exclusion>
            <groupId>io.netty</groupId>
            <artifactId>netty</artifactId>
        </exclusion>
    </exclusions>
</dependency>