今天发布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包里,就出错了。