如何在不面对java.lang.ClassNotFoundException的情况下将JAR库添加到WAR项目中?Classpath vs Build Path vs/WEB-INF/lib

10 eclipse jar war classpath java-ee

我应该如何添加JAR库在Eclipse中一个WAR项目没有遇到java.lang.ClassNotFoundExceptionjava.lang.NoClassDefFoundError

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

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

Bal*_*usC 8

CLASSPATH环境变量仅用于由所述java.exe命令并在使用时连那么只有没有任何的-cp,-classpath,-jar参数.它被Eclipse,Netbeans和IDEA等IDE忽略了.尽管使用了CLASSPATH环境变量,另请参见java.lang.ClassNotFoundException.

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

一些库已由目标Java EE服务器或servletcontainer提供,例如JSP,Servlet,EL等.因此,您不需要将这些库的JAR放入其中/WEB-INF/lib.而且,它只会导致类加载麻烦.仅在Build Path中(间接)指定它们就足够了.在Eclipse中,通常通过相应地设置Targeted Runtime来实现.它将自动以Build Path结束.另请参见如何在Eclipse项目中导入javax.servlet API?

其他库,通常是第三方库,如Apache Commons,JDBC驱动程序和目标servletcontainer未提供的标准库(例如Tomcat不支持JSF,CDI,JPA,EJB等),需要最终进入/WEB-INF/lib.您不一定需要在Build Path中指定它.只有当您已将其作为用户库时,才应该使用部署程序集设置.在Eclipse构建路径中使用用户库时,另请参见ClassNotFoundException.

如果您正在使用Maven,那么您需要确保将库标记为<scope>provided</scope>已经由目标运行时提供的库,例如Java EE,Servlet,EL等,以防您部署到WildFly,TomEE等这样它们就不会/WEB-INF/lib产生生成的WAR(并且可能导致与服务器捆绑的库发生冲突),但它们最终会出现在Eclipse的Build Path中(并获得项目的代码进行编译).


归档时间:

查看次数:

17010 次

最近记录:

6 年,8 月 前