使用Maven编译Tomcat源码

使用Maven编译Tomcat源码

准备工作

  • 编译工具:Intellij Idea 15.0.2
  • Tomcat版本:7.0.69 下载链接
  • JDK版本:1.7.0_80
  • Maven版本:3.05

编译步骤

1. 在工作空间中建立目录 TomcatSource,下载源码解压到此文件夹,完成后目录结构如下

    TomcatSource|--bin|--conf|--java|--modules|--res|--test|--webapps|--...

2. 在TomcatSource目录下添加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>Tomcat7.0</artifactId>  <name>Tomcat7.0</name>  <version>7.0</version>  <build> <finalName>Tomcat7.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.3</version>  <configuration> <encoding>UTF-8</encoding>  <source>1.6</source>  <target>1.6</target> </configuration> </plugin> </plugins> </build>  <dependencies> <dependency> <groupId>junit</groupId>  <artifactId>junit</artifactId>  <version>4.12</version>  <scope>test</scope> </dependency>  <dependency> <groupId>ant</groupId>  <artifactId>ant</artifactId>  <version>1.7.0</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.2.2</version> </dependency>  <dependency> <groupId>org.easymock</groupId>  <artifactId>easymock</artifactId>  <version>3.3</version> </dependency> </dependencies> </project>

3. 将项目使用Intellij Idea 打开(对应eclipse导入项目),使用maven工具编译。
4. 打开Bootstrap.java类配置启动参数,VM options 下填写

    -Dcatalina.home=TomcatSource -Dcatalina.base=TomcatSource -Djava.endorsed.dirs=TomcatSource/endorsed -Djava.io.tmpdir=TomcatSource/temp -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=TomcatSource/conf/logging.properties

5. DEBUG模式启动 Bootstrap.java 类的main方法,结束。

注意事项

  1. 本方法使用的是maven方式编译,如果使用Ant方式编译参见 Tomcat官网-->Documentation-->Development-->Building
  2. 编译特定版本的Tomcat源码需要的JDK版本不同,具体同时可以在Building页面参见。
  3. 工作目录中 TomcatSource 可以随意命名,不过在添加VM options参数的时候需要修改指定名称保持一致
  4. 添加的pom.xml文件中更改了maven项目默认的sourcetest的目录(src/main/javasrc/main/test)修改为 javatest
  5. pom.xml文件中添加的依赖是tomcat编译过程中需要依赖的包,也许你在使用maven编译的时候会发现依旧有错误,如果是test目录相关文件可以删除,也可以去常见的maven中央仓库去寻找下载相关依赖。
  6. maven工具编译是指在TomcatSource目录下打开命令行工具(cmd窗口)使用命令 mvn clean install 去编译。
  7. VM options参数意义:startup.bat调用catalina.bat,catalina.bat会传递一堆参数 并且传递给Bootstrap.java类的main方法,这里传递的参数就是VM options。
  8. VM options参数获取的方法:

在bin/catalina.bat 或者 catalina.sh 文件中找到下面一行

if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity

然后在这行下添加以下命令

echo Tomcat VM options start
echo %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
echo Tomcat VM options end
pause

保存退出,运行startup.bat,在cmd窗口在start和end 中间的输出就是VM options

转载于:https://www.cnblogs.com/coldridgeValley/p/5463001.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374706.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java Persistence API:快速入门

各位读者好&#xff01; 在我的一些朋友提出无数请求之后&#xff0c;我决定写一篇关于Java Persistence API的简短文章。 面向对象的编程范式是当​​今最流行和使用最广泛的模型&#xff0c;它具有无缝建模现实生活实体的能力&#xff0c;因此它胜过大多数其他范式。 但是&am…

线性回归、梯度下降(Linear Regression、Gradient Descent)

转载请注明出自BYRans博客&#xff1a;http://www.cnblogs.com/BYRans/ 实例 首先举个例子&#xff0c;假设我们有一个二手房交易记录的数据集&#xff0c;已知房屋面积、卧室数量和房屋的交易价格&#xff0c;如下表&#xff1a; 假如有一个房子要卖&#xff0c;我们希望通过上…

力扣35. 搜索插入位置

