今天發布war時啟動resin時,發現服務器報以下錯誤:
[11:45:48.330] Host[] starting [11:45:48.470] java.util.zip.ZipException: error in opening zip file [11:45:48.470] at java.util.zip.ZipFile.open(Native Method) [11:45:48.470] at java.util.zip.ZipFile.<init>(ZipFile.java:127) [11:45:48.470] at java.util.jar.JarFile.<init>(JarFile.java:135) [11:45:48.470] at java.util.jar.JarFile.<init>(JarFile.java:72) [11:45:48.470] at com.caucho.vfs.Jar.getJarFile(Jar.java:608) [11:45:48.470] at com.caucho.vfs.Jar.getManifest(Jar.java:207) [11:45:48.470] at com.caucho.vfs.JarPath.getManifest(JarPath.java:178) [11:45:48.470] at com.caucho.loader.JarEntry.readManifest(JarEntry.java:100) [11:45:48.470] at com.caucho.loader.JarEntry.<init>(JarEntry.java:91) [11:45:48.470] at com.caucho.loader.LibraryLoader.addJar(LibraryLoader.java:241) [11:45:48.470] at com.caucho.loader.LibraryLoader.fillJars(LibraryLoader.java:234) [11:45:48.470] at com.caucho.loader.LibraryLoader.init(LibraryLoader.java:178) [11:45:48.470] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [11:45:48.470] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [11:45:48.470] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [11:45:48.470] at java.lang.reflect.Method.invoke(Method.java:597) [11:45:48.470] at com.caucho.config.BeanTypeStrategy.init(BeanTypeStrategy.java:318) [11:45:48.470] at com.caucho.config.NodeBuilder.configureImpl(NodeBuilder.java:259) [11:45:48.470] at com.caucho.config.NodeBuilder.configureChildImpl(NodeBuilder.java:303) [11:45:48.470] at com.caucho.config.BeanTypeStrategy.configure(BeanTypeStrategy.java:197) [11:45:48.470] at com.caucho.config.SetterAttributeStrategy.configure(SetterAttributeStrategy.java:91) [11:45:48.470] at com.caucho.config.NodeBuilder.configureAttributeImpl(NodeBuilder.java:381) [11:45:48.470] at com.caucho.config.NodeBuilder.configureBeanImpl(NodeBuilder.java:341) [11:45:48.470] at com.caucho.config.TypeStrategy.configureBean(TypeStrategy.java:103) [11:45:48.470] at com.caucho.config.BeanTypeStrategy.configureBean(BeanTypeStrategy.java:228) .... |
從日志內容可以看出,錯誤在服務器剛啟動的時候就發生,所以可以確定問題並不是一個項目的邏輯有問題。而unwar之后的一個項目數據存在問題。
一開始以為是war包打包存在問題,所以清空各種緩存,確認各種設置,並重新加war包,發現在還是存在問題,啟動之后還是報相同的Exception。
上網搜索相關Exception, 大部分的說法是: zip包存在問題,數據錯誤,所以導致打開zip的時候報Exception。
為了確認為什么打的war包會問題,就開始用ant的unwar命令打開war包,而不是由resin的來unwar,結果發現在unwar命令是成功的,並沒有任何問題。
那么問題出在哪兒呢??
查看打包過后的整個項目里的各種數據資源,發現存在zip文件的地方只有WEB-INF/lib/里,實際上這些zip文件是不需要放在WEB-INF/lib/里的,是這里出問題了?? 嘗試着把zip全部刪除,然后再重啟服務器, OK了!!!
由此可以看出resin加載項目的jar包里時,除了加載jar之外,還加載了zip包, 而此時在jar包的格式解析zip包里,就出錯了。