我正在转换常规J2EE应用程序以使用Maven。我能够成功转换为Maven,并且我获得了成功的“mvn deploy”。在将资源部署到WAS后面临的问题。我正进入(状态 SRVE0203E:Servlet [action] org.apache.struts.action.ActionServlet缺少另一个必需的类。
我对不同的应用程序有类似的问题,在尝试了几个“排除”jar之后,我能够在WAS中成功部署应用程序。我有以下问题。
我们如何识别WEB-inf \ lib文件夹中所有罐子需要出现的内容?
我们怎样才能确定战争meta-inf的.class-path中需要出现的所有罐子。
我们怎样才能确定即使在.classpath中提到了jar这个战争也行不通,但是并不强制它必须存在于web-inf \ lib中(即类加载器将从耳朵而不是战争中拉出来)
仅供参考我使用的是j2ee 1.4
答案 0 :(得分:2)
在Container中执行的Java EE应用程序具有由多个级别组成的类路径:
这些级别之间存在复杂的依赖关系规则,但主要思想是所有应用程序库必须包含在此级别之间,以避免任何可能破坏类路径的冲突。
考虑到这一点,一种简单的方法是将所有应用程序JAR放在WEB-INF / lib中。这可行,但如果您的EAR有两个Web模块,则每个模块都需要它自己的一组JARS。一种更强大的方法是在EAR级别包含通用JAR,以避免JAR的两面性。
如果案例是贵公司有一个所有应用程序都使用的专有框架,那么在公司的每个EAR应用程序中包含相同的JARS将是愚蠢的。更好的方法是将公司框架配置为Container中的共享库,以便所有应用程序都可以重用它。
总之,有几个因素决定了您的Java EE应用程序类路径。您应该记住始终避免重复和版本冲突,因此您的应用可以顺利解决它的依赖关系。