idea导入tomcat8源码搭建源码调试环境
从apache tomcat下载tomcat8源码
1.下载到源码后,tomcat默认使用ant作为包管理工具,本地调试时创建pom.xml, 手动创建一个pom.xml放入源码根目录
<?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>
2.使用idea导入tomcat源码 File->Project from Existing Sources -> Maven import
重新导入依赖后TestCookieFilter会报错,本地注释掉单元测试类即可。
3.编辑配置文件, Edit Configuration, 如下图。
设置catalina.home和tomcat启动类Bootstrap, jdk我选择的是1.8
4.Maven Reload, 把依赖的包重新导入进来。
添加JSP解析器代码:
1.Servlet.service() for servlet [jsp] in context with path [] threw exception [org.apache.jasper.JasperException: Unable to compile class for JSP] with root cause
解决方案:编辑 org.apache.catalina.startup.ContextConfig 文件的 configureStart() 方法,添加初始化 JSP 解析器的代码:
在ContextConfig类的configStart方法中加入以下代码
context.addServletContainerInitializer(new JasperInitializer(), null);
我本地下载的tomcat8源码, 以上工作准备完后,直接编译,单元测试也没报错。运行起来,就可以看到猫咪了, 可以开心的看源码了。
我本地的源码config/server.xml里配置的是8080端口, 这里就跑起来了。
tomcat源码目录结构
tomcat核心源码
CATALINA_HOME和CATALINA_BASE
开始阅读tomcat源码之前,先浏览一遍tomcat官方写的介绍,里面内容很全,也是我们学习的第一手资料,这里涉及到两个变量CATALINA_HOME和CATALINA_BASE。
- CATALINA_HOME:表示 Tomcat 安装的根目录,即D:\Gitee\tomcat8\apache-tomcat-8.5.85-src
- CATALINA_BASE:表示特定 Tomcat 实例的运行时配置的根。如果你需要在一台机器上配置多个tomcat实例,则需要用到catalina_base变量
为什么使用CATALINA_BASE
默认情况下,CATALINA_HOME和CATALINA_BASE指向同一目录。当您需要在一台计算机上运行多个 Tomcat 实例时,手动设置CATALINA_BASE。这样做具有以下优点:
- 更轻松地管理升级到较新版本的 Tomcat。由于具有单个CATALINA_HOME位置的所有实例共享一组文件和二进制文件,因此您可以轻松地将文件升级到较新版本,并将更改传播到使用同一CATALIA_HOME目录的所有 Tomcat 实例。
- 避免重复相同的bin、lib文件夹的文件。
- 共享某些设置的可能性,例如 shell 或 bat 脚本文件(取决于您的操作系统)。
参考资料
https://2i3i.com/tomcat-code-7.html
idea导入tomcat8源码搭建源码调试环境的更多相关文章
- Xcode搭建真机调试环境 图文实例
本文介绍的Xcode搭建真机调试环境 图文实例,图文并茂,使我们学习起来更方便些,我们先来看内容. AD: 2013云计算架构师峰会超低价抢票中 Xcode搭建真机调试环境 是本文要介绍的内容,不多说 ...
- vscode加MinGw三步搭建c/c++调试环境
vscode加MinGw三步搭建c/c++调试环境 step1:安装vscode.MinGw 1.1 vscod常规安装:https://code.visualstudio.com/ 1.2 MinG ...
- 通过模拟器和ida搭建Android动态调试环境的问题
这几天在学Android的native层逆向.在按照教程用ida搭建动态调试环境时,第一步是把android_server 放到手机里执行,但是在手机里可以,在genymotion模拟器上就提示 no ...
- 用Qemu模拟vexpress-a9 (一) --- 搭建Linux kernel调试环境【转】
转自:http://www.cnblogs.com/pengdonglin137/p/5023342.html#_label2 阅读目录(Content) 环境介绍: 下载Linux内核 安装arm的 ...
- 用Qemu模拟vexpress-a9 (一) --- 搭建Linux kernel调试环境
参考: http://blog.csdn.net/linyt/article/details/42504975 环境介绍: Win7 64 + Vmware 11 + ubuntu14.04 32 u ...
- Windows下搭建FFmpeg开发调试环境
背景 如果你是一个FFmpeg的使用者,那么绝大部分情况下只需要在你的程序中引用FFmpeg的libav*相关的头文件,然后在编译阶段链接相关的库即可. 但是如果你想调试FFmpeg内部相关的逻辑,或 ...
- Linux下搭建FFmpeg开发调试环境
背景 如果你是一个FFmpeg的使用者,那么绝大部分情况下只需要在你的程序中引用FFmpeg的libav*相关的头文件,然后在编译阶段链接相关的库即可.但是如果你想调试FFmpeg内部相关的逻辑,或者 ...
- 利用QEMU+GDB搭建Linux内核调试环境
前言 对用户态进程,利用gdb调试代码是很方便的手段.而对于内核态的问题,可以利用crash等工具基于coredump文件进行调试. 其实我们也可以利用一些手段对Linux内核代码进行gdb调试,qe ...
- 基于Visual Studio Code搭建Golang开发调试环境【非转载】
由于对Docker+kubernetes的使用及持续关注,要理解这个平台的原理,势必需要对golang有一定的理解,基于此开始利用业余时间学习go,基础语法看完之后,搭建开发环境肯定是第一步,虽然能g ...
- 基于Groovy搭建Ngrinder脚本调试环境
介绍 最近公司搭建了一套压力测试平台,引用的是开源的项目 Ngrinder,做了二次开发,在脚本管理方面,去掉官方的SVN,引用的是Git,其他就是做了熔断处理等. 对技术一向充满热情的我,必须先来拥 ...
随机推荐
- android nativate 动态注册 静态注册
说明:在java函数的入口比较容易分析, 把activity的生命周期或者关键函数通过放在so层,分析起来就困难多了 1.在MainActivity中 package com.demo.nativat ...
- 高性能 Jsonpath 框架,Snack3 3.2.50 发布
Snack3,一个高性能的 JsonPath 框架 借鉴了 Javascript 所有变量由 var 申明,及 Xml dom 一切都是 Node 的设计.其下一切数据都以ONode表示,ONode也 ...
- 重学c#系列——linq(3) [二十九]
前言 继续介绍一些复杂的linq. 正文 groupjoin 这个函数: 有department public class Deployment { public string Id { get; s ...
- [攻防世界][江苏工匠杯]easyphp
打开靶机url,上来就代码审计 <?php highlight_file(__FILE__); $key1 = 0; $key2 = 0; $a = $_GET['a']; $b = $_GET ...
- js将数组内属性值相同的项合并成二维数组
var ary=[ {"RaDate":'2021-09-08',"Type":'Morning1','title':'测试1'}, {"RaDate ...
- 如何在路由绑定中使用 IParsable
IParsable 是 .Net 7 中新增的接口,它可以将字符串转换为对应的实体.在 Controller 的 Route 绑定中可以使用 IParsable 来绑定复杂的实体. 实验背景 假设有一 ...
- js鼠标轨迹特效
今天无意中访问到了开源社区 (apiopen.top)的主界面,发现鼠标跟随的特效不错(残留轨迹),弄下来玩玩 上代码 整合后只需要两部分,导入JS依赖后,在html 添加 id 为 mouseCan ...
- solidity 内存(memory) 可变数组的增删改查 操作
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; library Array { function push(uint256[] memo ...
- three.js一步一步来--如何画出一个逃跑的圆柱体
代码如下 <template> <div style="width:1000px; height:800px"> <p>逃跑的圆柱体</p ...
- Postgresql 使用Vscode开发指南
Postgresql 使用Vscode开发指南 depends libraries sudo apt install -y libsystemd-dev libxml2-dev libssl-dev ...