耳法
你只需拖放到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文件,Connector .rar文件和Application Client 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類。
我覺得TOMCAT_HOME/lib目錄就是去避免任何類加載器問題的方式。見http://usna86-techbits.blogspot.com/2009/12/tomcat-openejb-and-jersey-oh-my.html – JoseK 2010-10-14 09:21:28
@JoseK我認爲,特別是問題涉及到包括在webapp的javax庫。其中大多數是通過OpenEJB附帶的javaee-api jar添加的。其他第三方庫應該沒問題。如果你有其他經歷,絕對讓我知道。 – 2010-10-14 11:07:00