耳朵方法
你可以把它放到 Tomcat webapps/ 目录中,它就会被拾取。
耳朵示例(有效):
myapplication.ear
lib/
lib/libraryOne.jar
lib/libraryTwo.jar
redEjbs.jar
blueEjbs.jar
常见错误(无效):
myapplication.ear
libraryOne.jar (err. not a javaee module)
libraryTwo.jar (err. not a javaee module)
redEjbs.jar
blueEjbs.jar
根目录中只允许使用 Java EE 模块。这些是 EJB jar、.war 文件、连接器 .rar 文件和应用程序客户端 jar。在 Java EE 5 之前,必须在 application.xml 文件中明确列出库。Java EE 5 及更高版本可以将它们添加到 lib/ 目录中,并且可以理解为只是普通的 jar,而不是 Java EE 模块。
折叠 EAR 方法
在 OpenEJB/Tomcat 中,您可以将所有库放入 war 文件中,并摆脱耳朵的概念。这现在是 Java EE 6 的一部分。
mywebapp.war
WEB-INF/lib/libraryOne.jar
WEB-INF/lib/libraryTwo.jar
WEB-INF/lib/redEjbs.jar
WEB-INF/lib/blueEjbs.jar
常见错误,包括规格:
mywebapp.war
WEB-INF/lib/javax.ejb.jar (err. clashes with the related system library)
WEB-INF/lib/libraryOne.jar
WEB-INF/lib/libraryTwo.jar
WEB-INF/lib/redEjbs.jar
WEB-INF/lib/blueEjbs.jar
听起来这不是问题,但为了完整性而添加。
常见错误,损坏的依赖关系:
tomcat/lib/libraryTwo.jar
mywebapp.war
WEB-INF/lib/libraryOne.jar
WEB-INF/lib/redEjbs.jar
WEB-INF/lib/blueEjbs.jar
从规范的角度来看,上述内容并非无效,服务器无法检测到,但仍可能导致应用程序无法正确加载。如果 libraryTwo.jar 需要 libraryOne.jar 中的类,那么这个应用程序将永远无法工作,因为 Tomcat“lib”类加载器无法看到“webapp”类加载器中的类,因此 libraryTwo.jar 中的类将永远不会成功加载。不幸的是,虚拟机几乎永远不会说出丢失的实际类,而是会报告导致需要丢失的类的事件链中的第一个类。这几乎总是一个 bean 或 servlet 类。