【问题标题】:Tomcat Jersey Eclipse ClassNotFound org.glassfish.jersey.servlet.ServletContainerTomcat Jersey Eclipse ClassNotFound org.glassfish.jersey.servlet.ServletContainer
【发布时间】:2014-04-21 10:23:08
【问题描述】:

我正在运行hello world 示例。

但是,我使用的是 2.7 版。

在 maven pom.xml 我有

<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>com.mydomain.restful</groupId>
<artifactId>AdvertServer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Advert Server</name>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey</groupId>
            <artifactId>jersey-bom</artifactId>
            <version>2.7</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.2.4</version>
    </dependency>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>6.0</version>
    </dependency>
    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>2.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>2.7</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet-core</artifactId>
        <version>2.7</version>
        <!-- use the following artifactId if you don't need servlet 2.x compatibility -->
        <!-- artifactId>jersey-container-servlet</artifactId -->
    </dependency>
</dependencies>

<build>
    <sourceDirectory>src</sourceDirectory>
    <resources>
        <resource>
            <directory>src</directory>
            <excludes>
                <exclude>**/*.java</exclude>
            </excludes>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.0</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
</build>
</project>

我尝试从命令行和使用 Eclipse 上的服务器插件运行 servlet。我得到同样的错误:

java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:525)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:507)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:126)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1099)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1043)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4957)
    at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5284)
    at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5279)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)

奇怪的是,我可以在 .jar 文件中看到类。课程就在那里。

我什至尝试添加 jar 跳过 maven,但 Tomcat 看不到该类。

【问题讨论】:

    标签: java eclipse maven servlets jersey


    【解决方案1】:

    来自

    Eclipse + tomcat - ClassNotFound exception on deploy

    如果您同时安装了 Maven Eclipse 插件和 Maven WTP 插件,这是自动的。如果您没有安装这些,请继续安装它们,然后在 Eclipse 重新启动后右键单击项目并执行 Maven > Update project...。这将在内部更改项目配置,以便将 Maven 依赖项复制到部署目标上的 /WEB-INF/lib 文件夹。

    如果您不想使用这些插件中的任何一个,那么您必须转到项目属性 > 部署程序集配置并手动添加您的依赖项,但同样,这是由这些插件自动完成的。

    【讨论】:

    • 我为这个答案搜索了一个小时。谢谢!
    【解决方案2】:

    只是一个提示......

    最后,您正在创建的是旧的战争文件...应该在 WEB-INF/lib 下包含您的库。你检查过它是否正在发生吗?我的意思是,您可以创建您的战争(在项目资源管理器中右键单击项目的导出/WAR 文件),然后通过您的 zip 应用程序,转到战争文件中的 WEB-INF/lib 文件夹,并检查您的jar 文件在那里。

    如果它们不存在,则 Eclipse 没有将您的库正确导出到 war 文件中。 您是否已将它们添加到您的构建路径(java 构建路径/库和 java 构建路径/订购和导出)?

    【讨论】:

    • :-D 抱歉,没有看到您自己自动回复。由于您没有接受您的回答,我认为您仍然没有找到解决方案。
    • 我明天可以接受我的回答。输入问题几秒钟后,我找到了答案。因此,我认为无论如何发布它都会帮助其他人和未来的我。谢谢
    • 是的,对不起,不是抱怨,只是解释我为什么要回答一些已经回答的问题。我也这样做,可以稍后来刷新主题,并且可以帮助其他人:-)
    【解决方案3】:

    添加

    <packaging>war</packaging>
    

    在你的 pom.xml 中,当我通过使用库时暂时将包装更改为 jar 时遇到了这个问题

     mvn clean install
    

    将其编译为 jar 并且可以被您的其他项目引用,当您的打包是战争时,这是不可能的。 当您忘记将包装改回战争时,我看到确切的错误堆栈跟踪出现了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-18
      • 2023-03-13
      • 1970-01-01
      • 2016-11-21
      • 2018-11-08
      • 2014-01-14
      • 2013-07-16
      • 2018-02-04
      相关资源
      最近更新 更多