前言

最近对Tomcat的源码比较感兴趣,于是折腾了一番。要调试源码首先需要搭建环境,由于参考了几篇帖子发现都不怎么靠谱,最后还是折腾出来了,然而却花了足足一天的时间去搭建这个环境。发现都不是帖子的问题,主要是自己在搭建过程中忽略了一些细节,最后构建工程的时候一直失败,我也是醉了。所以本着共享的原则,把一些关键的步骤以及一些需要注意的细节写在博客中以飨读者。

下载Tomcat7源码

下载源码有多种方式,可以通过SVN直接拷贝到本地,svn地址在这里

下载之后源码的目录是这样的:

注意:要把build.properties.default改为build.properties,不然不能成功构建项目

安装ant

下载地址在这里,下载之后新建一个系统变量ANT_HOME,值就是ant的下载目录,比如我的电脑是D:\apache-ant-1.8.3

在开始-运行-输入ant -version,如果显示版本信息,那么就说明安装成功

编译工程

在命令窗口输入:

cd ${tomcat.source}
ant ide-eclipse

${tomcat.source}为Tomcat源码的目录,比如我的是D:\apache-tomcat-7.0.32-src

要注意的是编译源码的jdk版本要为1.6,低于这个版本将会报错,导致编译不成功。所以如果你的机器的版本高于1.6,只要换成1.6的版本就好了,你可以选择在机器上安装两个版本的jdk(我就是这么做的),把JAVA_HOME的值改为jdk1.6的目录,然后把c:\windows\system32目录下的javaw.exe、java.exe和javaws.exe三个文件删除就可以了。最后输入java -version显示是否切换jdk版本成功。

执行上述命令后,会出现编译成功的提示,最后编译成功的结构是这样的:

其中的.myeclipse是我导入MyEclipse后产生的,其中的uml文件也是后来我新建的,编译后新增加的只有三个文件:.classpath、.project和output文件夹。

导入Eclipse

楼主使用的是Myeclipse,不过过程大体一致,主要是:

File - Import and choose Existing Projects into Workspace

导入之后会出现错误,还要新建两个变量,具体操作是:

打开eclipse的Window - Perferences ,选择Java-Build Path - Classpath Variables,然后,新增以下两个变量:
TOMCAT_LIBS_BASE The same location as the base.path setting in build.properties
ANT_HOME 版本高于1.8,位置就是ant的安装位置

base.path就是build.properties文件中的值,默认就好,当然你也可以选择自己的目录。网上说好像要设置eclipse的complier版本,不过我没有设置并没有报错。

下面是导入Myeclipse之后项目的结构:

调试源码

要调试源码需要打开org.apache.catalina.startup.Bootstrap类,右键选择debug as java application就可以了。要调试具体的源码,只要设置一个断点,然后输入一个URL,不妨使用默认的项目examples省心,然后就可以尽情享受tomcat源码了。

更详细的参考资料,请访问官方文档

http://blog.csdn.net/u011116672/article/details/50994000

