【问题标题】:eclipse jetty plugin Cross origin support Class not foundeclipse jetty 插件跨域支持找不到类
【发布时间】:2015-02-20 22:08:29
【问题描述】:

我正在尝试为我的 Web 应用程序使用跨域过滤器支持。我正在使用 eclipse jetty 插件从 eclipse 中调试它。当我通过控制台运行课程时,使用 mvn jetty:run,我总是得到正确的响应。但是当我使用我的 jetty eclipse 插件运行它时,我得到 Class not found 异常。

java.lang.ClassNotFoundException: org.eclipse.jetty.servlets.CrossOriginFilter
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:421)
        at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:383)
        at org.eclipse.jetty.util.Loader.loadClass(Loader.java:100)

我的 pom.xml 中有以下依赖项:

<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlets</artifactId>
<version>9.2.5.v20141112</version>
</dependency>

当我在 Eclipse 中检查我的码头项目的类路径配置时,我看到这个依赖项以 maven 依赖项的形式出现。我仍然不确定为什么码头插件无法找到 org.eclipse.jetty.servlets.CrossOriginFilter 作为类路径的一部分。请帮我解决这个问题。

编辑:

看起来它不仅适用于 CORS。甚至 web.xml 中存在的其他类也会为未找到的类抛出错误。我检查了该调试配置的码头类路径,并能够在其中找到这些 jar。不知道为什么会这样。

【问题讨论】:

    标签: java eclipse eclipse-plugin jetty cors


    【解决方案1】:

    它不能成为您的 webapps WEB-INF/lib 目录的一部分(不支持这种方式,因为它无法访问所需的内部服务器组件)。

    改为在您的${jetty.base}/start.ini 中启用servlets 模块

    --module=servlets
    

    【讨论】:

    • 您好 Joakim,感谢您的回复。由于我使用的是 eclipse jetty 插件,我不确定在哪里可以找到 start.ini,我尝试寻找它但没有看到它。相反,我发现了 eclipse jetty 插件配置 xml 文件。我开始在 Eclipse 调试配置中手动添加 jar 作为 jetty 插件的依赖项。我可以在那个 eclipse jetty config xml 中看到这些 jars 作为额外的类路径条目添加。现在这个问题已经解决了。但是痛苦的是看起来我可能需要一个一个地添加我项目的所有依赖 jar 来解决所有错误。
    • 考虑到 Eclipse Jetty 项目不会创建/发布/或推广“Eclipse Jetty 插件”,我想您需要与开发您正在使用的插件的第 3 方交谈.
    • 感谢 Joakim 的回复。我通过在插件配置中启用包含其他没有范围的依赖项来解决此问题。这导致在运行码头插件时添加所有依赖项。
    • @JoakimErdfelt eclipse.org/jetty/documentation/current/jetty-maven-plugin.html 不是 Eclipse Jetty 项目的一部分吗?感谢您的意见
    • @geoand 您的声明“Eclipse Jetty Plugin”指的是 Eclipse IDE 的 Jetty 插件(这也包括 WTP 支持)。我们不维护基于 Eclipse IDE 的插件。 jetty-maven-plugin 不是“Eclipse Jetty 插件”,它适用于 maven 本身,是的,我们确实维护和支持。
    【解决方案2】:

    虽然我不确定以下是否是最好的解决方案,但它确实有效:

    首先我添加了

        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-servlets</artifactId>
            <version>${jetty-maven.version}</version>
            <scope>test</scope>
        </dependency>
    

    请注意,我在这里使用了test 分数,以避免将仅用于 Maven Jetty 插件的依赖项泄漏到生产工件中。 为了让 Maven Jetty 插件能够使用这个依赖(因为它默认不使用测试范围),你需要启用

    &lt;useTestScope&gt;true&lt;/useTestScope&gt; 在插件的configuration 部分中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      相关资源
      最近更新 更多