0. 准备

    (1) 配置好Java, 我这里使用的Oracle jdk 1.8.0_192;

    (2) 配置好Ant, 我这里使用的ant 1.10.5;

    (3) tomcat源代码, 我这里使用的 apache-tomcat-6.0.32;

    (4) 操作系统, 我这里使用Ubuntu 18.04;

  1. 操作

    (1) 解压tomcat源代码;

    (2) 进入解压后的目录;

    (3) 修改build.xml文件第681行, 将"${sourcefile}"修改为"https://jaist.dl.sourceforge.net/project/nsis/NSIS%202/2.46/nsis-2.46.zip". 这是由于nsis-2.46.zip的下载位置被永久移动到了"https://jaist.dl.sourceforge.net/project/nsis/NSIS%202/2.46/nsis-2.46.zip".

    (4) 然后编辑 java/org/apache/catalina/tribes/tipis/AbstractReplicatedMap.java 这个类的代码, 定位到1039行, 将keySet()方法注释掉或删掉, 然后保存. 这是由于AbstractReplicatedMap类继承ConcurrentHashMap, 而是直接实现Map接口. 详细可参考这里.

    (5) 运行 ant download.

    (6) 运行 ant.

    (7) 运行 output/build/bin/startup.sh脚本, 验证编译成功否.

    (8) 运行 output/build/bin/shutdown.sh脚本, 关闭tomcat服务.

手动编译tomcat的更多相关文章

  1. LNAMP服务器环境搭建(手动编译安装)

    LNAMP服务器环境搭建(手动编译安装) 一.准备材料 阿里云主机一台,操作系统CentOS 6.5 64位 lnamp.zip包(包含搭建环境所需要的所有软件) http://123.56.144. ...

  2. 手动编译Jsp文件

    手动模拟Tomcat编译jsp文件 Tomcat编译jsp文件的配置路径是在%tomcat_home%/conf/web.xml中,有这样一段代码 <servlet> <servle ...

  3. ffmpeg为视频添加时间戳 - 手动编译ffmpeg

    FFMPEG给视频加时间戳水印 项目中需要给视频添加时间戳,理所当然最好用的办法是ffmpeg.在找到正确的做法前,还被网上的答案timecode给水了一下(水的不轻,在这里转了2天),大概是这样写的 ...

  4. Lua手动编译姿势

    LUA-5.3.3.tar.gz Lua源码+链接2016年5月30日更新 手动编译姿势: 已经装有VS2010 使用VS自带的 cl.exe以及 VS命令簿 打开文件地址 运行自己的bat文件 my ...

  5. Sass中文乱码问题(手动编译和watch编译)

    一.sass手动编译出错 .scss文件中含有中文的时候编译报错(比如注释,比如字体栈),比如: foo.scss: 编译: 解决办法: 找到类似这个的路径的文件(仅供参考,不同环境可能不同): C: ...

  6. CentOS手动编译安装gcc

    最近尝试了fedora.ubuntu.mint.debian.opensuse等多种linux发行版,与CentOS比较之后还是感觉之前用的CentOS比较熟悉,比较习惯.现在CentOS的最新版本为 ...

  7. Javac 手动编译时,出现乱码或编码格式问题

    使用Javac进行手动编译时,出现乱码或编码格式问题,原因如下:现象:编译时出现乱码或编译错误 即使改成UTF-8仍然会出错 原因如下:某些编辑器会往utf8文件中添加utf8标记(editplus称 ...

  8. linux 内核手动编译

    手动编译内核 编译时后应安装的支持yum install perlyum install bcyum insatll gcc-c++ .uname -r 先查看内核版本 .yum groupinsta ...

  9. 用csc命令行手动编译cs文件

    一般初学c#时,用记事本写代码,然后用命令行执行csc命令行可以编译cs文件.方法有两种 1:配置环境,一劳永逸 一般来说在C:\Windows\Microsoft.NET\Framework\v4. ...

随机推荐

  1. 对java多态的理解

    java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是“向上转型”. 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过 Cat c = new C ...

  2. tcp ip 协议安全

    ARP(地址解析协议) 地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议.主机发送信息时将包含目标IP地址的ARP请求 ...

  3. arcgis for js symbol图标的变化

    需求是图标有hover效果 ,如下 思路 : 1.创建图片标记,并赋值: args.rendererArgs = new RenderArgs();     args.rendererArgs.typ ...

  4. mysql数据类型优化

    选择优化的数据类型原则: 1. 更小的通常更好 尽量使用可以正确存储数据的最小数据类型.更小的数据类型通常更快,因为它们占用更少的磁盘.内存和CPU缓存,并且处理时需要的CPU周期也更少. 2. 简单 ...

  5. DBDocumentGenerator使用

    报错1:未能成功安装.NET Framework 3.5(包括.NET2.0和3.0) 解决办法:安装离线包. ( 1.将“sxs”文件复制到C盘,用完后可以删除:2.右键以管理员身份运行NET Fr ...

  6. docker介绍

    一.docker的定义 docker是一个平台,开发人员进行docker应用的开发和系统管理人员对docker应用部署和管理. 二.docker与Virtual Machine的区别 三.docker ...

  7. 如何在Ubuntu 16.04上安装PythonGDAL 2.1?

    sudo add-apt-repository -y ppa:ubuntugis/ubuntugis-unstable sudo apt update sudo apt upgrade # if yo ...

  8. MySQL-ISNULL()、IFNULL()和NULLIF()函数

    以下三个函数都可以用于where子条件,作为数据删除.更新的记录定位依据. 如: SELECT * FROM usergrade WHERE ISNULL(USERNAME); 一.ISNULL(ex ...

  9. vue/iview使用moment.js

    方法一 main.js引入moment 获取当前时间 this.time = this.$moment()._d; // 当前时间 this.time0 =this.$moment().subtrac ...

  10. APScheduler

    目录 APScheduler简介 支持的后端存储作业 集成的Python框架 APScheduler下载安装 APScheduler组件 各组件简介 调度器 作业存储器 执行器 触发器 使用 添加作业 ...