给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 二分搜索法 class Solution {public int searchInsert(int[] nums…

@Resource和@Autowired作用和区别

区别&#xff1a; 1&#xff0c;Resource&#xff08;JSR-250标准注解&#xff0c;推荐使用它来代替Spring专有的Autowired注解&#xff09; 2&#xff0c;Spring 不但支持自己定义的Autowired注解&#xff0c;还支持几个由JSR-250规范定义的注解&#xff0c;它们分别是Resourc…

使用Oracle WebLogic对应用程序外部的EJB的引用

在之前的文章中&#xff0c;我们对EJB v。3.0及其为您提供的用于构建Java EE应用程序的可移植机制进行了概述。 由于Java EE规范都是关于可移植性的&#xff0c;因此冒着重复自己的风险&#xff0c;我们经常强调EJB v。3.0规范上仍然存在最重要的可移植性限制&#xff1a;没有在…

基于verilog的分频器设计(奇偶分频原理及其电路实现:上)

在一个数字系统中往往需要多种频率的时钟脉冲作为驱动源&#xff0c;这样就需要对FPGA的系统时钟&#xff08;频率太高&#xff09;进行分频。分频器主要分为奇数分频&#xff0c;偶数分频&#xff0c;半整数分频和小数分频&#xff0c;在对时钟要求不是很严格的FPGA系统中&…

Java判断布尔类型是否相等

public class Solution{public static void main(String args[]){boolean x1 true;boolean x2 false;boolean x3 true;if(x1!x2){System.out.println("布尔类型变量判断是否相等可以用!");}if(x1x3){System.out.println("布尔类型变量判断是否相等可以用&quo…

mysql 中文乱码解决方法

最近在.NET 项目中用EF连接mysql&#xff0c;插入中文数据时老是显示乱码&#xff0c;在创建表时都已将编码指定了&#xff0c;但是还是出现乱码&#xff0c;折腾了一阵子才发现在连接字符串里面也要加上指定编码 Character Setutf8(serverXXXXX;user idXXXX;passwordXXXXX;Cha…

提升您的休眠引擎

是否想知道如何调整基于Hibernate的应用程序以获得无缝的可伸缩性和最佳性能&#xff1f; 本文探讨了基于Hibernate的应用程序的调整技术&#xff0c;重点是有效但文献记载不足的调整主题&#xff0c;例如继承映射&#xff0c;二级缓存和增强的序列标识符生成器。 它还提供了一…

力扣53. 最大子序和

给定一个整数数组 nums &#xff0c;找到一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 思路&#xff1a;每个循环中&#xff0c;sum表示以nums[i]结尾的最大子序和&#xff0c;res表示目前得到的最大子序和。当循环结…

Swift中的延迟加载(懒加载)

Swift方式的延迟加载 而在Swift中&#xff0c;你只需一行代码即可实现此机制&#xff1a; lazy var players String[]() 简单、简洁&#xff0c;直入主题。 但你得记住&#xff0c;你必须使用var关键字来定义延迟加载的属性&#xff0c;不能使用let关键字&#xff0c;因为常量…

Spring,Quartz和JavaMail集成教程

Quartz是一个作业调度框架&#xff0c;用于调度要在指定的时间表上执行的作业。JavaMail是一个用于从Java应用程序发送/接收电子邮件的API。 Spring具有集成点&#xff0c;可以集成Quartz和JavaMail&#xff0c;从而使这些API易于使用。 让我们创建一个小型演示应用程序&#x…

Java_Web三大框架之Hibernate操作数据库(三)

使用Hibernate操作数据库需要七个步骤&#xff1a;&#xff08;1&#xff09;读取并解析配置文件Configuration conf newConfiguration().configure(); &#xff08;2&#xff09;读取并解析映射信息&#xff0c;创建SessionFactorySessionFactory sf conf.buildSessionFacto…

android布局1

第二类&#xff1a;属性值必须为id的引用名“id/id-name” 仅RelativeLayout中有效 android:layout_below 在某元素的下方 android:layout_above 在某元素的的上方 android:layout_toLeftOf 在某元素的左边 android:layout_toRightOf 在某元素的右…

Spring MVC开发–快速教程

这是我们的JCG合作伙伴之一&#xff0c;来自Manoj的有关使用Spring开发Web应用程序的简短教程&#xff0c; 网址为“ The Khangaonkar Report ”。 &#xff08;注意&#xff1a;对原始帖子进行了少量编辑以提高可读性&#xff09; Spring MVC使用基于模型视图控制器体系结构&…

spring mvc controller间跳转 重定向 传参

url&#xff1a;http://zghbwjl.blog.163.com/blog/static/12033667220137795252845/ 1. 需求背景 需求&#xff1a;spring MVC框架controller间跳转&#xff0c;需重定向。有几种情况&#xff1a;不带参数跳转&#xff0c;带参数拼接url形式跳转&#xff0c;带参数不拼接参…

寻找数组的中心索引

给你一个整数数组 nums &#xff0c;请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标&#xff0c;其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端&#xff0c;那么左侧数之和视为 0 &#xff0c;因为在下标的左侧不存在元素。这一点…

STL sector 应用

1 #include <iostream>2 #include <string>3 #include <vector>4 #include <cstdio>5 using namespace std;6 int n;7 vector<int> pile[30];8 9 //找到a所在pile和height&#xff0c;以应用的形式返回调用者&#xff0c; 10 void find_block(in…

将Jersey与Spring整合

Spring提供了很多好处&#xff0c;并通过其依赖项注入机制&#xff0c;应用程序生命周期管理和Hibernate支持&#xff08;仅举几例&#xff09;促进了最佳实践。 另外&#xff0c;当您想拥有干净的类似于REST的服务器端JSON Api时&#xff0c;我发现Jersey非常方便。 本文简要介…

JAVAWEB 生成excel文字在一格显示两位不变成#号

在用java生成excel的时候会发现这种问题&#xff0c; 如果是人家给的模板还好&#xff0c;如果不是模板&#xff0c;而是通过代码生成的话&#xff0c; 就需要进行处理了&#xff0c; 一个小单元格&#xff0c;如果是一位的话&#xff0c;如1-9显示没有问题&#xff0c;一旦是两…