2016-06-24 37 views
0

Ich habe ein Spring Boot-Projekt, und ich versuche, von Solr 5.4 auf Solr 6.1 zu aktualisieren. Solr 6.1 ist von Jetty 9.3 abhängig. Jetzt beschwert sich Spring Boot: es gibt eine NoClassDefFoundError: org/eclipse/jetty/server/handler/ContextHandler$NoContext. ContextHandler existiert in Jetty 9.3, aber nicht in der inneren Klasse NoContext.Wie verwende ich Spring Boot, wenn Jetty 9.3 auf dem Klassenpfad ist?

Gibt es eine Möglichkeit, dies zu lösen?

java.lang.IllegalStateException: Failed to load ApplicationContext 
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) 
    at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83) 
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117) 
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83) 
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:228) 
    at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:49) 
    at org.spockframework.spring.SpringInterceptor.interceptSetupMethod(SpringInterceptor.java:42) 
    at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:28) 
    at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:87) 
    at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:88) 
    at org.spockframework.runtime.extension.builtin.AbstractRuleInterceptor$1.evaluate(AbstractRuleInterceptor.java:37) 
    at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55) 
    at org.spockframework.runtime.extension.builtin.TestRuleInterceptor.intercept(TestRuleInterceptor.java:38) 
    at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:87) 
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:112) 
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:56) 
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66) 
    at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51) 
    at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) 
    at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) 
    at org.gradle.messaging.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32) 
    at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93) 
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109) 
    at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) 
    at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) 
    at org.gradle.messaging.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:364) 
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54) 
    at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is java.lang.NoClassDefFoundError: org/eclipse/jetty/server/handler/ContextHandler$NoContext 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766) 
    at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) 
    at org.springframework.boot.test.SpringApplicationContextLoader.loadContext(SpringApplicationContextLoader.java:98) 
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) 
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) 
    ... 30 more 
Caused by: java.lang.NoClassDefFoundError: org/eclipse/jetty/server/handler/ContextHandler$NoContext 
    at org.springframework.boot.context.embedded.jetty.JettyEmbeddedWebAppContext.newServletHandler(JettyEmbeddedWebAppContext.java:32) 
    at org.eclipse.jetty.servlet.ServletContextHandler.getServletHandler(ServletContextHandler.java:322) 
    at org.eclipse.jetty.servlet.ServletContextHandler.relinkHandlers(ServletContextHandler.java:198) 
    at org.eclipse.jetty.servlet.ServletContextHandler.<init>(ServletContextHandler.java:157) 
    at org.eclipse.jetty.webapp.WebAppContext.<init>(WebAppContext.java:253) 
    at org.eclipse.jetty.webapp.WebAppContext.<init>(WebAppContext.java:201) 
    at org.springframework.boot.context.embedded.jetty.JettyEmbeddedWebAppContext.<init>(JettyEmbeddedWebAppContext.java:28) 
    at org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainerFactory.getEmbeddedServletContainer(JettyEmbeddedServletContainerFactory.java:144) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:160) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130) 
    ... 38 more 
Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.server.handler.ContextHandler$NoContext 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 48 more 
+0

Frühlings-Boot neuesten Versionen verwenden Jetty 9. Welche Frühjahr Boot-Version haben Sie? Spring Boot 1.3.5 verwendet Jetty 9.2.16.v20160414, aber möglicherweise können einige Probleme auftreten, wenn Sie versuchen, 9.3 zu konfigurieren, wenn es nicht vollständig abwärtskompatibel ist. –

+0

Welche Version von Boot verwenden Sie? Jetty 9.3 sollte mit Boot 1.3.x funktionieren. Obwohl es nicht die Standardeinstellung ist, haben wir eine [Beispiel] (https://github.com/spring-projects/spring-boot/tree/1.3.x/spring-boot-samples/spring-boot-sample-jetty93) überprüft es funktioniert. Spring Boot 1.4 verwendet standardmäßig Jetty 9.3. –

+0

@XtremeBiker: 'ContextHandler $ NoContext' ist in Jetty 9.3 verschwunden (es war dort in 9.2) – neu242

Antwort

1

mit Frühlings-Boot 1.3.6 arbeitete folgende Anlegestelle gradle Config fein:

dependencies { 
compile("org.springframework.boot:spring-boot-starter-web") { 
    exclude module: "spring-boot-starter-tomcat" 
} 
compile("org.eclipse.jetty:jetty-webapp:9.3.10.v20160621") 
compile("org.eclipse.jetty:jetty-jsp:9.2.17.v20160517")