最近打算开始研究一下Tomcat的工作原理,拜读一下源码。所以先从编译源码开始了。尽管网上有那么多的资料,但是总是觉得,自己研究一遍,写一遍,在动手做一遍能够让我们更加深入的了解。现在整个社会都流行着浮躁的风气,各种速成班,催熟剂的让我们难易静下心来去好好的研究一下技术。现在想想高中时候虽然很累,但是很充实。知道自己每天都干了些什么,再想想现在,是否还经常写字,写文章?是否还经常读书。我在经过了很长一段时间沉浸在只是上下班,重复以往的无聊日子后,终于明白了,学习读书依然要继续,要好好为自己充电来充实自己。不要一直沉浸在自己的世界中沾沾自喜,要居安思危。

  再说说编译tomcat8.0源码的过程,自己在研究编译的过程也是遇到了很多的弯路曲折

  第一步:首先要安装jdk,这个相信大家干这一行的都会安装。我编译的是tomcat8.0,jdk用的1.7。因为我编译tomcat7时用的jdk7,结果编译出错,查阅资料说是jdk版本太高了。所以我就用了比jdk高一个版本的tomcat8来编译。

  第二步:先去Apache-Tomat官网下载8.0版本的tomcat,我之前tomact7和tomcat8的源码都下了。下载完源码后解压缩。

  第三步:编译tomcat还需要另一个利器。那就是ant。ant也是apache的一款工具,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。我下载的是apache-ant-1.9.6。下载完了要配置ant的环境变量。配置一个ANT_HOME ,路径是ant存放的位置,如放到了D:/software/apache-ant-1.9.6。再把ANT_HOME配置到环境变量path下。配置完后再cmd命令窗口中执行ant -version

      

  第四步:在该目录下新建一个libs的文件夹。该文件夹就是tomcat依赖的jar包的下载位置。将解压的tomcat源码中的build.properties.default文件名改为build.properties。打开该文件找到base.path配置项,把该配置项的路径改为依赖包的位置。如:libs的目录是, C:/tomcat8.0-src/libs。那么build.pase=C:/tomcat8.0-src/libs。注意如果你拷贝进去的路径是baild.pase=C:\tomat8.0-src\libs。那么这样是会报错的。应该把\转义一下。所以路径应该是build.pase=C:\\tomat8.0-src\\libs

  第五步:CTRL+R打开cmd命令窗口,进入到所解压的tomcat8.0的源码的位置。然后执行命令 ant download。我在执行该命令的时候报错了。但是也给我下载了一下jar包

      

但是后面的一些jar包就下载不下来了,试了几次依然没有成功。所以就直接往后操作了。

  第六步:执行命令:ant  执行该命令会花费一些时间,但最终会出现build successful的字符串。表明编译成功。

      

      

并且会在该源码目录下自动新增一个output的文件夹,该文件夹下的内容就是编译的tomcat

      说是

  第七步:将源码导入eclipse中,新建一个java项目。如:tomcat8.0-src。然后将把解压源码中的java和test两个源码文件夹import到新建的tomcat8.0-src工程中。

      

      

  第八步:把导入的java和test两个文件标记为source folder,右键选择文件夹->Build Path->Use as Source Folder。标记为source folder后两个代码目录都出现了错误。这是因为缺少依赖的jar包

   第九步:导入依赖的jar包 

      ant.jar:在你安装的ant目录:ANT_HOME/lib下。
      jaxrpc.jar:在eclipse下的/plugin/ javax.xml.rpc_xxx(版本号)/lib/目录下。
      org.eclipse.jdt.core_3.10.2.v20150120-1634.jar:在eclipse的plugin目录下。Eclipse版本不同,名字可能不同。
      wsdl4j-1.5.1.jar:可以从网上下,这个地方我是从之前执行ant download命令时自动下载下来的。  
      右键tomcat8->Build Path->Configuration Build Path。导入上面的几个包,java目录下就没有错了,如果test目录下还有错,可以注释掉错误的文件。

  第十部:执行org.apache.catalina.startup下的Bootstrap,这里面有main方法,会启动tomcat源码。执行后结果报错

      

      

      说是服务的实例没有配置。这是因为当前项目路径下没有lib和conf这两个文件夹,从而找不到服务器配置文件server.xml,当然也就不能实例化服务器了。解决方法:

      a、  第一种方法把前面编译生成的output目录下的/build/下的lib和conf两个目录拷贝到tomcat下,这时就可以直接启动了。

      b、  第二种方法就是添加VM参数,指定这两个文件夹的具体路径,用VM的-D参数指定catalina.home属性值为具体的路径,具体方法如下:

      Run as -> Run Configuration... - > Arguments -> VM arguments中设置:-Dcatalina.home=” C:\tomcat8.0-src\output\build”,然后Run就可以启动了。

   第十一步:验证项目是否启动成功。地址栏中输入localhost:8080/,然后回车,端口是可以自由设置的。这里用的默认端口8080

      

      

      至此tomcat源码编译完成,当然其中还遇到过一些别的错误,这里就不一一列举了。自己也是摸索着来的,也借鉴了很多的文章,如下:

      http://www.cnblogs.com/dlutfengyu/p/5346080.html
      http://www.cnblogs.com/xlbu/p/3750551.html

