我应该如何在eclipse中将jar库添加到war项目中而不需要面对 java.lang.ClassNotFoundException
或者 java.lang.NoClassDefFoundError
?
这个 CLASSPATH
环境变量似乎不起作用。在某些情况下,我们将jar文件添加到eclipse项目的buildpath属性中,以使代码能够编译。我们有时需要把jar文件放进去 /WEB-INF/lib
javaeeweb应用程序的文件夹,使代码在jar中的类上运行。
我不太明白为什么 CLASSPATH
不起作用,在什么情况下我们应该添加jar来构建路径,以及这些jar应该在什么时候放置 /WEB-INF/lib
.
6条答案
按热度按时间cidc1ykv1#
通过设置权限解决。在使用pyspark和oraclejdbc时出现了相关问题。该错误并不表示无法访问该文件,只是表示无法加载该类。
所以如果有人还在挣扎,请检查权限。有些人可能会觉得很明显。
hof1towb2#
本文解释了spring引导应用程序中的相同问题。还有一些有用的信息,如如何下载oracle jar文件,以及如何包含依赖关系、设置数据源等:
使用oracle配置spring boot
41zrol4v3#
我想回答以下链接问题classnotfoundexception oracle.jdbc.driver.oracledriver only in servlet,using eclipse
ans:在myeclipse中转到服务器-->左键单击myeclipse tomcat7-->配置服务器连接器-->(展开)myeclipse tomcat7-->路径-->前置到类路径-->添加jar(添加oracle14 jar)-->确定
jchrr9hc4#
这个
CLASSPATH
环境变量仅由java.exe
命令,甚至只有在没有任何-cp
,-classpath
,-jar
论据。它被eclipse、netbeans和idea等ide所忽略。另请参见java.lang.classnotfoundexception,尽管使用了classpath环境变量。构建路径仅适用于使项目代码编译所需的库。手动放入震击器
/WEB-INF/lib
,或者设置部署程序集,或者让maven这样的外部构建系统放置<dependency>
像jar一样/WEB-INF/lib
在构建过程中产生的war,仅适用于使代码部署并在目标环境上运行所需的库。请注意,您不应该在中创建子文件夹/WEB-INF/lib
. jar必须放在根部。一些库已经由目标javaee服务器或servletcontainer提供,例如jsp、servlet、el等,因此您不需要将这些库的jar放入
/WEB-INF/lib
. 而且,这只会导致类加载问题。只(间接地)在构建路径中指定它们就足够了。在eclipse中,通常通过相应地设置目标运行时来实现这一点。它将自动结束在构建路径中。另请参见如何在eclipse项目中导入javax.servlet api?其他库,通常是第三方库,如apachecommons、jdbc驱动程序和目标servletcontainer未提供的标准库(例如tomcat不支持jsf、cdi、jpa、ejb等现成的库),需要最终在
/WEB-INF/lib
. 您不必在构建路径中指定它。只有当您已经将它作为用户库时,才可以使用部署程序集设置。另请参阅在eclipse构建路径中使用用户库时的classnotfoundexception。如果您使用的是maven,那么您需要绝对确保将库标记为
<scope>provided</scope>
如果这些已经由目标运行时提供,比如javaee、servlet、el等,以防部署到wildfly、tomee等,这样它们就不会以/WEB-INF/lib
但它们最终将进入eclipse的构建路径(并使项目的代码得以编译)。q0qdq0h25#
构建路径中的那些jar仅在构建(编译)过程中引用。如果你导出你的web应用程序,它们不会包含在最终的战争中(试试看)。
如果在运行时需要jar,则必须将它们放在webinf/lib或服务器类路径中。只有在多个war共享一个公共代码库并且需要访问共享对象(例如单例)的情况下,将jar放在服务器类路径中才有意义。
q1qsirdb6#
如果您使用的是maven:
打开项目属性,然后在部署程序集下单击添加。。。
然后选择java build path entries并选择maven dependencies