`

在本机使用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
分享到:
评论

相关推荐

    tomcat8源码的maven项目

    在这个项目中,开发者可能已经配置了相关的Maven插件和目标,以便于编译、测试和打包Tomcat源码。 【标签】: 1. **Tomcat8**:Tomcat 8是Tomcat服务器的第8个主要版本,它支持Java Servlet 3.1、JavaServer Pages...

    编译tomcat源码所需jar包

    在编译Tomcat源码时,你需要安装Ant并将其添加到系统的PATH环境变量中。 3. **Apache Maven**:虽然Ant通常是Tomcat的官方构建工具,但在某些情况下,如处理依赖关系,Maven也可能被用到。确保Maven也已安装并配置...

    tomcat8源码构建

    4. **构建源码**:在命令行中,导航到源码根目录,然后运行Maven的`mvn clean install`命令,这会清理已有的构建产物,编译源码,执行单元测试,并将结果打包成可执行的二进制文件。 5. **自定义配置**:根据需求,...

    maven构建的Tomcat源码

    总之,"maven构建的Tomcat源码"提供了一个深入研究Web服务器内部运作的窗口,结合MyEclipse2014和JDK1.7,为开发者提供了完整的开发、调试和学习环境。通过学习和实践,开发者不仅可以提升技术能力,还能更好地理解...

    Maven Tomcat插件源码

    在实际使用中,我们需要在项目的`pom.xml`文件中配置Maven Tomcat插件,设置相关的属性,如Tomcat服务器的URL、端口、路径等。以下是一个简单的配置示例: ```xml &lt;groupId&gt;org.apache.tomcat.maven ...

    maven+tomcat的苦逼经历

    文章中可能还讨论了如何将Maven与Tomcat整合,例如使用Maven的tomcat7-maven-plugin或tomcat8-maven-plugin来实现应用的自动化部署。这个过程中,可能会涉及配置插件的goals,如`tomcat7:deploy`或`tomcat7:run`,...

    ssm+maven+tomcat简单项目源码

    【SSM + Maven + Tomcat 简单项目源码详解】 该项目是一个基于Spring MVC、Maven和Tomcat的Web应用程序示例。SSM(Spring、SpringMVC、MyBatis)是Java后端开发中常用的三大框架组合,用于构建高效、灵活的企业级...

    Tomcat源码阅读(一)使用Idea运行Tomcat6源码

    在IntelliJ IDEA中运行Tomcat源码,我们需要进行以下步骤: 1. 下载Tomcat源码:可以从Apache官网获取Tomcat 6的源码包,例如这里我们使用的是apache-tomcat-6.0.44-study。 2. 导入源码项目:在Idea中选择“Open...

    idea+maven+tomcat实现登录案例源代码.zip

    标题中的"idea+maven+tomcat实现登录案例源代码"表明这是一个使用IntelliJ IDEA集成开发环境(IDE),Maven构建工具以及Tomcat服务器来实现的登录功能的示例项目。这个项目的主要目的是通过代码展示如何在Java Web...

    Maven和Tomcat插件

    在IT行业中,Maven和Tomcat是两个非常重要的工具,它们在Java开发中扮演着关键角色。Maven是一个项目管理工具,它可以帮助开发者管理和构建Java项目,而Tomcat则是一个流行的开源Servlet容器,用于部署和运行Java ...

    tomcat8源码

    《深入剖析Tomcat8源码》 Tomcat8是一款广泛使用的开源Java Servlet容器,它实现了Java EE中的Web应用规范,包括Servlet、JSP和EL...对于Java EE开发者来说,掌握Tomcat源码无疑能够增强对整个Web栈的掌控力。

    tomcat源码编译缺少jar包

    总的来说,成功编译Tomcat源码需要对Java Web技术有深入理解,包括Servlet、JSP、MVC模式以及构建工具的使用。遇到问题时,查阅官方文档、社区论坛和开发者邮件列表都是解决问题的有效途径。通过解决这些问题,你...

    jenkins+maven-tomcat插件自动部署

    在“构建”阶段,执行Maven的`clean compile install`命令,这将清理、编译并安装项目到本地Maven仓库。你还可以根据项目需求自定义其他Maven目标。构建前后的步骤可以用来执行自动化测试等操作。 接下来,我们需要...

    eclipse+maven+tomcat集成

    在Eclipse中使用Maven进行项目开发,首先需要创建一个Maven项目。Maven项目通常遵循一定的目录结构,便于统一管理和自动化构建。 - **新建Maven项目**: - 打开Eclipse,选择`File -&gt; New -&gt; Other -&gt; Maven -&gt; ...

    tomcat源码运行缺少jar

    在深入探讨Tomcat源码运行时可能遇到的缺失JAR问题之前,让我们先理解一下Tomcat和这些特定库的基本概念。 Tomcat是一个流行的开源Java Servlet容器,由Apache软件基金会维护。它实现了Java EE(现在称为Jakarta EE...

    maven、tomcat下载资源

    在本例中,提供的文件`apache-tomcat-9.0.1.tar.gz`是Tomcat 9.0.1版本的源码包。解压后,用户可以找到包含服务器配置、Web应用程序、日志文件等目录。`bin`目录下的可执行脚本如`startup.sh`和`shutdown.sh`用于...

    Tomcat8-源码编译及开发1

    对于开发和调试,你可以使用IDEA的内置功能来运行和调试Tomcat源码。在IDEA中创建一个新的Run/Debug Configuration,选择“Application”类型,然后指定主类(通常是`org.apache.catalina.startup.Bootstrap`),并...

    jenkins_maven_tomcat

    在Jenkins中,我们可以通过安装Maven插件来集成Maven,这样每次提交代码时,Jenkins都能自动触发Maven构建,包括编译、测试和打包。 三、Tomcat的配置与管理 Tomcat是Apache软件基金会的Jakarta项目的一部分,它是...

    Jenkins+Maven+SVN+Tomcat 持续集成环境快捷部署

    - 配置构建步骤,使用Maven进行项目的编译、测试和打包。 - 配置构建后操作,将打包后的文件部署到Tomcat服务器。 7. 启用并运行 - 保存并运行Jenkins任务,观察构建过程是否成功。 - 在Tomcat服务器上检查应用...

    在Eclipse中Tomcat和Maven插件相互配合进行热部署

    1. **Maven的生命周期**:Maven的`install`目标会把编译后的项目打包并部署到本地仓库,`tomcat7:run`或`tomcat8:run`插件目标可以直接启动Tomcat服务器并部署项目。这样,每当源码发生变化,Maven会自动编译并更新...

Global site tag (gtag.js) - Google Analytics