【Tomcat与网络7】亲测有效—如何用idea运行Tomcat9的代码

前面我们看了很多理论,但是总感觉少了什么?少了什么呢?亲手搞一下Tomcat源码,至少要将源码运行起来玩玩吧。今天我们就来看一下如何在idea中运行Tomcat源码。

目录

1.下载源码 

2.增加pom文件

3.idea导入Tomcat源码


1.下载源码 

Apache Tomcat® - Welcome! 这里下载

然后在左侧有版本栏:

可以看到这里Tomcat已经进化到11了,我们还是先研究一下经典版本的9吧,有时候如果着急使用使用最新发布的版本往往会被迫升级JDK等等,太麻烦了,不想折腾这些。

然后进来之后看到如下内容

这里上策是二进制文件,也就是jar包,复制到工程里是可以直接运行的,我们要下的是下侧的source code,两种格式都可以,下载就行了。

2.增加pom文件

Tomcat里有些依赖的文件是不完整的,我们如果想用idea来编译,需要手动增加一个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>Tomcat9.0.55</artifactId><name>Tomcat9.0.55</name><version>c</version><build><finalName>Tomcat9.0.55</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>3.6.1</version><configuration><encoding>UTF-8</encoding><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>org.easymock</groupId><artifactId>easymock</artifactId><version>4.0.2</version><scope>test</scope></dependency><dependency><groupId>org.apache.ant</groupId><artifactId>ant</artifactId><version>1.10.8</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.6.1</version></dependency><dependency><groupId>biz.aQute.bnd</groupId><artifactId>biz.aQute.bndlib</artifactId><version>5.1.1</version></dependency><dependency><groupId>com.unboundid</groupId><artifactId>unboundid-ldapsdk</artifactId><version>4.0.13</version><scope>test</scope></dependency></dependencies>
</project>

然后就可以使用 mvn clean install 来执行一下看看,正常情况下应该将所有的文件都下载下来,并且没有问题才对。

如果出错,说明你的mvn需要配置一下,使用阿里云代理就可以了,如果你的mvn的settings.xml已经配置了公司的,不想改,怕乱了,可以这么做,先创建一个新目录,例如outside/,然后在里面创建settings.xml,然后编译的时候这么写就可以了:

mvn clean install --settings ~/.m2/outside/settings.xml

注意上面将settings.xml地址改成你设置的,我的是mac电脑,所以地址可以用上面这个样子。

然后settings.xml中的文件是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><!-- 本地仓库的位置 --><localRepository>${user.home}/.m2/repository</localRepository><!-- Apache Maven 配置 --><pluginGroups/><proxies/><!-- 私服发布的用户名密码 --><servers><server><id>releases</id><username>deployment</username><password>He2019</password></server><server><id>snapshots</id><username>deployment</username><password>He2019</password></server></servers><!-- 阿里云镜像 --><mirrors><mirror><id>alimaven</id><name>aliyun maven</name><!-- https://maven.aliyun.com/repository/public/ --><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror></mirrors><!-- 配置: java8, 先从阿里云下载, 没有再去私服下载  --><!-- 20190929 hepengju 测试结果: 影响下载顺序的是profiles标签的配置顺序(后面配置的ali仓库先下载), 而不是activeProfiles的顺序 --><profiles><!-- 全局JDK1.8配置 --><profile><id>jdk1.8</id><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties></profile><!-- Nexus私服配置: 第三方jar包下载, 比如oracle的jdbc驱动等 --><profile><id>dev</id><repositories><repository><id>nexus</id><url>http://nexus.hepengju.cn:8081/nexus/content/groups/public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories><pluginRepositories><pluginRepository><id>public</id><name>Public Repositories</name><url>http://nexus.hepengju.cn:8081/nexus/content/groups/public/</url></pluginRepository></pluginRepositories></profile><!-- 阿里云配置: 提高国内的jar包下载速度 --><profile><id>ali</id><repositories><repository><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories><pluginRepositories><pluginRepository><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url></pluginRepository></pluginRepositories></profile></profiles><!-- 激活配置 --> <activeProfiles><activeProfile>jdk1.8</activeProfile><activeProfile>dev</activeProfile><activeProfile>ali</activeProfile></activeProfiles>
</settings>

这个也是花了很多时间测试出来。

之后就可以继续执行mvn,直到成功。

3.idea导入Tomcat源码

不同版本的idea操作略有不同,但是基本策略都是file->New Project->Import from existing Project,将我们的Tomcat源码导入。

导入之后要打开run->edit configrations,这里我发现idea已经自动导入了一些配置,如下:

网上看说这里要增加配置,但是貌似牛逼的idea自动都导入过来了,不用配置了。

然后就可以执行了吗?原则上是的,但是有时候执行会出问题,这时候就需要我们仔细看一下输入的日志提示什么了。我的提示里有这么两行:

Tomcat默认使用的端口号是8080,这个很容易被其他服务占用,我的第一反应是端口号被占用了,所以打开server.xml文件,找到下面这地方:

    <Connector port="8080" protocol="HTTP/1.1" executor="tomcatThreadPool"connectionTimeout="20000"redirectPort="8443" URIEncoding="UTF-8"/>