深入理解Tomcat系列之二:源码调试环境搭建(转)的更多相关文章

  1. Tomcat源码调试环境搭建

    我们一般都是为了解决某个问题,才去看源码的.Java体系就是这点好处,源码唾手可得.遇到问题,最后的解决方法总是可以从源码中找到. 参考了网上的文章,过程整理如下: 1. 下载和导入 官网下载编译好的 ...

  2. 如何搭建自己的SpringBoot源码调试环境?--SpringBoot源码(一)

    1 前言 这是SpringBoot2.1源码分析专题的第一篇文章,主要讲如何来搭建我们的源码阅读调试环境.如果有经验的小伙伴们可以略过此篇文章. 2 环境安装要求 IntelliJ IDEA JDK1 ...

  3. 【曹工杂谈】Maven源码调试工程搭建

    Maven源码调试工程搭建 思路 我们前面的文章<[曹工杂谈]Maven和Tomcat能有啥联系呢,都穿打补丁的衣服吗>分析了Maven大体的执行阶段,主要包括三个阶段: 启动类阶段,负责 ...

  4. 基于Eclipse IDE的Ardupilot飞控源码阅读环境搭建

    基于Eclipse IDE的Ardupilot飞控源码阅读环境搭建 作者:Awesome 日期:2017-10-21 需准备的软件工具 Ardupilot飞控源码 PX4 toolchain JAVA ...

  5. Spark源码分析环境搭建

    原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3868718.html 本文主要分享一下如何构建Spark源码分析环境.以前主要使用eclipse来阅读源 ...

  6. 【转】Linux(ubuntu14.04)上编译Android4.4源码的环境搭建及编译全过程

    原文网址:http://jileniao.net/linux-android-building.html sublime text让我伤心.本来很信任sublime text的自动保存功能,之前使用一 ...

  7. Hadoop源码阅读环境搭建(IDEA)

    拿到一份Hadoop源码之后,经常关注的两件事情就是 1.怎么阅读?涉及IDEA和Eclipse工程搭建.IDEA搭建,选择源码,逐步导入即可:Eclipse可以选择后台生成工程,也可以选择IDE导入 ...

  8. 详解Tomcat系列(一)-从源码分析Tomcat的启动

    在整个Tomcat系列文章讲解之前, 我想说的是虽然整个Tomcat体系比较复杂, 但是Tomcat中的代码并不难读, 只要认真花点功夫, 一定能啃下来. 由于篇幅的原因, 很难把Tomcat所有的知 ...

  9. [Tomcat源码分析] Eclipse中搭建Apache Tomcat源码调试环境

    网上很多文章都推荐使用Ant下载编译,但本地实践中屡屡失败,无法下载. 后来参考 https://blog.csdn.net/xiongyouqiang/article/details/7894107 ...

随机推荐

  1. 【图像处理】Gabor过滤器

    Gabor内核参考wiki 使用实数Real的公式计算核函数代码: Mat getGaborFilter(float lambda, float theta, float sigma2,float g ...

  2. MVC简单分页

    对Car汽车表分页 实现简单分页,放在这里方便查看回顾,自定义每页几条有点问题,有待完善······ 1.新建mvc项目 2.添加linq to sql 数据库连接 3.添加CarBF类 using ...

  3. 【linux】开发环境说明

    欢迎转载,转载时请保留作者信息,谢谢. 邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:http:// ...

  4. Possible concurrency problem: Replicated version id X matches in-memory version for session ...

    The message basically is saying that a replicated session is overriding an existing session in that ...

  5. listview——显示窗体

    listview——是用来显示的控件 一,属性 view:(显示的视图)LargeIcon——大图标:SmallIcon——小图标:Details——详细:List——列表:TItle——平铺 Sma ...

  6. JQuery - 点击图片显示大图

    效果: 目录结构: 代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="De ...

  7. 综述-如何克服HTML5的“性工能”障碍

    http://ask.dcloud.net.cn/docs HTML5自出现以来,几经风雨,虽看似很有前途,但实际使用问题太多,DCloud为此踩了无数坑.但我们从未放弃,我们加入了W3C,发起了 H ...

  8. find . / -newer oldest_file.txt ! -newer newest_file.txt

    如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用-newer选项. 它的一般形式为: $ find . / -newer oldest_file.txt ! -newer newe ...

  9. SINGLETON(单例模式)---(孤独的人)

    很多时候,我们都很彷徨,因为,在身边的朋友,很少. package patterns.createable.singleton; /** * 孤独的人啊 * 我为你写了一个类 * 这个类,在我们的程序 ...

  10. [Java][Android][Process] ProcessBuilder与Runtime差别

    在Android中想要进行Ping,在不Root机器的情况下似乎还仅仅能进行底层命调用才干实现. 由于在Java中要进行ICMP包发送须要Root权限. 于是仅仅能通过创建进程来攻克了.创建进程在Ja ...