如何在不面对java.lang.ClassNotFoundException的情况下将JAR库添加到WAR项目中? Classpath vs Build Path vs / WEB-INF / lib

时间:2011-07-22 15:20:03

标签: eclipse java-ee jar classpath war

如何在不面对java.lang.ClassNotFoundExceptionjava.lang.NoClassDefFoundError的情况下将JAR库添加到Eclipse中的WAR项目?

CLASSPATH环境变量似乎不起作用。在某些情况下,我们将JAR文件添加到Eclipse项目的 Build Path 属性中以使代码编译。我们有时需要将JAR文件放在Java EE Web应用程序的/WEB-INF/lib文件夹中,以使代码在该JAR内的类上运行。

我不完全理解为什么CLASSPATH不起作用,在哪些情况下我们应该将JAR添加到 Build Path ,以及何时应将这些JAR放在/WEB-INF/lib中。

6 个答案:

答案 0 :(得分:5)

CLASSPATH环境变量仅由java.exe命令使用,即使在没有任何-cp-classpath-jar参数的情况下使用也是如此。它被Eclipse,Netbeans和IDEA等IDE忽略了。另请参阅java.lang.ClassNotFoundException in spite of using CLASSPATH environment variable

构建路径仅适用于需要编译项目代码的库。手动将JAR放在/WEB-INF/lib中,或者设置部署程序集,或让像Maven这样的外部构建系统将<dependency>作为JAR放置在生成的WAR的/WEB-INF/lib期间构建,仅适用于需要获取代码以在目标环境上部署和运行的库。请注意,您不应该在/WEB-INF/lib中创建子文件夹。 JAR必须放在根目录中。

目标Java EE服务器或servletcontainer已经提供了一些库,例如JSP,Servlet,EL等。因此,您不需要在/WEB-INF/lib中放置这些库的JAR。而且,它只会导致类加载麻烦。仅在 Build Path 中(间接)指定它们就足够了。在Eclipse中,通常通过相应地设置 Targeted Runtime 来实现。它将自动以 Build Path 结束。另请参阅How do I import the javax.servlet API in my Eclipse project?

其他库,通常是第三方库,如Apache Commons,JDBC驱动程序和目标servletcontainer未提供的标准库(例如Tomcat不支持JSF,CDI,JPA,EJB等),需要最终完成在/WEB-INF/lib。您不一定需要在 Build Path 中指定它。只有当您已将其作为用户库时,才应该使用部署程序集设置。另请参阅ClassNotFoundException when using User Libraries in Eclipse build path

如果您正在使用Maven,那么您需要确保将库标记为<scope>provided</scope>(如果这些库已由目标运行时提供,例如Java EE,Servlet,EL等)你部署到WildFly,TomEE等。这样他们就不会在生成的WAR的/WEB-INF/lib中结束(并且可能导致与服务器捆绑的库发生冲突),但是它们最终会出现在Eclipse的 Build Path中(并获取项目的代码进行编译)。

答案 1 :(得分:1)

构建路径中的那些JAR仅用于构建(编译)过程。如果您导出Web应用程序,它们不会包含在最终WAR中(请尝试一下)。

如果在运行时需要JAR,则必须将它们放在WEB-INF / lib或服务器类路径中。将JAR放在服务器类路径中只有在多个WAR共享公共代码库需要访问共享对象(例如Singleton)时才有意义。

答案 2 :(得分:0)

如果您使用 Maven

打开项目属性,然后在部署程序集下单击添加...

然后选择 Java Build Path Entries 并选择 Maven依赖

答案 3 :(得分:0)

通过设置权限解决。 使用PySpark和Oracle jdbc有相关问题。该错误并不表示无法访问该文件,只是无法加载该类。

因此,如果有人仍然挣扎,请检查权限。有些人可能会发现它很明显。

答案 4 :(得分:-1)

本文介绍了Spring Boot应用程序中的相同问题。有关如何下载Oracle jar文件并包括依赖关系,设置数据源等的有用信息:

Configuring Spring Boot with Oracle

答案 5 :(得分:-2)

我想为下面的链接问题ClassNotFoundException oracle.jdbc.driver.OracleDriver only in servlet, using Eclipse

提供答案

Ans:在Myeclipse中转到服务器 - &gt;左键单击Myeclipse Tomcat7 - &gt;配置服务器连接器 - &gt;(展开)Myeclipse Tomcat7 - &gt;路径 - &gt;前置到类路径 - &gt;添加jar(添加oracle14 jar) - &gt; ok