WEB-INF \ lib和.classpath中需要存在哪些jar

时间:2012-03-05 02:29:11

标签: java-ee maven maven-2 war ear

我正在转换常规J2EE应用程序以使用Maven。我能够成功转换为Maven,并且我获得了成功的“mvn deploy”。在将资源部署到WAS后面临的问题。我正进入(状态 SRVE0203E:Servlet [action] org.apache.struts.action.ActionServlet缺少另一个必需的类。

我对不同的应用程序有类似的问题,在尝试了几个“排除”jar之后,我能够在WAS中成功部署应用程序。我有以下问题。

  1. 我们如何识别WEB-inf \ lib文件夹中所有罐子需要出现的内容?

  2. 我们怎样才能确定战争meta-inf的.class-path中需要出现的所有罐子。

  3. 我们怎样才能确定即使在.classpath中提到了jar这个战争也行不通,但是并不强制它必须存在于web-inf \ lib中(即类加载器将从耳朵而不是战争中拉出来)

  4. 仅供参考我使用的是j2ee 1.4

1 个答案:

答案 0 :(得分:2)

在Container中执行的Java EE应用程序具有由多个级别组成的类路径:

  1. Web应用程序类路径,由WEB-INF / lib
  2. 中包含的JAR和Class文件表示
  3. 企业应用程序类路径,包括在EAR级别声明的JAR文件
  4. 容器类路径,包含Websphere Runtime和共享库
  5. 这些级别之间存在复杂的依赖关系规则,但主要思想是所有应用程序库必须包含在此级别之间,以避免任何可能破坏类路径的冲突。

    考虑到这一点,一种简单的方法是将所有应用程序JAR放在WEB-INF / lib中。这可行,但如果您的EAR有两个Web模块,则每个模块都需要它自己的一组JARS。一种更强大的方法是在EAR级别包含通用JAR,以避免JAR的两面性。

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

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