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
spring boot tomcat 打本地包成war,通过Tomcat启动时出现问题: ZipException: error in opening zip file的更多相关文章
- tomcat 启动项目时出现 ZipException: error in opening zip file
错误情况 项目用 maven 打好 war 包后放到 tomcat 下,启动 tomcat,出现以下错误 3-Nov-2017 12:21:44.346 严重 [localhost-startStop ...
- 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 ...
- maven install 读取jar包时出错;error in opening zip file
错误信息: [INFO] ------------------------------------------------------------------------ [ERROR] Failed ...
- spring boot中,jar包、war包的区别
jar包.war包 比较(表格) 项目 jar包 war包 在开发调试完成之后,可以将应用打成JAR包的形式,可以直接使用Maven插件的package命令,最终会形成一个可运行的 JAR包.我们使用 ...
- Spring Boot发布将jar包转为war包。
Spring Boot是支持发布jar包和war的,但它推荐的是使用jar形式发布.使用jar包比较方便,但如果是频繁修改更新的项目,需要打补丁包,那这么大的jar包上传都是问题.所以,jar包不一定 ...
- Spring Boot项目生成jar包,并在windows服务器中注册成服务,开机启动
背景: 使用Spring Boot开发的Web项目,打包生成了一个jar包,希望能部署在Windows服务器中 尝试: 1.Spring Boot生成的jar包,可以直接用java -jar运行,但是 ...
- Spring Boot的每个模块包详解
Spring Boot的每个模块包详解,具体如下: 1.spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. 2.spring-boot-s ...
- 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 ...
- Spring Boot源码(三):去除Tomcat
Spring boot中使用的是内置的Tomcat,而不像Spring mvc那样依赖外部tomcat运行项目. spring boot中导入了Tomcat的jar包: 点进一个Spring boot ...
随机推荐
- CentOS7下MySQL5.7安装配置方法图文教程(YUM)
安装环境:CentOS7 64位,MySQL5.7 1.配置YUM源 在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads/repo/yum/ # ...
- 2019OO第二单元作业总结
OO第二单元的作业主题是模拟电梯. ---------------------------------------------------------------------------------- ...
- JS写法 数值与字符串的相互转换 取字符中的一部分显示 正则表达规则
http://www.imooc.com/article/15885 正则表达规则 <script type="text/javascript"> </scrip ...
- Sqoop简介
一 Sqoop是什么 Sqoop:SQL-to-Hadoop 连接传统关系型数据库和Hadoop的桥梁 把关系型数据库的数据导入到 Hadoop 系统 ( 如 HDFS.HBase 和 Hive) ...
- 移除元素-leetcode-27
class Solution {public: int removeElement(vector<int>& nums, int val) { if(nums. ...
- C++ 基于凸包的Delaunay三角网生成算法
Delaunay三角网,写了用半天,调试BUG用了2天……醉了. 基本思路比较简单,但效率并不是很快. 1. 先生成一个凸包: 2. 只考虑凸包上的点,将凸包环切,生成一个三角网,暂时不考虑Delau ...
- Game Development Patterns and Best Practices (John P. Doran / Matt Casanova 著)
https://github.com/PacktPublishing/Game-Development-Patterns-and-Best-Practices https://github.com/m ...
- 注册Docker Hub、以及Push(九)
一.注册 1.使用浏览器打开官网的时候,发现注册按钮点不了 2.下载google访问助手,添加到浏览器 下载地址:http://www.ggfwzs.com/,根据 ...
- Go 常用命令
Go 常用命令 含义 go run file_name.go
- Logback动态修改日志级别
https://blog.csdn.net/totally123/article/details/78931287