Eclipse警告:XXXXXXXXXX.jar将不被导出或发布。可能导致运行时ClassNotFoundExceptions。

37
我在Eclipse的构建路径中添加必要的文件后,仍然一直出现以下错误。我正在开发一个Spring MVC的Hello World应用程序,并使用Java EE开发人员专用版的Eclipse Helios:
Jan 16, 2012 1:25:42 PM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet /SpringMVCTutorial threw load() exception
java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:415)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:397)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1062)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1010)
    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(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

我已经尝试右键单击服务器并点击“清理”。 我右键单击应用程序,点击“构建路径”,然后在库中放置正确的JAR文件; 但是,它仍然不将它们视为依赖项。 我错过了什么?
我已经尝试了这里提供的建议:
  1. 右键单击您的Web项目
  2. 单击“属性”
  3. 选择“Java EE模块依赖项”
  4. 单击“Web库”选项卡
  5. 添加外部JAR(如果JAR在您的项目之外)。 Jar / Module下会添加一个条目,请确保单击复选框(已选中)。
问题在于,当我选择“单击属性”时,我没有单击Java EE模块依赖项的选项,因为它不出现。 我下载了任何额外的Java EE工具,仍然找不到它。

1
你是否正在使用Maven来管理你的依赖关系? - Alex Barnes
不需要。我想如果我通过Eclipse做所有的事情,就不需要使用Maven了。我认为只有在不使用IDE的情况下才需要Maven? - Mike
我明白了……我已经下载了Eclipse的Maven插件。谢谢你的提醒 :) - Mike
我认为你会发现使用自动管理依赖关系比手动管理要容易得多。祝你好运。 - Alex Barnes
4个回答

41
为了让它正常工作,我必须将我想要放在类路径/依赖项中的文件“拖放”到WEB-INF/lib文件夹中。这种方式可以正常工作。
但是,当我尝试按照正确的方式进行操作时:

构建路径→配置构建路径→外部jar

它就无法生效。
诀窍在于我必须将文件放入我的Web应用程序库文件夹中,而唯一的方法(在我看来)是将它们“点击和拖放”到WEB-INF/lib文件夹中。通过这种方式,它会自动显示在我的Web应用程序库中。

我猜如果我不使用Maven,我会把所有的JAR包放在lib目录中,然后从那里将它们添加到类路径中。 - Alex Barnes
看起来是 Eclipse 的一个“特点”——我在4.2(Juno)版本中也遇到了它。 - mjn
4
如果您使用Maven构建项目:永久地在Eclipse中忽略它: Windows -> Preferences -> Validation -> 停用“Classpath Dependencies Validator”(至少如此 :)) - Harald Brabenetz
1
仅供记录(以防人们通过搜索到达此处):如果我没有弄错,您现在可以通过项目属性的“部署组件”选项卡/部分(至少在Luna SR2+中)实现您想要的功能。在左侧的“Java构建路径”上方,您可以进行“添加”,选择“Java构建路径条目”,并选择所有相关的JAR文件,以便在IDE内运行/调试时将它们包含在应用程序服务器(例如Tomcat)的适当文件夹中。 - OzgurH
我使用这个答案解决了我的问题。事实上,通过使用“Build Path -> .. -> Add External JARs...”添加它们并不起作用,你需要使用“Build Path -> .. -> Add JARS...”,然后选择在你的WEB-INF/lib文件夹中的那些jar包。这对我很有帮助。 - WannaGetHigh
仍然是Eclipse的“特性”,在2019-12(4.14.0)中遇到。只需将其复制粘贴到WEB-INF / lib中即可解决问题。 - Neoraptor

26
当我添加新的jar文件时,在Eclipse的“问题”选项卡中出现了两个消息:一个是错误,另一个是警告。只有当我将所有以前的解决方案与额外的步骤相结合时,才能解决这个问题。以下是我解决问题的方法:
  1. 将想要添加到我的classpath/dependencies中的文件“拖放”到我的WEB-INF/lib/文件夹中;
  2. 右键单击“包资源管理器”选项卡中的项目,选择“构建路径 -> 配置构建路径 -> 外部JAR”,并添加所需的文件;
  3. 重启Eclipse;
  4. 选择“项目 -> 清理...”。我的系统已配置自动构建,因此在这一步之后,错误消息被清除,但是警告“XXXXXXXXXXX.jar不会被导出或发布。可能会导致运行时ClassNotFoundExceptions”仍然存在;
  5. 右键单击警告消息-->“快速修复”;
  6. 选择选项“标记相关的原始类路径条目为发布/导出依赖项”(如下图所示)

Quick fix for warning message


这是最简单的解决方案,对我很有效。谢谢! - jfajunior

2

在“Project Explorer”选项卡中右键单击您的项目,然后转到“Build path”→“Configure build path”→“External jars”,并添加所需的所有JAR文件。


问题在于我一直在这样做,但我仍然收到上述引用的错误。我添加的JAR文件消除了我的编译错误,但现在出现了依赖性错误。真是让人费解! - Mike

0
使用Eclipse 2022-03,你可以在问题视图中右键点击警告,选择快速修复,这将给你一个选项将依赖项目发布/导出到/WEB-INF/lib。但是让我感到困惑的是,从项目构建路径中我们无法手动执行此步骤。

Java Build Path/Projects tab


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接