如何在不面对java.lang.ClassNotFoundException
或java.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
中。
答案 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文件并包括依赖关系,设置数据源等的有用信息:
答案 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