Java Lib文件错误

时间:2010-04-27 19:27:05

标签: java eclipse tomcat jar

我是一个全新的Java开发人员(我一直在asp.net工作),我继承了一个我试图正常运行的项目。我在Windows 7上安装了Tomcat,我正在使用Eclipse

我正在试图弄清楚Jar在Java中是如何工作的,我现在真的很困惑。我一直在玩它并在网上查找一天大约一天,这就是我所在的地方:

我有一个动态的Web项目,我继承了它,我将假设它是一个相当标准的项目布局。项目根目录中有一个lib文件夹,其中包含一些jar文件。

如果我没有做任何事情并转到网站中的特定页面,我会收到此错误:“导入net.sf无法解析,XLSTransformer无法解析为类型”

所以我将jxls-core-0.9.8.jar添加到我在Eclipse中的构建路径中并且该错误消失但现在我收到此错误“java.lang.ClassNotFoundException:net.sf.jxls.transformer.XLSTransformer”

我将jar从当前位置复制到tomcat / lib目录,并且该错误消失了。现在我与另一个文件基本上遇到了同样的问题。

主要是我只需要知道jar的工作原理是什么?他们需要在类路径中,在web / WEB-INF / lib中,在tomcat / lib中,在所有这些路径中,没有一个我无法理解它。

当我环顾四周时,我看到一些东西表明我的类路径条目的顺序也很重要。如果是这种情况,您如何确保以正确的顺序拥有它们。

3 个答案:

答案 0 :(得分:0)

您的罐子实际上需要去哪里 - 有完整的最佳实践和主要问题。术语Jar Hell存在是有原因的。

应用程序使用的所有类都必须位于类路径中。他们如何到达那里取决于classloader

为了更全面地理解,您需要阅读Java classloader。理想情况下,您需要查看Tomcat的classloader或至少一个Servlet容器的类加载器,因为Tomcat的类加载器与Java SE(桌面)应用程序的类加载器不同,与applet的类加载器不同。最重要的是,如果你不理解它们,那么类加载器真的会咬你。如果您想了解servlet容器应该如何工作的详细信息,您可以查看最新且最好的Servlet specification

Tomcat的classloader信息为您提供了最佳实践列表。请注意,我已经链接了5.5版本。如果您使用的是更高版本或更早版本,请检查您的版本是否存在相同的文件。

答案 1 :(得分:0)

这是一个可能有助于解决问题的建议。

WAR文件(Web Archives)会将所有应用程序的依赖JAR放在WEB-INF / lib目录中。如果您收到缺少类的报告,请尝试解压缩您的WAR文件,或查看应用服务器的爆炸性webapp目录,并查看是否有必要的jar。

此位置与tomcat / lib之间的区别在于tomcat / lib中的JAR在Tomcat的父类加载器中可用于所有加载的应用程序。 (实际上,如果应用程序在WEB-INF / lib中具有自己的特定JAR版本,则会导致问题。)WEB-INF / lib中的JAR加载到应用程序的类加载器中,并且仅对该应用程序可用。

如果WEB-INF / lib中缺少JAR,请在Eclipse中检查构建脚本或项目的构建路径。祝你好运!

答案 2 :(得分:0)

在Eclipse中,我导出为“Runnable JAR file”,然后在“Library handling”下的对话框中,选择“将所需的库提取到生成的Jar中”。

基本上,这意味着如果我可以在Eclipse中运行它而没有错误,那么它也将独立运行,因为我已经告诉Eclipse的所有内容都将包含在JAR中。