无法在Tomcat 8上部署Web服务

时间:2016-01-22 08:57:45

标签: java web-services tomcat

我写了一个maven web服务,它引用了另一个项目。 Web服务本身只包含2个pom条目:

  1. jersey-container-servlet:2.13
  2. 原生项目(项目1)
  3. 网络服务POM:

    <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/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>Webservice</groupId>
      <artifactId>Webservice</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>war</packaging>
      <build>
        <sourceDirectory>src/main/java</sourceDirectory>
        <plugins>
    
          <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
              <source>1.8</source>
              <target>1.8</target>
            </configuration>
          </plugin>
    
          <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.6</version>
            <configuration>
              <warSourceDirectory>WebContent</warSourceDirectory>
              <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
          </plugin>
    
          <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.2</version>
                <configuration>
                    <path>/Webservice</path>
                    <update>true</update>
                    <url>http://server.name:8080/manager/text</url>
                    <username>tomcat</username>
                    <password>tomcat</password>
                </configuration>
          </plugin>
        </plugins>
      </build>
    
      <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>2.13</version>
        </dependency> 
            <dependency>
                <groupId>lu.group.id</groupId>
                <artifactId>Project1</artifactId>
                <version>4.0.1</version>
            </dependency>
      </dependencies> 
    </project>
    

    项目1,也是一个maven项目,只有1个pom条目,另一个原生项目(我们称之为项目2)。

    Project 2再次是一个maven项目,它的pom文件包含5个条目:

    1. lang-guess:0.0.7
    2. Stanford-corenlp:3.5.2
    3. stanford-corenlp:3.5.2:models
    4. mysql-connector-java:5.1.34
    5. language-de:3.0
    6. Web服务在Eclipse中本地安装的Tomcat 8上运行完美。但是,当我从Eclipse(War文件)导出Web服务并将其部署到我的Tomcat服务器上时,当我尝试运行Web服务时,我收到java.lang.NoClassDefFoundError。我已经尝试过在网上找到的几件事:

      1. 在发生战争前清理项目
      2. Maven update
      3. 将我的tomcat服务器的%classpath%设置为项目root directoy
      4. 将项目1和项目2中的两个jar添加到tomcat / libs
      5. 从Web服务中删除了所有jar并部署了一个不正确的(notrunning)项目(通常我应该得到ClassNotFoundExeception或类似的?)
      6. 将项目1添加到Eclipse中的部署程序集
      7. 此外,我已经在几个stackoverflow问题上阅读并尝试了许多解决方案:

        总而言之,没有任何效果,错误java.lang.NoClassDefFoundError仍然存在......我不知道还有什么可以尝试,所以我很乐意提供任何帮助!提前谢谢你:)

        提及可能是服务器信息:

        • Tomcat版本:8.0.30
        • JVM版本:1.8.0_66-b17
        • 操作系统:Linus(Ubuntu)

        另外,我写的另外两个maven Web服务,在这台服务器上成功运行!所以我认为这可能不是服务器配置问题?

        完整堆栈跟踪如下:

        java.lang.NoClassDefFoundError: Could not initialize class org.jvnet.hk2.internal.ServiceLocatorImpl
            org.jvnet.hk2.external.generator.ServiceLocatorGeneratorImpl.initialize(ServiceLocatorGeneratorImpl.java:67)
            org.jvnet.hk2.external.generator.ServiceLocatorGeneratorImpl.create(ServiceLocatorGeneratorImpl.java:102)
            org.glassfish.hk2.internal.ServiceLocatorFactoryImpl.internalCreate(ServiceLocatorFactoryImpl.java:270)
            org.glassfish.hk2.internal.ServiceLocatorFactoryImpl.create(ServiceLocatorFactoryImpl.java:230)
            org.glassfish.jersey.internal.inject.Injections._createLocator(Injections.java:138)
            org.glassfish.jersey.internal.inject.Injections.createLocator(Injections.java:123)
            org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:304)
            org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:285)
            org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:311)
            org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:170)
            org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:358)
            javax.servlet.GenericServlet.init(GenericServlet.java:158)
            org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
            org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
            org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
            org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:521)
            org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1096)
            org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674)
            org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
            org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
            java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
            java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
            org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
            java.lang.Thread.run(Thread.java:745)
        

        更新:由于我仍然没有找到解决方案,我只需将粘贴的Project 1和Project 2复制到我的Web服务。 Web服务仍然在localhost Tomcat上正常运行,但在Tomcat服务器上仍然出现相同的错误NoClassDefFoundError错误......现在我真的没有想法。

1 个答案:

答案 0 :(得分:0)

我解决了我的问题。不要问我是什么,我只是从头开始,在新的网络项目中复制粘贴我一个接一个的内容,并通过导出war文件,它在第一次尝试时就像一个魅力...

无论如何,非常感谢你的帮助。