eclipse—如何在不面对java.lang.classnotfoundexception的情况下向war项目添加jar库?类路径vs构建路径vs/web inf/lib

zbdgwd5y  于 2021-07-12  发布在  Java
关注(0)|答案(6)|浏览(376)

我应该如何在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 .

cidc1ykv

cidc1ykv1#

通过设置权限解决。在使用pyspark和oraclejdbc时出现了相关问题。该错误并不表示无法访问该文件,只是表示无法加载该类。
所以如果有人还在挣扎,请检查权限。有些人可能会觉得很明显。

hof1towb

hof1towb2#

本文解释了spring引导应用程序中的相同问题。还有一些有用的信息,如如何下载oracle jar文件,以及如何包含依赖关系、设置数据源等:
使用oracle配置spring boot

41zrol4v

41zrol4v3#

我想回答以下链接问题classnotfoundexception oracle.jdbc.driver.oracledriver only in servlet,using eclipse
ans:在myeclipse中转到服务器-->左键单击myeclipse tomcat7-->配置服务器连接器-->(展开)myeclipse tomcat7-->路径-->前置到类路径-->添加jar(添加oracle14 jar)-->确定

jchrr9hc

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的构建路径(并使项目的代码得以编译)。

q0qdq0h2

q0qdq0h25#

构建路径中的那些jar仅在构建(编译)过程中引用。如果你导出你的web应用程序,它们不会包含在最终的战争中(试试看)。
如果在运行时需要jar,则必须将它们放在webinf/lib或服务器类路径中。只有在多个war共享一个公共代码库并且需要访问共享对象(例如单例)的情况下,将jar放在服务器类路径中才有意义。

q1qsirdb

q1qsirdb6#

如果您使用的是maven:
打开项目属性,然后在部署程序集下单击添加。。。
然后选择java build path entries并选择maven dependencies

相关问题