Eclipse 如何在不面对java.lang.ClassNotFoundException的情况下将JAR库添加到WAR项目中?类路径vs构建路径vs/WEB-INF/lib

Eclipse 如何在不面对java.lang.ClassNotFoundException的情况下将JAR库添加到WAR项目中?类路径vs构建路径vs/WEB-INF/lib,eclipse,jakarta-ee,jar,classpath,war,Eclipse,Jakarta Ee,Jar,Classpath,War,如何在Eclipse中将JAR库添加到WAR项目中,而不面对java.lang.ClassNotFoundException或java.lang.NoClassDefFoundError CLASSPATH环境变量似乎不起作用。在某些情况下,我们将JAR文件添加到Eclipse项目的buildpath属性中,以使代码能够编译。我们有时需要将JAR文件放在JavaEEWeb应用程序的/WEB-INF/lib文件夹中,以使代码在JAR中的类上运行 我不太明白为什么类路径不起作用,在哪些情况下我们应该

如何在Eclipse中将JAR库添加到WAR项目中,而不面对
java.lang.ClassNotFoundException
java.lang.NoClassDefFoundError


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


我不太明白为什么
类路径
不起作用,在哪些情况下我们应该将JAR添加到构建路径,以及这些JAR应该确切地放置在
/WEB-INF/lib
中,构建路径中的JAR仅在构建(编译)过程中引用。如果您导出您的Web应用程序,它们不会包含在最终的WAR中(请尝试)


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

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


如果您在运行时需要JAR,则必须将它们放在WEB-INF/lib或服务器类路径中。只有在多个WAR共享一个公共代码库并且需要访问共享对象(例如单例)时,将JAR放在服务器类路径中才有意义。Eclipse、Netbeans和IDEA等ide会忽略
CLASSPATH
环境变量。另见

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

一些库已经由目标JEE服务器或servletcontainer提供,如JSP、Servlet、EL等。因此,您不需要将这些库的JAR放入
/WEB-INF/lib
中。而且,这只会导致类加载问题。仅在构建路径中(间接地)指定它们就足够了。在Eclipse中,通常通过相应地设置目标运行时来实现这一点。它将自动结束在生成路径中。您不需要手动将它们添加到生成路径。另见

其他库,通常是第三方库,如Apache Commons、JDBC驱动程序和JEE库,这些库不是由目标servletcontainer提供的(例如Tomcat不支持许多现成的JEE库,如JSF、JSTL、CDI、JPA、EJB等),需要以
/WEB-INF/lib
结束。您可以将物理JAR文件复制并粘贴到其中。您不一定需要在生成路径中指定它。只有当您已经将它作为用户库时,才可以使用部署程序集设置。另见


在使用Maven的情况下,如果目标运行时已经提供了库(如JEE、Servlet、EL等),那么您需要绝对确保将库标记为“已提供”,以防部署到WildFly、TomEE等。这样,它们就不会最终出现在WAR的
/WEB-INF/lib
中(并可能导致与服务器绑定库的冲突),但它们最终将位于Eclipse的构建路径中(并获得要编译的项目代码)。另请参见只有
java.exe
命令才使用
CLASSPATH
环境变量,甚至只有在调用该命令时没有任何
-cp
-CLASSPATH
-jar
参数。Eclipse、Netbeans和I等IDE都会忽略
CLASSPATH
环境变量DEA,另见

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

一些库已经由目标JEE服务器或servletcontainer提供,如JSP、Servlet、EL等。因此,您不需要将这些库的JAR放入
/WEB-INF/lib
。此外,这只会导致类加载问题。这足以(间接地)实现仅在生成路径中指定它们。在Eclipse中,通常通过相应地设置目标运行时来执行此操作。它将自动在生成路径中结束。您无需手动将它们添加到生成路径。另请参阅

其他库,通常是第三方库,如Apache Commons、JDBC驱动程序和JEE库,这些库不是由目标servletcontainer提供的(例如,Tomcat不支持许多现成的JEE库,如JSF、JSTL、CDI、JPA、EJB等),需要在
/WEB-INF/lib
中结束。您可以将物理JAR文件复制并粘贴到其中。您不必