spring boot tomcat 打本地包成war,通过Tomcat启动时出现问题: ZipException: error in opening zip file

摘要:
第三方公司提供了springboot项目。直接开始是可以的,但它被包装成了一场战争。Tomcat启动后,ZipException:erroriopeningzip文件:2019年3月20日5:48:28.385信息[localhost startStop-1]org.apache.catalina.startup.HostConfig。出现deployWARDDeployingwebapp

一个第三方公司提供spring boot 项目,直接启动是ok的, 但是打包成war,通过Tomcat启动,就出现 ZipException: error in opening zip file:

20-Mar-2019 15:48:28.385 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [F:devapache-tomcat-8.5.24webappscardmanager.war]
20-Mar-2019 15:48:28.597 严重 [localhost-startStop-1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start: 
 org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/cardmanager]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:986)
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.webresources.StandardRoot@7921dcac]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
    at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4860)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4995)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 10more
Caused by: org.apache.catalina.LifecycleException: Failed to initialize component [org.apache.catalina.webresources.JarResourceSet@5865a4ba]
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:112)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140)
    at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:724)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 13more
Caused by: java.lang.IllegalArgumentException: java.util.zip.ZipException: error in opening zip file
    at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:142)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
    ... 16more
Caused by: java.util.zip.ZipException: error in opening zip file
    at java.util.zip.ZipFile.open(Native Method)
    at java.util.zip.ZipFile.<init>(ZipFile.java:215)
    at java.util.zip.ZipFile.<init>(ZipFile.java:145)
    at java.util.jar.JarFile.<init>(JarFile.java:153)
    at java.util.jar.JarFile.<init>(JarFile.java:117)
    at org.apache.tomcat.util.compat.JreCompat.jarFileNewInstance(JreCompat.java:188)
    at org.apache.tomcat.util.compat.JreCompat.jarFileNewInstance(JreCompat.java:173)
    at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:139)
    ... 17more
20-Mar-2019 15:48:28.610 严重 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Error deploying web application archive [F:devapache-tomcat-8.5.24webappscardmanager.war]
 java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/cardmanager]]
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:756)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:986)
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
20-Mar-2019 15:48:28.620 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [F:devapache-tomcat-8.5.24webappscardmanager.war] has finished in [234] ms
20-Mar-2019 15:48:28.621 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [F:devapache-tomcat-8.5.24webappscardmanager_20190320.war]

我也真是郁闷了, 搞了几个小时还是没有发现原因哦!

为什么第三方公司 启动就ok呢? 它们有私服,我这里没有使用私服, 依赖的ojdbc 的jar 是通过system引入的,所以。

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                    <includeSystemScope>true</includeSystemScope>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <webResources>
                        <resource>
                            <directory>${project.basedir}/../lib</directory>
                            <targetPath>WEB-INF/lib</targetPath>
                            <filtering>true</filtering>
                            <includes>
                                <include>**/*.jar</include>
                            </includes>
                        </resource>
                    </webResources>
                    <warName>cardmanager</warName>
                </configuration>
            </plugin>
        </plugins>
    </build>

...

Maven 编译打包都没有问题,为什么就是不行呢? war 本身应该是没问题的吧?

不过, 从上面的错误日志来看,确实是出现了问题。 搜索了半天,尝试了半天,还是不行。有的博客上说,删除maven的资源库中所有的jar包,然后重新通过maven编译项目,我试了不行。。

https://blog.csdn.net/u012012240/article/details/79571539上说:

问题:
spring-boot项目本地运行没问题,部署线上出现环境问题,因为本地spring-boot使用tomcat8内置jar包(存放于lib文件夹下),线上配置的tomcat7环境而使用tomcat8的jar包,所以报错。

解决:
1.在pom文件中将tomcat的版本调整为tomcat7,编译后替换下上的tomcat jar包(亲测可用)
2.修改线上tomcat环境为tomcat8环境(感兴趣的可以试试,项目时间紧就没试)

参考文章:http://blog.csdn.net/asdfsfsdgdfgh/article/details/52127562

难道我Tomcat有问题? 发现都是tomcat8, 应该是不存在这样的问题的吧!

https://blog.csdn.net/qq_31293575/article/details/84262302 上说:

idea在创建目录a后再创建目录b,会出现创建出a.b目录的问题,这会影响到tomcat编译启动

需要在创建目录a后随便创建一个文件,然后再创建b目录。(idea的bug)

感觉完成是胡扯

偶然发现 我的 本地引入的ojdbc的版本是ojdbc14_g.jar, 而 他们的是ojdbc7-12.1.0.1.0.jar, 难道这个原因?

替换成了他们的jar,发现还是不行。。

https://blog.csdn.net/qq_23599977/article/details/78140470上说:

之后排查仓库问题,发现是spring-context包下载问题。根本就没有这方面想,公司自己搭建的maven服务器,下载还能出错??而且mavenjar下载失败,你也报个问题啊,还是build success!

我这里仓库难道有问题? 诚惶诚恐啊! 但是通过-X 参数调试过了,并没有发现error 信息。 可见,并不是仓库问题吧。

https://blog.csdn.net/wujunyucg/article/details/78437601 上说:

首先检查有没有 zip 包
没有 zip 包,那剩下的只能是 jar 包。
在网上搜了一阵后,发现很多情况是在 maven 打包是就出现了这个错误,就能找到是哪个包,之后就好解决了。
但是我每次都是没有错误,成功打包
之后花式打包,调各种参数,都失败了
在这样的情况下,只能调试 tomcat 了(我想到的本办法,如果有更好的办法请告述我!!!)
之后就是调试 tomcat 源码了,详情请点击。
tomcat 源码 org.apache.catalina.util.LifecycleBase.init 这个位置打断点,终于发现是哪个 jar 包了。

发现只剩调试 tomcat 源码一条路了, 这也太麻烦了吧, 我真是不愿意。。

后面发现, 我的war 解压后, 对应的 ojdbc jar 的大小发生了变化, 他们的ojdbc7-12.1.0.1.0.jar 大小是3319k, 我的war 解压后的ojdbc7-12.1.0.1.0.jar 大小是5872k 应该已经不是原始的那个了jar!

spring boot tomcat 打本地包成war,通过Tomcat启动时出现问题: ZipException: error in opening zip file第1张

双击通过jd-gui 打开 发现没有任何内容! 后缀改为 zip ,然后解压, 发现了下面的错误:

spring boot tomcat 打本地包成war,通过Tomcat启动时出现问题: ZipException: error in opening zip file第2张

这就奇怪了,虽然大小是5872k,但是无法正常解压! 应该是压缩的过程出现了问题!!

手动替换ojdbc7-12.1.0.1.0.jar 为他们的jar 就好了! 当然,这不是最终的解决方案。

这样看来, 可以肯定的是spring-boot-maven-plugin 或者maven-war-plugin 插件对 scope 为 system的 dependency 做了什么手脚!!

最终的方案其实很简单,如下,把filtering 配置成 fasle 就可以了!!! :

        <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <webResources>
                        <resource>
                            <directory>${project.basedir}/src/main/resources/ify</directory>
                            <targetPath>WEB-INF/lib</targetPath>
                            <filtering>false</filtering>
                            <includes>
                                <include>**/*.jar</include>
                            </includes>
                        </resource>
                    </webResources>
                </configuration>
            </plugin>

