Jakarta ee 哪些JAR需要出现在WEB-INF\lib和.classpath中

Jakarta ee 哪些JAR需要出现在WEB-INF\lib和.classpath中,jakarta-ee,maven,maven-2,war,ear,Jakarta Ee,Maven,Maven 2,War,Ear,我正在将常规J2EE应用程序转换为使用Maven。我能够成功地转换为Maven,并且我正在获得成功的“mvn部署”。将ear部署到WAS后,将面临此问题。我越来越 SRVE0203E:Servlet[action]org.apache.struts.action.ActionServlet缺少另一个必需的类 我在不同的应用程序中遇到了类似的问题,在尝试了几次JAR的“排除”之后,我成功地在was中部署了应用程序。我有以下问题 如何确定WEB inf\lib文件夹中需要存在哪些JAR 我们如何确定

我正在将常规J2EE应用程序转换为使用Maven。我能够成功地转换为Maven,并且我正在获得成功的“mvn部署”。将ear部署到WAS后,将面临此问题。我越来越 SRVE0203E:Servlet[action]org.apache.struts.action.ActionServlet缺少另一个必需的类

我在不同的应用程序中遇到了类似的问题,在尝试了几次JAR的“排除”之后,我成功地在was中部署了应用程序。我有以下问题

  • 如何确定WEB inf\lib文件夹中需要存在哪些JAR

  • 我们如何确定wars meta-inf的.class路径中需要存在哪些JAR

  • 即使在.classpath中提到了jar,但它必须存在于web inf\lib中(即classloader将从ear而不是war中提取),我们如何确定war是否有效


  • 仅供参考,我正在使用j2ee 1.4

    在容器中执行的Java EE应用程序有一个由几个级别组成的类路径:

  • Web应用程序类路径,由Web-INF/lib中包含的JAR和类文件表示
  • 企业应用程序类路径,包括EAR级别声明的JAR文件
  • 容器类路径,其中包含Websphere运行时和共享库
  • 这些级别之间有复杂的依赖关系规则,但主要思想是所有应用程序库都必须包含在这些级别之间,以避免任何可能损坏类路径的冲突

    考虑到这一点,一种过于简单的方法是将所有应用程序JAR放在WEB-INF/lib中。这是可行的,但是如果您的EAR有两个Web模块,那么每个模块都需要自己的JAR集。一个更可靠的方法是在耳朵级别包含普通的JAR,这样可以避免JAR重复

    如果您的公司有一个所有应用程序都使用的适当框架,那么在公司的每个EAR应用程序中包含相同的JAR将是愚蠢的。更好的方法是将公司框架配置为容器中的共享库,以便所有应用程序都可以重用它


    总之,有几个因素决定了JavaEE应用程序的类路径。您应该记住,始终避免重复和版本冲突,以便您的应用程序能够顺利解决it依赖关系。

    您好,卡洛斯,非常感谢您的建议。这就是我要面对的。1.若我是对的,那个么在ear和war中复制JAR会导致类加载问题。2.例如,如果我在我的web inf库中使用一些jar,比如struts.jar,那么在ear和war中避免双重性的最佳方法是什么,因为struts可能会引入一些额外的可传递依赖jar。因此,如果我们排除其他可传递依赖项,则在调用struts时部署时会说required class不可用,从而失败。我仍然有这个问题,我不知道如何解决这个问题。您的企业应用程序有多少个Web模块?如果它只有一个模块,也许最好的方法是将Struts和所有it依赖项放在WEB-INF库中,这样就不会弄乱其他模块的类路径。我有3个WEB模块,将所有JAR复制到所有3个war文件将消耗空间。在ear中使用共享空间的策略称为创建瘦战争。