在Eclipse构建路径中使用用户库时出现ClassNotFoundException

42
我正在使用Eclipse 3.7(STS),其中嵌入了Tomcat 7。我创建了一个新的动态Web项目,并将单个JSP文件添加到Web内容根文件夹中。我可以在Eclipse内运行Tomcat并访问JSP,没有问题。
我从“用户库”中向项目添加了一些第三方JAR文件(我不使用maven或自动依赖项管理)。在JSP中,我引用了项目的JAR文件中的类,我可以编译它而不会出现问题,但是当我在Tomcat上部署时,JSP会抛出ClassNotFoundException。显然,Tomcat无法找到我的库设置中的JAR文件。我尝试为Tomcat服务器创建运行配置,并将类路径设置为与项目的类路径设置相匹配,但仍然遇到同样的classnotfound问题。
我可以通过手动将所有项目JAR复制到WEB-INF / lib目录来解决这个问题,以便Web应用程序可以找到所有依赖项,但这是荒谬的,我不指望这是解决方案,因为这是维护的噩梦。
我有遗漏什么吗?
2个回答

99

9
救命稻草!它起作用了,我知道肯定有简单的方法,天啊,现在我能睡觉了,非常感谢! - user646584
1
如果您正在使用较旧的Eclipse版本,请注意,在3.4.2版本中,项目属性中选项的名称为“Java EE模块依赖项”。 - Bizmarck
2
这些信息应该在每个关于动态项目的教程中都包含。 - Boris
@BalusC,请看一下我的问题:http://stackoverflow.com/questions/18249117/how-to-deploy-web-project-on-remote-tomcat-server-outside-eclipse-with-jar-file - Shiv
这对本地库(JNI)似乎不太有效:它可以正常启动一次,但是如果您更改任何代码,Tomcat 尝试重新加载库,您会收到类似于“java.lang.UnsatisfiedLinkError: Native Library /usr/local/lib/libgdalconstjni.so already loaded in another classloader”的错误。有没有一种方法可以将其标记为仅加载一次?将用户库设置为系统库没有帮助。 - z0r
显示剩余2条评论

4
你需要将jar文件复制到WEB-INF/lib文件夹中:那是它们应该在的地方。
Eclipse应该为你提供生成包含所有依赖项的WAR文件的选项:我已经有一段时间没有使用Web工具了,但是无论如何,所有依赖项都必须在WEB-INF/lib中,否则类加载器将无法找到它们。

1
我在Eclipse STS中找不到任何关于动态Web项目的WAR设置,但是我知道你在说什么,因为在使用Eclipse Galileo多年后,这正是我期望的。 - user646584

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