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

一个第三方公司提供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:\dev\apache-tomcat-8.5.24\webapps\cardmanager.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)
    ... 10 more
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)
    ... 13 more
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)
    ... 16 more
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)
    ... 17 more

20-Mar-2019 15:48:28.610 严重 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Error deploying web application archive [F:\dev\apache-tomcat-8.5.24\webapps\cardmanager.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:\dev\apache-tomcat-8.5.24\webapps\cardmanager.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:\dev\apache-tomcat-8.5.24\webapps\cardmanager_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!

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

这就奇怪了,虽然大小是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 完全没有被压缩,都是原始大小:

确实是解压的时候出的错, 不过不是解压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

原文地址:https://www.cnblogs.com/FlyAway2013/p/10566447.html

时间: 2024-08-24 19:28:33

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

tomcat 启动时报java.util.zip.ZipException: error in opening zip file

项目运行部署tomcat中,一运行报java.util.zip.ZipException: error in opening zip file,其实tomcat有说明错误文件的位置,打开后发现在tomcat的webapps下面有个其它的项目,项目中的class文件下的lib中的有些jar发现是损坏的,删除掉就好了, 有些人说这个问题是maven导包问题,但我这个项目不是maven项目 原文地址:https://www.cnblogs.com/chenweng/p/8487248.html

maven install 读取jar包时出错;error in opening zip file

错误信息: [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile (default-compile) on project qchat-common: Compilation failure [ERROR] F

Spring Boot的每个模块包详解

Spring Boot的每个模块包详解,具体如下: 1.spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. 2.spring-boot-starter-actuator 帮助监控和管理应用. 3.spring-boot-starter-amqp 通过spring-rabbit来支持AMQP协议(Advanced Message Queuing Protocol). 4.spring-boot-starter-aop 支持面向方面的编程

MyEclipse+Tomcat 启动时出现A configuration error occured during startup错误的解决方法

MyEclipse+Tomcat 启动时出现A configuration error occured during startup错误的解决方法 分类: javaweb2013-06-03 14:43 3706人阅读 评论(0) 收藏 举报 当单击MyEclipse中的Debug server 启动服务器的时候,出现了这么个提示: Eclipse菜单,Window->Preference…,打开Preference对话框,找到菜单树中MyEclipse-> Application Serve

Spring Boot 2构建可部署的war包

默认情况下Spring Boot使用了内嵌的Tomcat服务器,项目最终被打成jar包运行,每个jar包可以被看作一个独立的Web服务器.传统的Web开发,一般会将Web应用打成一个war包,然后将其部署到Web服务器中运行.Spring Boot也支持传统的部署模式. 开发环境:IntelliJ IDEA 2019.2.2Spring Boot版本:2.1.8 1.新建一个名称为demo的Spring Boot项目. 2.修改pom.xml文件 下面粗体部分为所加代码,注释掉原来的build节

Spring Boot 部署浅析(jar or war)

对于传统的 ssm 或者 ssh 项目的部署,一般会打包成war包,或者是一个编译好的文件夹,再放到 tomcat 的 webapps 目录下,如果是 war 包,会自动解压出来.而 Spring Boot 默认会内嵌一个 Tomcat,因此即便是 web 项目也可以直接打包成 jar 包,直接 java -jar 运行就可以了. 用 Spring Initialzr 创建的 web 项目(选择打包成 jar),只会有一个 spring-boot-starter-web 依赖. <depende

eclipse插件maven的使用,web打包成WAR,tomcat下直接运行

1.首先下载maven  其下载地址为:http://maven.apache.org/download.html   下载apache-maven-3.0.3-bin.zip 环境变量配置为  变量名m2   值为%M2_HOME%\bin   变量名为M2_HOME   值为C:\Program Files\apache-maven-3.0.3    在变量名path里添加  %M2% 然后启动eclipse ,在help 里选择install new software 在里面 在URL上输

spring boot打包,依赖、配置文件分离,拷贝启动脚本

一.最终打包的目录结构 二.项目结构 三.开始 1.最终打包的目录,可根据自己需要修改. <properties> <mzservice.path>${project.build.directory}/mzservice</mzservice.path> </properties> 2.配置清理插件,每次打包前,清理之前生成的打包目录. <plugin> <artifactId>maven-clean-plugin</artif

spring boot工程打成JAR包到服务器上运行

只需在项目的pom.xml中加入下面插件 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin </artifactId> </plugin> <plugin> <groupId>org.springframework.boot