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 插件能够使用这个依赖(因为它默认不使用测试范围),你需要启用
<useTestScope>true</useTestScope>
在插件的configuration
部分中
【讨论】:
以上是关于eclipse jetty 插件跨域支持找不到类的主要内容,如果未能解决你的问题,请参考以下文章
eclipse集成tomcat运行web时提示引入jar包的类找不到的解决办法