前言
Tomcat启动报错 具体如下
ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:743)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:719)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:714)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:970)
at org.apache.catalina.startup.HostConfig
D
e
p
l
o
y
W
a
r
.
r
u
n
(
H
o
s
t
C
o
n
f
i
g
.
j
a
v
a
:
1841
)
a
t
j
a
v
a
.
u
t
i
l
.
c
o
n
c
u
r
r
e
n
t
.
E
x
e
c
u
t
o
r
s
DeployWar.run(HostConfig.java:1841) at java.util.concurrent.Executors
DeployWar.run(HostConfig.java:1841)atjava.util.concurrent.ExecutorsRunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalArgumentException: MALFORMED
at java.util.zip.ZipCoder.toString(ZipCoder.java:58)
at java.util.zip.ZipFile.getZipEntry(ZipFile.java:566)
at java.util.zip.ZipFile.access
900
(
Z
i
p
F
i
l
e
.
j
a
v
a
:
60
)
a
t
j
a
v
a
.
u
t
i
l
.
z
i
p
.
Z
i
p
F
i
l
e
900(ZipFile.java:60) at java.util.zip.ZipFile
900(ZipFile.java:60)atjava.util.zip.ZipFileZipEntryIterator.next(ZipFile.java:524)
at java.util.zip.ZipFile
Z
i
p
E
n
t
r
y
I
t
e
r
a
t
o
r
.
n
e
x
t
E
l
e
m
e
n
t
(
Z
i
p
F
i
l
e
.
j
a
v
a
:
499
)
a
t
j
a
v
a
.
u
t
i
l
.
z
i
p
.
Z
i
p
F
i
l
e
ZipEntryIterator.nextElement(ZipFile.java:499) at java.util.zip.ZipFile
ZipEntryIterator.nextElement(ZipFile.java:499)atjava.util.zip.ZipFileZipEntryIterator.nextElement(ZipFile.java:480)
at java.util.jar.JarFile
J
a
r
E
n
t
r
y
I
t
e
r
a
t
o
r
.
n
e
x
t
(
J
a
r
F
i
l
e
.
j
a
v
a
:
257
)
a
t
j
a
v
a
.
u
t
i
l
.
j
a
r
.
J
a
r
F
i
l
e
JarEntryIterator.next(JarFile.java:257) at java.util.jar.JarFile
JarEntryIterator.next(JarFile.java:257)atjava.util.jar.JarFileJarEntryIterator.nextElement(JarFile.java:266)
at java.util.jar.JarFile$JarEntryIterator.nextElement(JarFile.java:247)
at org.apache.tomcat.util.scan.JarFileUrlJar.nextEntry(JarFileUrlJar.java:184)
at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:2009)
at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1970)
at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1923)
at org.apache.catalina.startup.ContextConfig.processClasses(ContextConfig.java:1230)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1134)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:769)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:299)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5063)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
… 10 more
提示:以下是本篇文章正文内容,下面案例可供参考
一、分析错误信息
通过网上调查给出的原因是tomcat运行的时候有class文件名称为中文字符。
由于包中的文件夹、文件特别多,不可能每个查看,并且这个包本来是好用的,但通过zip命令打包后就不好用了(业务需要),所以使用通过给源码的方式,catalina.jar—org.apache.catalina.startup.ContextConfig----processAnnotationsJar方法中添加输出日志形式,找到具体的错误文件。
二、操作步骤
1.获取源码:
https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.96/src/apache-tomcat-8.5.96-src.zip
2.idea引入工程:
pom文件内容:
代码如下(示例):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.tomcat</groupId>
<artifactId>Tomcat8.0</artifactId>
<name>Tomcat8.0</name>
<version>8.0</version>
<build>
<finalName>Tomcat8.0</finalName>
<sourceDirectory>java</sourceDirectory>
<testSourceDirectory>test</testSourceDirectory>
<resources>
<resource>
<directory>java</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>test</directory>
</testResource>
</testResources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<encoding>UTF-8</encoding>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<version>5.0.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.unboundid</groupId>
<artifactId>unboundid-ldapsdk</artifactId>
<version>6.0.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ant</groupId>
<artifactId>ant</artifactId>
<version>1.7.0</version>
</dependency>
<dependency>
<groupId>ant</groupId>
<artifactId>ant-apache-log4j</artifactId>
<version>1.6.5</version>
</dependency>
<dependency>
<groupId>ant</groupId>
<artifactId>ant-commons-logging</artifactId>
<version>1.6.5</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>javax.xml.rpc</groupId>
<artifactId>javax.xml.rpc-api</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.eclipse.jdt.core.compiler</groupId>
<artifactId>ecj</artifactId>
<version>4.6.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
3.找到对应的class文件 源码文件添加输出:
4.生成class文件,替换tomcat中的class文件:
重新build后会有对应的class文件生成,将文件直接拷贝到catalina.jar内,替换源文件,再次运行tomcat,会有具体的路径信息输出
总结
Tomcat启动报错 Caused by: java.lang.IllegalArgumentException: MALFORMED