前提说明:
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却可以直接运行,但为什么使用源码编译时,就必须添加这个文件呢?以后有时间再细细研究一下。
相关推荐
在这个项目中,开发者可能已经配置了相关的Maven插件和目标,以便于编译、测试和打包Tomcat源码。 【标签】: 1. **Tomcat8**:Tomcat 8是Tomcat服务器的第8个主要版本,它支持Java Servlet 3.1、JavaServer Pages...
在编译Tomcat源码时,你需要安装Ant并将其添加到系统的PATH环境变量中。 3. **Apache Maven**:虽然Ant通常是Tomcat的官方构建工具,但在某些情况下,如处理依赖关系,Maven也可能被用到。确保Maven也已安装并配置...
4. **构建源码**:在命令行中,导航到源码根目录,然后运行Maven的`mvn clean install`命令,这会清理已有的构建产物,编译源码,执行单元测试,并将结果打包成可执行的二进制文件。 5. **自定义配置**:根据需求,...
总之,"maven构建的Tomcat源码"提供了一个深入研究Web服务器内部运作的窗口,结合MyEclipse2014和JDK1.7,为开发者提供了完整的开发、调试和学习环境。通过学习和实践,开发者不仅可以提升技术能力,还能更好地理解...
在实际使用中,我们需要在项目的`pom.xml`文件中配置Maven Tomcat插件,设置相关的属性,如Tomcat服务器的URL、端口、路径等。以下是一个简单的配置示例: ```xml <groupId>org.apache.tomcat.maven ...
文章中可能还讨论了如何将Maven与Tomcat整合,例如使用Maven的tomcat7-maven-plugin或tomcat8-maven-plugin来实现应用的自动化部署。这个过程中,可能会涉及配置插件的goals,如`tomcat7:deploy`或`tomcat7:run`,...
【SSM + Maven + Tomcat 简单项目源码详解】 该项目是一个基于Spring MVC、Maven和Tomcat的Web应用程序示例。SSM(Spring、SpringMVC、MyBatis)是Java后端开发中常用的三大框架组合,用于构建高效、灵活的企业级...
在IntelliJ IDEA中运行Tomcat源码,我们需要进行以下步骤: 1. 下载Tomcat源码:可以从Apache官网获取Tomcat 6的源码包,例如这里我们使用的是apache-tomcat-6.0.44-study。 2. 导入源码项目:在Idea中选择“Open...
标题中的"idea+maven+tomcat实现登录案例源代码"表明这是一个使用IntelliJ IDEA集成开发环境(IDE),Maven构建工具以及Tomcat服务器来实现的登录功能的示例项目。这个项目的主要目的是通过代码展示如何在Java Web...
在IT行业中,Maven和Tomcat是两个非常重要的工具,它们在Java开发中扮演着关键角色。Maven是一个项目管理工具,它可以帮助开发者管理和构建Java项目,而Tomcat则是一个流行的开源Servlet容器,用于部署和运行Java ...
《深入剖析Tomcat8源码》 Tomcat8是一款广泛使用的开源Java Servlet容器,它实现了Java EE中的Web应用规范,包括Servlet、JSP和EL...对于Java EE开发者来说,掌握Tomcat源码无疑能够增强对整个Web栈的掌控力。
总的来说,成功编译Tomcat源码需要对Java Web技术有深入理解,包括Servlet、JSP、MVC模式以及构建工具的使用。遇到问题时,查阅官方文档、社区论坛和开发者邮件列表都是解决问题的有效途径。通过解决这些问题,你...
在“构建”阶段,执行Maven的`clean compile install`命令,这将清理、编译并安装项目到本地Maven仓库。你还可以根据项目需求自定义其他Maven目标。构建前后的步骤可以用来执行自动化测试等操作。 接下来,我们需要...
在Eclipse中使用Maven进行项目开发,首先需要创建一个Maven项目。Maven项目通常遵循一定的目录结构,便于统一管理和自动化构建。 - **新建Maven项目**: - 打开Eclipse,选择`File -> New -> Other -> Maven -> ...
在深入探讨Tomcat源码运行时可能遇到的缺失JAR问题之前,让我们先理解一下Tomcat和这些特定库的基本概念。 Tomcat是一个流行的开源Java Servlet容器,由Apache软件基金会维护。它实现了Java EE(现在称为Jakarta EE...
在本例中,提供的文件`apache-tomcat-9.0.1.tar.gz`是Tomcat 9.0.1版本的源码包。解压后,用户可以找到包含服务器配置、Web应用程序、日志文件等目录。`bin`目录下的可执行脚本如`startup.sh`和`shutdown.sh`用于...
对于开发和调试,你可以使用IDEA的内置功能来运行和调试Tomcat源码。在IDEA中创建一个新的Run/Debug Configuration,选择“Application”类型,然后指定主类(通常是`org.apache.catalina.startup.Bootstrap`),并...
在Jenkins中,我们可以通过安装Maven插件来集成Maven,这样每次提交代码时,Jenkins都能自动触发Maven构建,包括编译、测试和打包。 三、Tomcat的配置与管理 Tomcat是Apache软件基金会的Jakarta项目的一部分,它是...
- 配置构建步骤,使用Maven进行项目的编译、测试和打包。 - 配置构建后操作,将打包后的文件部署到Tomcat服务器。 7. 启用并运行 - 保存并运行Jenkins任务,观察构建过程是否成功。 - 在Tomcat服务器上检查应用...
1. **Maven的生命周期**:Maven的`install`目标会把编译后的项目打包并部署到本地仓库,`tomcat7:run`或`tomcat8:run`插件目标可以直接启动Tomcat服务器并部署项目。这样,每当源码发生变化,Maven会自动编译并更新...