2016-10-14 1 views
2

Ich habe eine REST-App, die ich ohne Probleme auf meinem Tomcat8 bereitstellen kann. Wenn ich versuche, das gleiche in einem Jetty9 Server zu tun, wirft es eine Ausnahme:Jersey 2 + solr 4.6.1 maven ClassNotFoundException com.sun.jersey.spi.inject.InjectableProvider

Caused by: 
java.lang.ClassNotFoundException: com.sun.jersey.spi.inject.InjectableProvider 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:487) 
     at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:428) 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:760) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) 
     at java.net.URLClassLoader.access$100(URLClassLoader.java:73) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:368) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:362) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:361) 
     at org.eclipse.jetty.webapp.WebAppClassLoader.findClass(WebAppClassLoader.java:550) 
     at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:475) 
     at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:428) 
     at org.eclipse.jetty.util.Loader.loadClass(Loader.java:86) 
     at org.eclipse.jetty.plus.annotation.ContainerInitializer.callStartup(ContainerInitializer.java:130) 
     at org.eclipse.jetty.annotations.ServletContainerInitializersStarter.doStart(ServletContainerInitializersStarter.java:63) 
     at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 
     at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:330) 
     at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1404) 
     at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1366) 
     at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:778) 
     at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:262) 
     at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:520) 
     at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 
     at org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:41) 
     at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:188) 
     at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:499) 
     at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:147) 
     at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:180) 
     at org.eclipse.jetty.deploy.providers.WebAppProvider.fileAdded(WebAppProvider.java:452) 
     at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:64) 
     at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:610) 
     at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:529) 
     at org.eclipse.jetty.util.Scanner.scan(Scanner.java:392) 
     at org.eclipse.jetty.util.Scanner.doStart(Scanner.java:313) 
     at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 
     at org.eclipse.jetty.deploy.providers.ScanningAppProvider.doStart(ScanningAppProvider.java:150) 
     at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 
     at org.eclipse.jetty.deploy.DeploymentManager.startAppProvider(DeploymentManager.java:561) 
     at org.eclipse.jetty.deploy.DeploymentManager.doStart(DeploymentManager.java:236) 
     at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 
     at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:131) 
     at org.eclipse.jetty.server.Server.start(Server.java:411) 
     at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:113) 
     at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) 
     at org.eclipse.jetty.server.Server.doStart(Server.java:378) 
     at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 
     at org.eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.java:1516) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:1441) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:497) 
     at org.eclipse.jetty.start.Main.invokeMain(Main.java:214) 
     at org.eclipse.jetty.start.Main.start(Main.java:457) 
     at org.eclipse.jetty.start.Main.main(Main.java:75) 

Ich bin nicht Jersey1 Abhängigkeiten mit (com.sun.jersey) so seltsam es ist. Aus diesem Grund versuche ich, das Problem zu isolieren, indem ein leeres Projekt mit nur pom.xml zu schaffen, die wie folgt aussieht:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.example</groupId> 
    <artifactId>bigBoWS_test</artifactId> 
    <packaging>war</packaging> 
    <version>1.0</version> 
    <name>BigBoWS Maven Webapp</name> 
    <url>http://maven.apache.org</url> 
    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.jersey.containers</groupId> 
      <artifactId>jersey-container-servlet</artifactId> 
      <version>2.14</version> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.jersey.media</groupId> 
      <artifactId>jersey-media-json-jackson</artifactId> 
      <version>2.22.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.solr</groupId> 
      <artifactId>solr-core</artifactId> 
      <version>4.6.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.solr</groupId> 
      <artifactId>solr-solrj</artifactId> 
      <version>4.6.1</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.1.0</version> 
     </dependency> 
    </dependencies> 
    <build> 
     <finalName>${project.artifactId}</finalName> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

ich eins nach dem anderen Abhängigkeiten versucht zu entfernen, bis ich herausfinden, dass das Problem war solr- Kernabhängigkeit. Wenn ich diese Abhängigkeit entferne, gibt der Jetty-Server keinen Fehler aus. Dies ist der Pom ohne diese Abhängigkeit.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.example</groupId> 
    <artifactId>bigBoWS_test</artifactId> 
    <packaging>war</packaging> 
    <version>1.0</version> 
    <name>BigBoWS Maven Webapp</name> 
    <url>http://maven.apache.org</url> 
    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.jersey.containers</groupId> 
      <artifactId>jersey-container-servlet</artifactId> 
      <version>2.14</version> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.jersey.media</groupId> 
      <artifactId>jersey-media-json-jackson</artifactId> 
      <version>2.22.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.solr</groupId> 
      <artifactId>solr-solrj</artifactId> 
      <version>4.6.1</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.1.0</version> 
     </dependency> 
    </dependencies> 
    <build> 
     <finalName>${project.artifactId}</finalName> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Ich verstehe nicht, warum diese Bibliothek nutzen, „jemand“ fragt nach com.sum.jersey ... wenn ich verwende Jersey 2, die org.glassfish.jersey verwendet ...

Vielen Dank im Voraus.

+0

wir fügen nur solr zu unserem pom hinzu, und wir haben denselben Fehler ... irgendein Fortschritt auf deiner Seite, um das zu lösen? –

Antwort

0

Mein Projekt stieß auf das gleiche Problem bei der Migration von Tomcat8 zu Jetty9. Wir konnten das Problem lösen, indem wir den Umfang für den Solr-Core von 'Kompilieren' zu 'Testen' änderten. Das war natürlich für unser spezielles Projekt möglich und möglicherweise nicht für Ihr Projekt möglich.

<dependency> 
     <groupId>org.apache.solr</groupId> 
     <artifactId>solr-core</artifactId> 
     <version>6.3.0</version> 
     <scope>test</scope> 
    </dependency> 

Hinweis: Vielen Dank für die Frage. Ich hätte niemals die Ursache als die Abhängigkeit von solr-core gefunden. In der Tat, warum die Verwendung dieser Bibliothek verursacht "jemand" nach com.sum.jersey zu fragen ist ein Geheimnis.

Verwandte Themen