Tomcat8.0源码编译的更多相关文章

  1. hadoop-1.2.0源码编译

    以下为在CentOS-6.4下hadoop-1.2.0源码编译步骤. 1. 安装并且配置ant 下载ant,将ant目录下的bin文件夹加入到PATH变量中. 2. 安装git,安装autoconf, ...

  2. hadoop-2.6.0源码编译问题汇总

    在上一篇文章中,介绍了hadoop-2.6.0源码编译的一般流程,因个人计算机环境的不同, 编译过程中难免会出现一些错误,下面是我编译过程中遇到的错误. 列举出来并附上我解决此错误的方法,希望对大家有 ...

  3. Spark1.0.0 源码编译和部署包生成

    问题导读:1.如何对Spark1.0.0源码编译?2.如何生成Spark1.0的部署包?3.如何获取包资源? Spark1.0.0的源码编译和部署包生成,其本质只有两种:Maven和SBT,只不过针对 ...

  4. ambari 2.5.0源码编译安装

    参考:https://www.ibm.com/developerworks/cn/opensource/os-cn-bigdata-ambari/index.html Ambari 是什么 Ambar ...

  5. 使用Maven将Hadoop2.2.0源码编译成Eclipse项目

    编译环境: OS:RHEL 6.3 x64 Maven:3.2.1 Eclipse:Juno SR2 Linux x64 libprotoc:2.5.0 JDK:1.7.0_51 x64 步骤: 1. ...

  6. hadoop-2.0.0-mr1-cdh4.2.0源码编译总结

    准备编译hadoop-2.0.0-mr1-cdh4.2.0的同学们要谨慎了.首先看一下这篇文章: Hadoop作业提交多种方案 http://www.blogjava.net/dragonHadoop ...

  7. Ubantu16.04进行Android 8.0源码编译

    参考这篇博客 经过测试,8.0源码下载及编译之后,占用100多G的硬盘空间,尽量给ubantu系统多留一些硬盘空间,如果后续需要在编译好的源码上进行开发,需要预留更多的控件,为了防止后续出现文件权限问 ...

  8. jmeter4.0 源码编译 二次开发

    准备: 1.jmeter4.0源码 - apache-jmeter-4.0_src.zip 2.IDE Eclipse - Oxygen.3 Release (4.7.3) 3.JDK - 1.8.0 ...

  9. Spark2.0.0源码编译

    Hive默认使用MapReduce作为执行引擎,即Hive on mr,Hive还可以使用Tez和Spark作为其执行引擎,分别为Hive on Tez和Hive on Spark.由于MapRedu ...

随机推荐

  1. ubuntu 安装apache2 二进制包

    官方安装教程  http://httpd.apache.org/docs/2.4/install.html 一.下载安装包 进入https://httpd.apache.org/download.cg ...

  2. 插入排序->希尔排序

    /** * 插入排序 */ public class InsertSort { public static void main(String[] args){ int[] arr = {5,5,2,6 ...

  3. mysql中的key primary key 和unique key

    mysql 中key就等同于index 所以 key:普通索引 unique key:唯一索引,就是这一列不能重复 primary key:主键索引,就是不能为空,且主键索引不是完全相同时,插入新数据 ...

  4. 2019 GNTC 阿里云参会分享:云原生SDWAN网络2.0 一站式上云服务

    本次10/22-24 南京2019 GNTC大会上,阿里云网络云原生SDWAN网络2.0 由于独特的云原生定位.创新的解决方案,及成熟的应用案例.行业用户,获得行业媒体C114中国通信网.产业专家高度 ...

  5. SpringMvc返回JSON的工作原理。

    一:导入jar包.然后在springmvc.xml中配置上这么一句话 <!-- 能支持springmvc更高级的一些功能,JSR303校验,快捷的ajax,处理JSON数据.映射动态请求 --& ...

  6. JS中数据结构之栈

    1.栈的基本介绍 栈是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样的操作很快,而且容易实现. 栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶.栈被称为一种后入先出( ...

  7. fedora23下编译安装OpenCV-3.1.0

    所需安装环境 1.安装编译环境 $ sudo dnf install gcc gcc-c++ ncurses-devel cmake 2.安装gtk+2.x $ sudo dnf install gt ...

  8. 写在Flutter 1.0之前

    开始 大概有半年没有写东西了,感觉时间过得飞快,18年也过一小半,趁着谷歌大会再为Flutter这个耀眼的新星,再吹一波! 都beta3了,1.0还会远吗 Flutter团队依然不紧不慢,一步一个脚印 ...

  9. JS知识—面试准备(一)

    1.JS内置类型 分为基本数据类型和Object.基本数据类型有:null,undefined,string,boolean,number,symbol. console.log(typeof nul ...

  10. MySQL按首字母查询

    DELIMITER $$ CREATE /*[DEFINER = { user | CURRENT_USER }]*/ ))) CHARSET utf8 BEGIN ); ); )); SET V_R ...