eclipse jetty 插件跨域支持找不到类

Posted

技术标签:

【中文标题】eclipse jetty 插件跨域支持找不到类【英文标题】:eclipse jetty plugin Cross origin support Class not found 【发布时间】: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。不知道为什么会这样。

【问题讨论】:

【参考方案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 部分中

【讨论】:

以上是关于eclipse jetty 插件跨域支持找不到类的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse中HttpServlet类找不到

Eclipse安装Jetty插件

eclipse集成tomcat运行web时提示引入jar包的类找不到的解决办法

java 主启动类找不到

RegistryKey与RegistryValue类找不到问题处理

RegistryKey与RegistryValue类找不到问题处理