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

  1. 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]
  2. 20-Mar-2019 15:48:28.597 严重 [localhost-startStop-1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start:
  3. org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/cardmanager]]
  4. at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
  5. at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752)
  6. at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
  7. at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
  8. at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:986)
  9. at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
  10. at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
  11. at java.util.concurrent.FutureTask.run(FutureTask.java:262)
  12. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
  13. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
  14. at java.lang.Thread.run(Thread.java:744)
  15. Caused by: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.webresources.StandardRoot@7921dcac]
  16. at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
  17. at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4860)
  18. at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4995)
  19. at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
  20. ... 10 more
  21. Caused by: org.apache.catalina.LifecycleException: Failed to initialize component [org.apache.catalina.webresources.JarResourceSet@5865a4ba]
  22. at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:112)
  23. at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140)
  24. at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:724)
  25. at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
  26. ... 13 more
  27. Caused by: java.lang.IllegalArgumentException: java.util.zip.ZipException: error in opening zip file
  28. at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:142)
  29. at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
  30. ... 16 more
  31. Caused by: java.util.zip.ZipException: error in opening zip file
  32. at java.util.zip.ZipFile.open(Native Method)
  33. at java.util.zip.ZipFile.<init>(ZipFile.java:215)
  34. at java.util.zip.ZipFile.<init>(ZipFile.java:145)
  35. at java.util.jar.JarFile.<init>(JarFile.java:153)
  36. at java.util.jar.JarFile.<init>(JarFile.java:117)
  37. at org.apache.tomcat.util.compat.JreCompat.jarFileNewInstance(JreCompat.java:188)
  38. at org.apache.tomcat.util.compat.JreCompat.jarFileNewInstance(JreCompat.java:173)
  39. at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:139)
  40. ... 17 more
  41.  
  42. 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]
  43. java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/cardmanager]]
  44. at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:756)
  45. at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
  46. at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
  47. at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:986)
  48. at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1857)
  49. at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
  50. at java.util.concurrent.FutureTask.run(FutureTask.java:262)
  51. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
  52. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
  53. at java.lang.Thread.run(Thread.java:744)
  54.  
  55. 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
  56. 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引入的,所以。

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-maven-plugin</artifactId>
  6. <configuration>
  7. <fork>true</fork>
  8. <includeSystemScope>true</includeSystemScope>
  9. </configuration>
  10. </plugin>
  11. <plugin>
  12. <groupId>org.apache.maven.plugins</groupId>
  13. <artifactId>maven-war-plugin</artifactId>
  14. <configuration>
  15. <webResources>
  16. <resource>
  17. <directory>${project.basedir}/../lib</directory>
  18. <targetPath>WEB-INF/lib</targetPath>
  19. <filtering>true</filtering>
  20. <includes>
  21. <include>**/*.jar</include>
  22. </includes>
  23. </resource>
  24. </webResources>
  25. <warName>cardmanager</warName>
  26. </configuration>
  27. </plugin>
  28. </plugins>
  29. </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 就可以了!!! :

  1. <plugin>
  2. <groupId>org.apache.maven.plugins</groupId>
  3. <artifactId>maven-war-plugin</artifactId>
  4. <configuration>
  5. <webResources>
  6. <resource>
  7. <directory>${project.basedir}/src/main/resources/ify</directory>
  8. <targetPath>WEB-INF/lib</targetPath>
  9. <filtering>false</filtering>
  10. <includes>
  11. <include>**/*.jar</include>
  12. </includes>
  13. </resource>
  14. </webResources>
  15. </configuration>
  16. </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

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

  1. tomcat 启动项目时出现 ZipException: error in opening zip file

    错误情况 项目用 maven 打好 war 包后放到 tomcat 下,启动 tomcat,出现以下错误 3-Nov-2017 12:21:44.346 严重 [localhost-startStop ...

  2. Tomcat启动报错:org.apache.catalina.LifecycleException: Failed to start component...java.util.zip.ZipException: error in opening zip file

    1.项目环境 IntelliJ IDEA2018.1.6 apache-tomcat-8.0.53 基于springboot开发的项目 maven3.5.3 2.出现问题 从svn同步下项目 启动to ...

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

    错误信息: [INFO] ------------------------------------------------------------------------ [ERROR] Failed ...

  4. spring boot中,jar包、war包的区别

    jar包.war包 比较(表格) 项目 jar包 war包 在开发调试完成之后,可以将应用打成JAR包的形式,可以直接使用Maven插件的package命令,最终会形成一个可运行的 JAR包.我们使用 ...

  5. Spring Boot发布将jar包转为war包。

    Spring Boot是支持发布jar包和war的,但它推荐的是使用jar形式发布.使用jar包比较方便,但如果是频繁修改更新的项目,需要打补丁包,那这么大的jar包上传都是问题.所以,jar包不一定 ...

  6. Spring Boot项目生成jar包,并在windows服务器中注册成服务,开机启动

    背景: 使用Spring Boot开发的Web项目,打包生成了一个jar包,希望能部署在Windows服务器中 尝试: 1.Spring Boot生成的jar包,可以直接用java -jar运行,但是 ...

  7. Spring Boot的每个模块包详解

    Spring Boot的每个模块包详解,具体如下: 1.spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. 2.spring-boot-s ...

  8. IntelliJ IDEA启动spring boot项目出现Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]]

    IntelliJ IDEA启动spring boot项目出现Failed to start component [StandardEngine[Tomcat].StandardHost[localho ...

  9. Spring Boot源码(三):去除Tomcat

    Spring boot中使用的是内置的Tomcat,而不像Spring mvc那样依赖外部tomcat运行项目. spring boot中导入了Tomcat的jar包: 点进一个Spring boot ...

随机推荐

  1. L1-043 阅览室

    天梯图书阅览室请你编写一个简单的图书借阅统计程序.当读者借书时,管理员输入书号并按下S键,程序开始计时:当读者还书时,管理员输入书号并按下E键,程序结束计时.书号为不超过1000的正整数.当管理员将0 ...

  2. 20164301 Exp1 PC平台逆向破解

    逆向及Bof基础实践 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常执行流程是:main调用foo函数, foo函数会简单回显任何用户输入的字符串.该程序同时包含另一 ...

  3. [原] RTTI 为什么type_info 有比较操作

    The lifetime of the object returned by typeid extends to the end of the program. 根据C++标准, typeid()返回 ...

  4. Vue 错误记录:Cannot read property 'beforeRouteEnter' of undefined

    点击某路由链接,页面提示: Cannot read property 'beforeRouteEnter' of undefined 查看代码并无手写beforeRouterEnter设置, 把页面内 ...

  5. 剑指offer 11. 位运算 二进制中1的个数

    题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示.   //思想:用1(1自身左移运算,其实后来就不是1了)和n的每位进行位与,来判断1的个数     private stat ...

  6. C编程中printf不加'\n'不输出

    有时,使用printf("a=%d",a);并不一定会输出显示,只有当在格式化输出时加上'\n'才能输出,如printf("a=%d\n",a); 由于unix ...

  7. git 常用命令思维导图

  8. nginx1.14.0版本location路径配置四种方式

    假设下面四种情况分别用 http://192.168.1.1/proxy/test.html 进行访问. 第一种:location /proxy/ {    proxy_pass http:// 12 ...

  9. NodeJs Fs模块

    和前面的Http.Url模块一样,Fs模块也是node的核心模块之一,主要用于对系统文件及目录进行读写操作. 基本方法 fs.stat fs.stat可以用来判断是文件还是目录:stats.isFil ...

  10. 转载:mongodb的两阶段提交实战

    项目中用到了mongodb(3.x版本),业务上需要操作mongodb的多个collections,希望要么同时操作成功,要么回滚操作保持数据的一致性,这个实际上要求在mongodb上实现事务功能,在 ...