里面lib 的jar 完全没有被压缩,都是原始大小:

spring boot tomcat 打本地包成war,通过Tomcat启动时出现问题: ZipException: error in opening zip file第3张

确实是解压的时候出的错, 不过不是解压war的时候出现问题(实际上war 的解压是完全正常的), 而是 启动时, 连接数据库,然后加载class,然后 引用到 对应的ojdbc jar 的时候出现的问题!

这个错误提示 , 根本看不到哪里的问题, 真是坑!

参考:

https://blog.csdn.net/wujunyucg/article/details/78438836

https://blog.csdn.net/wujunyucg/article/details/78437601

https://blog.csdn.net/qq_35246620/article/details/75013964

https://blog.csdn.net/wangming520liwei/article/details/78222793

https://blog.csdn.net/xiang_6119/article/details/80169465

https://blog.csdn.net/u013041642/article/details/82988604

免责声明:文章转载自《spring boot tomcat 打本地包成war,通过Tomcat启动时出现问题: ZipException: error in opening zip file》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇VS,VAX一些快捷键记录kafka单机安装和启动下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

TCP流量控制和拥塞控制

第一个问题是收割台中的流量控制。TCP使用滑动窗口机制。第二个问题是报头中的拥塞控制。在具有不同网络速度的机器进行通信的环境中,拥有流量控制机制非常重要。...

四分位数

四分位数是统计学里一个很重要的概念,实际应用中,所画出来的箱图,就使用到了这个概念,只有懂了四分位的概念才能看懂箱图所表达的意思。我这里通过一个实际的案例来说明四分位数的求取过程。首先我们看下数据的情况,如下图所示,数据的总个数为10个1、在求取四分位数据时,首先必须做的是要对数据进行升序排序,如下图。例如:n的值为5、9、13等等,就是可以在数列中直接找到...

ubuntu 常见安装软件错误

安装xlibs dev.2。错误:apt-get-installlibqt3-headers libqt3-mt-dev3。错误:这基本上意味着它要安装许多KDEspecificpackagestowork。这个'configure:aapt-get-installbuild essential7。错误:...

四、使用ADB命令清除缓存

1、 ADBShell应用程序查看目录结构:adbshells查看系统当前日期:adbselldate查看系统CPU使用情况:adbsHELcat/proc/cpuinfo查看系统内存使用情况:adbshellcat/proc/meminfo显示所有应用程序:adbshelpmlistpackages显示系统自带的应用程序:adshellpmlistpack...

【工具技巧】:sublime notepad++ 多行编辑

将光标定位到一行-˃ctrl+shift+↑↓, 上下移动一行。选择-˃ctrl+shift后+↑↓, 上下移动所选区域。再次按6:Ctrl+Shift+Enter在光标前插入一行。...

「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。108种传感器模块系列实验实验二十六:4X4矩阵键盘模块矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组。工作原理矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。矩阵键盘所需库文件在ArduinoIDE1.8.0...