将8080改成8030,然后点启动来执行就好了。

此时出现这个信息,基本就是启动成功了:

然后打开浏览器输入http://localhost:8030/

然后就看到了熟悉的界面:

搞定了

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

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

相关文章

kettle通过severice_name连接oracle数据源踩坑

最近在研究kettle做数据抽取核对&#xff0c;按照官网安装kettle后无法连接oracle 坑1&#xff1a;kettle 连接oracle的数据库名指的是sidname 而非severicename&#xff0c;前期一直使用severicename 如下始终报错 注意区分下&#xff1a; SID:一个数据库可以有多个实例&…

林浩然与他的“圆”满人生

林浩然与他的“圆”满人生 Lin Haoran and His “Round” Life of Fulfillment 在那遥远的数学王国&#xff0c;有一个名叫林浩然的小哥&#xff0c;他可不是一般的程序员&#xff0c;而是个痴迷于几何之美、生活之趣的大玩家。话说有一天&#xff0c;林浩然正沉浸在毕达哥拉斯…

图像模板匹配算法(MATLAB)

模板匹配是一种用于在图像中定位和识别对象的技术。它的基本思想是: 提取图像中的一个子图像作为“模板”(template)。这个子图像通常包含我们感兴趣的目标对象。 在整个原始图像上,逐点比较模板和原始图像的相似度。相似度通常用归一化的交叉相关(Normalized Cross Correlati…

Tensorflow2.0笔记 - where,scatter_nd, meshgrid相关操作

本笔记记录tf.where进行元素位置查找&#xff0c;scatter_nd用于指派元素到tensor的特定位置&#xff0c;meshgrid用作绘图的相关操作。 import tensorflow as tf import numpy as np import matplotlib.pyplot as plttf.__version__#where操作查找元素位置 #输入的tensor是Tr…

OJAC近屿智能张立赛博士揭秘GPT Store:技术创新、商业模式与未来趋势

Look&#xff01;&#x1f440;我们的大模型商业化落地产品&#x1f4d6;更多AI资讯请&#x1f449;&#x1f3fe;关注Free三天集训营助教在线为您火热答疑&#x1f469;&#x1f3fc;‍&#x1f3eb; 亲爱的伙伴们&#xff1a; 1月31日晚上8:30&#xff0c;由哈尔滨工业大学的…

WPF入门到跪下 第十一章 Prism(五)IOC的依赖注入

IOC的依赖注入 一、构造函数方式的依赖注入 以项目启动时MainWindowViewModel的依赖注入为例&#xff0c;默认情况下Prism框架的项目&#xff0c;在打开窗口时会自动匹配主窗口的视图模型类&#xff08;PrismApplication启动&#xff09;&#xff0c;这里是MainWindowViewMod…

LeetCode 使循环数组所有元素相等的最少秒数

地址&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 难度&#xff1a;中等 题目描述&#xff1a;给你一个下标从 0 开始长度为 n 的数组 nums 。 每一秒&#xff0c;你可以对数组执行以下操作&#xff1a; 对于范围在 [0, n - 1] 内的每…

多线程事务如何回滚?

背景介绍 1&#xff0c;最近有一个大数据量插入的操作入库的业务场景&#xff0c;需要先做一些其他修改操作&#xff0c;然后在执行插入操作&#xff0c;由于插入数据可能会很多&#xff0c;用到多线程去拆分数据并行处理来提高响应时间&#xff0c;如果有一个线程执行失败&am…

基础知识总结

概念概述 计算机网络是通过传输介质、通信设施和网络通信协议&#xff0c;把分散在不同地点的计算机设备互连起来&#xff0c;实现资源共享和数据传输的系统。而网络编程就是编写程序使联网的两个或多个设备&#xff08;比如计算机&#xff09;之间进行数据传输。Java语言对网…

PHP微信UI在线聊天系统源码 客服私有即时通讯系统

(购买本专栏可免费下载栏目内所有资源不受限制,持续发布中,需要注意的是,本专栏为批量下载专用,并无法保证某款源码或者插件绝对可用,介意不要购买) DuckChat是一套完整的私有即时通讯解决方案,包含服务器端程序和各种客户端程序(包括iOS、Android、PC等)。通过Duck…

鸿蒙 ArkTS 从数组内查找指定的数据

let arr [1, 2, 3, 4, 5]; let target 3; let result arr.filter(item > item target); let a String(result) 将数字转换成文本型 console.log(a); 亲爱的读者&#xff1a; 首先&#xff0c;我要感谢您抽出宝贵的时间阅读这篇文章。我深知&#xff0c;您的每一分每一…

黑马程序员学习:产品卡片

黑马程序员前端web入门&#xff1a;产品卡片 几点学习到的&#xff1a; text-align:center&#xff1b; text-align 属性规定将元素内的文本内容在水平方向上居中对齐&#xff0c;可以设置块级元素内文本的水平对齐方式&#xff0c;但是不能让块级元素内部的块级元素居中。需要…