`

在本机使用maven编译tomcat8的源码并运行

 
阅读更多

前提说明:

1. 基于tomcat 8.0.26版本的源码

2. JDK1.7

 

操作说明:

1. 从Apache网站下载tomcat源码

2. 默认情况下,tomcat使用ant进行编译、打包,以下讲一下如何使用maven来编译、打包

3. 在Eclipse里新建一个maven标准Java项目

4. 将tomcat源码包下的Java里的文件拷贝到src/main/java下

5. 将conf和webapps拷贝到项目根路径下(请参考下图)

6. 使用以下maven配置

<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>com.test</groupId>
	<artifactId>tomcat8</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	
	<properties>
		<maven.build.timestamp.format>yyyyMMdd HH:mm:ss</maven.build.timestamp.format>
		<VERSION>8.0.26</VERSION>
		<VERSION_NUMBER>8.0.26</VERSION_NUMBER>
		<VERSION_BUILT>${maven.build.timestamp}</VERSION_BUILT>
	</properties>
	
	<build>
		<resources>
			<resource>
				<directory>src/main/java</directory>
				<includes>
					<include>**/*.xml</include>
					<include>**/*.properties</include>
					<include>**/*.dtd</include>
					<include>**/*.xsd</include>
				</includes>
				<filtering>true</filtering>
			</resource>
			<resource>
				<directory>src/main/resources</directory>
			</resource>
		</resources>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-resources-plugin</artifactId>
				<configuration>
					<delimiters>
						<delimiter>@</delimiter>
					</delimiters>
				</configuration>
			</plugin>
		</plugins>
	</build>

	<dependencies>
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.1.3</version>
		</dependency>
		<dependency>
			<groupId>avalon-framework</groupId>
			<artifactId>avalon-framework</artifactId>
			<version>4.1.5</version>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>
		<dependency>
			<groupId>logkit</groupId>
			<artifactId>logkit</artifactId>
			<version>1.0.1</version>
		</dependency>
		<dependency>
			<groupId>servletapi</groupId>
			<artifactId>servletapi</artifactId>
			<version>2.3</version>
		</dependency>
		<dependency>
			<groupId>geronimo-spec</groupId>
			<artifactId>geronimo-spec-jaxrpc</artifactId>
			<version>1.1-rc4</version>
		</dependency>
		<dependency>
			<groupId>wsdl4j</groupId>
			<artifactId>wsdl4j</artifactId>
			<version>1.6.2</version>
		</dependency>
		<dependency>
			<groupId>org.eclipse.jdt.core.compiler</groupId>
			<artifactId>ecj</artifactId>
			<version>4.4.2</version>
		</dependency>
		<dependency>
			<groupId>commons-daemon</groupId>
			<artifactId>commons-daemon</artifactId>
			<version>1.0.15</version>
		</dependency>
		<dependency>
			<groupId>org.apache.ant</groupId>
			<artifactId>ant</artifactId>
			<version>1.9.6</version>
		</dependency>
	</dependencies>
</project>

 最终项目的文件结构如下图:

 

 

经过以上步骤之后,编译应该能够通过了,如果这个时候我们使用Bootstrap启动tomcat,也能正常启动,但在打开页面时,会报Validator的什么NullPointException,主要是因为JspFactory里的工厂类没有被实例化,所以getFactory总是返回null。

JspFactory的实现类是JspFactoryImpl,然后在JasperInitializer里会被调用,如果JasperInitializer能够被正常启动,那么JspFactory就不会返回Null了。

 

在ContextConfig的1128行,有加载所有ServletContainerInitializer的机会,这里会去加载META-INF/services下面的所有ServletContainerInitializer的实现类,所以需要在META-INF/services下新建一个文件javax.servlet.ServletContainerInitializer,然后里面的内容是org.apache.jasper.servlet.JasperInitializer,这样再启动之后,就能够正常访问页面了。

 

以上这点也是我比较疑惑的,我在tomcat的bin版本发行包里,没有看到哪个jar包里面有META-INF/services/javax.servlet.ServletContainerInitializer这个文件,但是tomcat却可以直接运行,但为什么使用源码编译时,就必须添加这个文件呢?以后有时间再细细研究一下。

 

  • 大小: 11.8 KB
分享到:
评论

相关推荐

    dubbo管理中心 源码 可以在tomcat8下jdk1.8下部署

    dubbo管理中心 源码 可以在tomcat8下jdk1.8下部署,需要用maven进行编译 ,首先dubbo-admin\src\main\webapp\WEB-INF 在这个下面修改dubbo.properties这个文件里面的zookeeper地址然后进入 dobbo-admin/下 运行cmd ...

    java班级管理源码-MavenIn28Minutes:Maven初学者教程和示例

    java班级管理源码Maven 初学者教程 - 28 分钟内的示例 安装 Eclipse 和 Java 课程大纲 我们将使用 Handson Real World 示例来了解 Maven 可以做什么。 我们将了解 Maven 如何使应用程序开发人员的生活变得轻松。 ...

    Tomcat8-源码编译及开发1

    &gt;&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org

    maven的优缺点 项目

    将maven的项目重新编译,在项目中右击,可以pom上右击,可以将pom(目录)下面的jar和war重新编译 如果出现以上情况,说明下载的jar包有问题,把这下面的文件删除,重新下载 每创建一个项目,都有pom.xml,所有的配置都...

    omcat-redis-session-manager的jar包-包含Tomcat7和Tomcat8

    基于tomcat-redis-session-manager源码进行的编译生成的jar包,压缩包中包含Tomcat7和Tomcat8打好的jar包。

    Java搭建宝塔部署实战毕设项目WMS仓库管理系统源码.zip

    Spring MVC+Mybatis+Ehcache+Apache Shiro+Bootstrap整合开发java仓库管理系统源码 项目描述 ...本项目是maven项目,当你下载完后,需要自己编译。 如果编译完成后,无法加入tomcat运行,请自行修

    saaj-api-1.3.5.jar

    使用ant编译tomcat源码过程中ant编译失败需下载该包,可以下载后放到指定位置 或者自行搜索依赖后通过maven下载

    Rust通用代码生成器莲花尝鲜版七源码

    Rust通用代码生成器莲花尝鲜版七源码。...解压缩后在第一级子目录的Lotus子目录下使用maven构建,命令为mvn install。请部署在Tomcat9的webapps目录下。欢迎使用。项目地址:https://gitee.com/jerryshensjf/Lotus/

    Rust通用代码生成器莲花尝鲜版八源码

    Rust通用代码生成器莲花尝鲜版八源码。...解压缩后在第一级子目录的Lotus子目录下使用maven构建,命令为mvn install。请部署在Tomcat9的webapps目录下。欢迎使用。项目地址:https://gitee.com/jerryshensjf/Lotus

    apache-tomcat-8.5.50-src.zip

    tomcat8.5的源码项目,tomcat需要ant进行编译,我没有下载ant,走的捷径直接将它转为maven项目。同时,因为中文显示乱码,我修改了一点代码,所有提示修改为全英文提示了。

    xmljava系统源码-classfinal:Java类加密工具

    无需修改原项目代码,只要把编译好的jar/war包用本工具加密即可。 运行加密项目时,无需求修改tomcat,spring等源代码。 支持普通jar包、springboot jar包以及普通java web项目编译的war包。 支持spring framework、...

    jaxrpc.jar包

    jaxrpc.jar是编译运行tomcat源码需要的一个jar包,如果您需要,请下载!

    tomcat_7_0_47_pom.xml

    tomcat_7_0_47_pom.xml, tomcat默认是使用ant编译,可以使用pom文件,当作maven项目启动。

    maven_git_Jenkins.rar

    本资源中包含三个安装包,maven、git、Jenkins。用于服务器Jenkins的自动部署使用。maven解压后配置环境变量就可以使用。git需要源码编译安装。Jenkins就不用多说了,直接拷贝到tomcat的webapps目录下就可以访问并...

    ClassFinal字节码加密工具-其他

    ClassFinal是一款Java class文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework,可避免源码泄漏或字节码被反编译。项目模块说明:classfinal-core:ClassFinalde的核心模块...

    Java语言+基于SSM的智慧医院门诊管理系统项目源码(毕业设计、课程设计使用).zip

    运用了编译工具IntelliJ IDEA,采用Tomcat服务器和Maven库,页面运用了Html、JSP以及Bootstrap技术,数据库采用了MySQL数据库技术,后端采用了SSM框架以及XML、AJAX、jQuery等先进技术,系统大大提高了系统办公效率...

    毕业设计-SpringBoot医药管理系统源码.zip

    jdk8+tomcat9+mysql+IntelliJ IDEA+maven 项目技术(必填) springboot+mybatis-plus+layui+jquery 数据库文件(可选) 数据库脚本位于工程doc目录下 依赖包文件(可选) 项目采用Maven管理jar包依赖,编译工程自动...

    word源码java-simbaProject:simba的一个项目包括maven存储库项目

    如果使用框架自带的websocket服务器的功能,使用本地jetty跑没问题,如果使用tomcat跑,必须是tomcat9 直接运行Jetty类的main方法,即可启动web服务 如果访问jsp页面报错说编译错误,可能是因为安装了多个版本的jdk...

    基于ssm实现的图书借阅管理系统源码+数据库(借阅、归还、列表查询、增删改查等功能).zip

    基于ssm实现的图书借阅管理系统源码+数据库(借阅、归还、列表查询、增删改查等功能).zip 【资源介绍】 编译环境 : jdk 1.8 mysql 5.0 及以上 tomcat 7 框架 : springmvc + spring + mybatis jar包管理工具 : ...

    基于JavaWeb + Mysql + Layui实现的宿舍管理系统源码+数据库+演示截图+项目说明.zip

    本系统采用MVC+J2EE+MYSQL实现,使用是Tomcat10.0作为WEB服务器,提供适应性强的Internet服务器功能,具有很高的执行效率。其中: - JSP用于页面的设计,展示数据 - Java用来处理具体业务逻辑,后台跳转、对数据库...

Global site tag (gtag.js) - Google Analytics