2011-07-19 20 views
25
  • 的Tomcat 7.0.16
  • 的Java 1.6.0_22
  • CentOS的無效字節標籤5.6

我剛換的web.xml中的servlet 3.0(從運行2.4以前),現在我看到下面的錯誤一個應用程序(打開測井精細的org.apache.tomcat.util):Tomcat的7 - 3.0的Servlet:在常量池中

mtyson FINE: Scanning JAR [file:/usr/java/jdk1.6.0_22/jre/lib/ext/jcharset.jar] from classpath 
mtyson Jul 19, 2011 10:04:40 AM org.apache.catalina.startup.HostConfig deployDirectory 
mtyson SEVERE: Error deploying web application directory ROOT 
mtyson org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 60 

更新:剛剛嘗試tomcat 7.0.19 - 相同的結果

回答

23

它可能不是你的問題,但我的是same as this one - 舊版本的com.ibm.icu:icu4j。我通過更改構建配置來排除舊的傳遞依賴性,並明確依賴於最新版本(4.8)來解決問題。

+1

感謝詹姆斯,這個工作對我來說,我在下面的Maven配置。 –

2

我覺得這是解析web.xml文件自己

使用這個對我的作品中的錯誤...

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 

<session-config> <tracking-mode>COOKIE</tracking-mode> </session-config>

注意使用的版本=「2.5 「與web-app_3_0.xsd模式和會話配置跟蹤模式的存在只是3.0規範的一部分而不是2.5(AFAIK)

2

這轉身證明是不兼容的碧玉罐子被包括在建,在Tomcat中與jasper.jar衝突的7

+1

正是我的問題,謝謝。我需要的做的是升級的Tomcat 7 –

18

感謝James A Wilson for your answer - 更新ICU4J如你所說的工作對我並讓我保持版本=「3.0」在我web.xml(我更喜歡長期使用)。

icu4j 2.6.1是沒有工作的版本,升級到NEXT版本3.4.4將解決這個問題。我沒有去到最新版本的icu4j(49.1),因爲它比3.4.4版本大4MB。

這裏是一個Maven配置片段在你的傳遞依賴的版本鎖定(無添加的顯式依賴):

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>com.ibm.icu</groupId> 
      <artifactId>icu4j</artifactId> 
      <version>3.4.4</version> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 
27

添加

metadata-complete="true" 

到你的web.xml應該排序的問題

<web-app version="3.0" 
     xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
     metadata-complete="true"> 

這告訴tomcat不要掃描類的註釋: http://www.tomcatexpert.com/blog/2011/10/12/how-use-fragments-and-annotations-configure-your-web-application

+1

真棒建議 - 這個工作對我來說... – ProfVersaggi

+1

這是什麼做的正是(+1順便說一句,因爲它的工作原理) – NimChimpsky

+4

請記住,通過這樣做,你**贏」? T **能夠使用的標註。 –

2

今天我遇到了同樣的問題。在我的情況下,依賴是通過com.google.code.findbugs:annotations:jar:1.3.8。這意味着這個庫僅在構建時使用,使用註釋來關閉一些findbug警告。在這種情況下,而不是改變的版本,它是安全的,只是改變了依賴範圍,而不是將磁帶庫在運行時:

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>com.ibm.icu</groupId> 
      <artifactId>icu4j</artifactId> 
      <scope>provided</scope> 
     </dependency> 
     .... 
1

我正面臨從一個星期了同樣的問題和解決的只需更換ICU4J 0.2。1. jar文件與最新版本的jar。

0

在版本2.6.1中。 com.ibm.icu.impl.data.LocaleElements_zh__PINYIN.class無效。唯一的解決方案是更新,其他解決方案只是解決方法。

它可以通過在項目中運行以下測試(ICU提供-xxxjar是在classpath)檢查:

@Test public void testValidityOfLocaleElements_zh__PINYINJar() throws ClassNotFoundException { getClass().forName("com.ibm.icu.impl.data.LocaleElements_zh__PINYIN"); }

0

我們已經開始變得非常相同的錯誤出現輕微變化我們的應用程序沒有任何升級到Java,Tomcat或項目依賴關係。我們有ICU4J 2.6.1

花費相當可觀的時間和努力ICU4J升級到各種新版本後(我們注意到,發現amouzing是ICU版本從4.8.x去49.xx,50.xx等,必須有人在建設4.9.0時發現了它),我們發現了這個問題。

我們的微小變化提交映射到冬眠一個新類(A類)。 Hibernate在啓動WAR時初始化,並根據映射檢查持久對象。碰巧有另一個類是一個enum(B類),它在我們的代碼庫中具有相同的名稱和相同的包。一旦我們修復了重複的課程,問題就消失了。