gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:14:04 25 4
gpt4 key购买 nike

我应该如何在 Eclipse 中将 JAR 库添加到 WAR 项目而不会遇到 java.lang.ClassNotFoundExceptionjava.lang.NoClassDefFoundError

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

我不完全明白为什么 CLASSPATH 不起作用,在什么情况下我们应该将 JAR 添加到 Build Path 以及这些 JAR 到底应该放在什么时候 /WEB-INF/lib.

最佳答案

CLASSPATH环境变量仅由 java.exe 使用命令,甚至只有在没有任何 -cp 的情况下调用命令时, -classpath , -jar争论。 CLASSPATH环境变量被 Eclipse、Netbeans 和 IDEA 等 IDE 忽略。另见 java.lang.ClassNotFoundException in spite of using CLASSPATH environment variable .

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

一些库已经由目标JEE服务器或servlet容器提供,例如JSP、Servlet、EL等,所以你不需要将这些库的JAR放在/WEB-INF/lib中。 .而且,它只会引起类加载的麻烦。仅在构建路径 中(间接)指定它们就足够了。在 Eclipse 中,您通常通过相应地设置Targeted Runtime 来做到这一点。它会自动结束在 Build Path 中。您无需手动将它们添加到构建路径。另见 How do I import the javax.servlet / jakarta.servlet API in my Eclipse project?

其他库,通常是第 3 方库,如 Apache Commons、JDBC 驱动程序和目标 servlet 容器未提供的 JEE 库(例如,Tomcat 不支持许多开箱即用的 JEE 库,如 JSF、JSTL、CDI、JPA、 EJB 等),需要以 /WEB-INF/lib 结尾.您只需将物理 JAR 文件复制并粘贴到其中即可。您不一定需要在Build Path 中指定它。也许只有当您已经将它作为用户库 时,您才应该为此使用部署程序集 设置。另见 ClassNotFoundException when using User Libraries in Eclipse build path .

如果您使用的是 Maven,那么您需要绝对确保将库标记为 <scope>provided</scope>如果目标运行时已经提供了这些,例如 JEE、Servlet、EL 等,以防您部署到 WildFly、TomEE 等。这样它们就不会在 /WEB-INF/lib 中结束。生成的 WAR(并可能导致与服务器捆绑库的冲突),但它们最终将出现在 Eclipse 的构建路径中(并获取要编译的项目代码)。另见 How to properly install and configure JSF libraries via Maven?

关于eclipse - 如何在不遇到 java.lang.ClassNotFoundException 的情况下将 JAR 库添加到 WAR 项目?类路径与构建路径与/WEB-INF/lib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39064227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com