龙空技术网

调试tomcat源码步骤

架构月亮姨 342

前言:

此刻兄弟们对“apachetomcat源码”都比较注重,我们都想要学习一些“apachetomcat源码”的相关内容。那么小编在网络上网罗了一些有关“apachetomcat源码””的相关知识,希望你们能喜欢,朋友们一起来了解一下吧!

内容如下:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="" xmlns:xsi="" xsi:schemaLocation=" "> <modelVersion>4.0.0</modelVersion> <groupId>org.apache.tomcat</groupId> <artifactId>Tomcat</artifactId> <name>Tomcat</name> <version>9.0</version> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>ant</groupId> <artifactId>ant</artifactId> <version>1.6.5</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</groupId> <artifactId>jaxrpc</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> <build> <finalName>Tomcat8.0</finalName> <sourceDirectory>java</sourceDirectory> <resources> <resource> <directory>java</directory> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5</version> <configuration> <encoding>UTF-8</encoding> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> </plugins> </build></project>

配置启动类

org.apache.catalina.startup.Bootstrap

默认加载tomcat自带的webapps目录下的资源,也可以配置自己的catalina.home,这时候需要指定启动参数如:

-Dcatalina.home="E:\workspace\apache-tomcat-8.5.34-src\home"

修改源码

由于版本太高,这个方法中使用的一些属性

org.apache.jasper.compiler.JDTCompiler#generateClassCompilerOptions.VERSION_9

我没有找到合适的版本,所以把这几行注释掉了

由于不能直接分享架构资料,需要的可以私信“555”获取架构资料(或是进群与大牛一起交流)

启动

经过上面的配置已经可以启动了,但是会遇到如下报错:

严重: Error configuring application listener of class [listeners.ContextListener]java.lang.ClassNotFoundException: listeners.ContextListener	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1344)	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1173)	at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:542)	at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:523)	at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:150)	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4585)	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5131)	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:714)	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:695)	at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1133)	at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1868)	at java.util.concurrent.Executors$RunnableAdapter.call$$$capture(Executors.java:511)	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java)	at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266)	at java.util.concurrent.FutureTask.run(FutureTask.java)	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)	at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112)	at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1045)	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:429)	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1577)	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309)	at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)	at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:424)	at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:367)	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:936)	at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:831)	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)	at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266)	at java.util.concurrent.FutureTask.run(FutureTask.java)	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)	at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)	at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:261)	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)	at org.apache.catalina.core.StandardService.startInternal(StandardService.java:522)	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)	at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:801)	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)	at org.apache.catalina.startup.Catalina.start(Catalina.java:637)	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)	at java.lang.reflect.Method.invoke(Method.java:498)	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:352)	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:541)

由于不能直接分享架构资料,需要的可以私信“555”获取架构资料(或是进群与大牛一起交流)

这是在加载webapps目录下的应用时找不到相应的class导致的(也可能是加载路径的问题?)

我在这里是把它们删除了,添加的自己生成的一个war包是没有问题的。

现在就可以在本地访问8080端口访问自己的项目啦!

标签: #apachetomcat源码