多Host情况下IDEA无法启动Tomcat的问题
学习Java Web,学到将WAR包部署到Tomcat中时,遇到一个问题。
部署WAR包的过程本身没什么问题,把.war文件放在<Tomcat安装目录>/webapps/中,然后修改<Tomcat安装目录>/conf/server.xml,过程很顺利。因为是部署多个WebApp,每个WebApp都是基于根路径开发的,所以就在<Host name="localhost">后面增加了几个<Host>:
<Host name="localhost" ……>
……
</Host>
<Host name="my-web-app.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context docBase="my-web-app" path="/" />
</Host>
……
通过startup.bat启动Tomcat,部署的WebApp都能正常访问。
但是,再回到IDEA中(自己手动启动的Tomcat进程已关闭),通过IDEA启动Tomcat就报错了,关键日志如下:
……
Caused by: java.lang.IllegalArgumentException: 指定的主资源集 [C:\Users\tianlin\AppData\Local\JetBrains\IntelliJIdea2021.2\tomcat\643078ef-a97d-4f46-a4c3-5a50080f0431\webapps\my-web-app] 无效
……
可见,虽然我只想关注localhost主机的WebApp(即IDEA中正在开发的项目),但我在Tomcat安装目录中部署的这个my-web-app也存在于IDEA启动的这个Tomcat进程的配置之中,而且正是因为新增的<Host>导致了Tomcat无法启动。
经过一番研究,在搞清楚IDEA是如何控制Tomcat的基本原理之后,原因就很明了了:
因为IDEA使用的是临时配置目录,而这个my-web-app配置时使用的是相对路径,这就导致IDEA启动时,在临时配置目录下找不到my-web-app,所以就报错,无法启动。
解决方案:
- 部署时
<Host>使用绝对路径。这种方案下,在IDEA中运行Tomcat时,除了localhost之外的其他Host也都能正常访问到。<Host name="my-web-app.com" appBase="C:\Users\tianlin\Java\apache-tomcat-8.5.70\webapps\my-web-app" unpackWARs="true" autoDeploy="true">
<Context docBase="/" path="" />
</Host>
- 部署用的Tomcat环境和IDEA开发用的Tomcat环境分离,各自使用不同的目录。
多Host情况下IDEA无法启动Tomcat的问题的更多相关文章
- Mac下没有权限启动tomcat的解决办法
问题描述 在Mac中通过./startup.sh执行启动脚本文件,启动tomcat时报如下错误: -bash: ./startup.sh: Permission denied 解决方法 错误信息说明了 ...
- Tomcat学习笔记 - 错误日志 - NetBeans配置tomcat出错情况总结 -- 部署错误: 启动 Tomcat 失败。-- '127.0.0.1' 不是内部或外部命令,也不是可运行的程序
真的管用,不知道为啥管用.转载自:http://blog.sina.com.cn/s/blog_709548200102vgy4.html 问题描述: 新安装的NetBeans8.0.2,安装过程中还 ...
- service iptables xxx无效命令的情况下,如何启动/重启iptables
最近在CentOS 7.6下使用service iptables xxx相关命令,提示如下错误:The service command supports only basic LSB actions ...
- Centos7多内核情况下修改默认启动内核方法
1.1 进入grub.cfg配置文件存放目录/boot/grub2/并备份grub.cfg配置文件 [root@linux-node1 ~]# cd /boot/grub2/ [root@linux ...
- 如果遇到继承控件,添加到新项目里在工具栏找不到的情况下,F5启动一下,重新生成是不会有的,要运行成功才有
继承控件只的是cs结尾的那种,类直接继承对应控件,不是usercontrol类型的
- eclipse启动tomcat时设置端口
近在做项目需要更改tomcat的端口号,开发工具用的是Eclipse,更改后在Eclipse中重启发现,端口号依然是8080,原来在配置文件更改了tomcat端口号后,要在Eclipse重新装载一次, ...
- Linux下一个Redis启动/关闭/重新启动服务脚本
脚本功能: 实现redis单机多实例情况下的正常启动.关闭.重新启动单个redis实例.完毕系统标准服务的下面经常使用功能: start|stop|status|restart 注:redis程序代 ...
- 在linux下安装并操作tomcat
1.安装tomcat1).下载tomcat从官网http://tomcat.apache.org/下载tomcat,保存在/home目录下.root@ubuntu:/home/ubuntu/Downl ...
- eclipse本地启动tomcat报错集锦
1.eclipse本地添加tomcat服务器 打开Eclipse,单击“window”菜单,选择下方的“Preferences”: 找到Server下方的Runtime Environment, ...
随机推荐
- 2019-07-06 sql备忘 连续取最大
连续最大: SELECT M.* FROM #temp MINNER JOIN (SELECT ISNULL(A.score,0)-b.score AS score,B.id FROM #temp A ...
- docker容器网络bridge
我们知道docker利用linux内核特性namespace实现了网络的隔离,让每个容器都处于自己的小世界里面,当这个小世界需要与外界(宿主机或其他容器)通信的时候docker的网络就发挥作用了,这篇 ...
- Vue-Router 详细解析学习
首先还是先创项目 然后选择vue-router 再创建 再敲代码学习前,我们先了解什么是路由? 路由有一个非常重要的概念就是路由表: 本质就是一个映射表,决定数据的指向. 我们生活中常常听到的路由器, ...
- 记一次在Windows10桌面环境搭建Jekins的吐血经历
目录 写在前面 故事背景 踩坑详情 最后总结 写在前面 首先声明,除非万不得已,千万不要在Windows环境做这个事情,否则就等着各种坑吧. 本人一贯的立场都是坚持用正确的方法做事,显然在Window ...
- Unsatisfied dependency expressed through field 'rabbitTemplate'错误总结
1. 在springboot中整合RabbitMq的过程中,遇到如下错误:(截取部分) org.springframework.beans.factory.UnsatisfiedDependencyE ...
- UNIX环境高级编程APUE练习3.2-不用fcntl实现dup2的功能
1 题面 编写与dup2功能相同的函数,要求不调用fcntl函数,并且要有正确的出错处理. 2 基本思路 不能用fcntl,能够返回一个文件描述符的只有open和dup.而open会创建一个新的文件表 ...
- 6.算法竞赛中的常用JAVA API :Math类(转载)
6.算法竞赛中的常用JAVA API :Math类 求最值 最小值 Math.min(int a, int b) Math.min(float a, float b) Math.min(double ...
- SpringMVC学习05(整合ssm)
5.整合SSM 环境要求 环境: IDEA MySQL 5.7.19 Tomcat 9 Maven 3.6 要求: 需要熟练掌握MySQL数据库,Spring,JavaWeb及MyBatis知识,简单 ...
- KNeighborsClassifier()的参数无效错误
KNeighborsClassifier()的参数无效错误 写在前面:如果对自己英语拼写很自信,可以不用往下看了,我就是拼写错误 错误提示 Invalid parameter n_neightbors ...
- ViewPager2 使用说明书
ViewPager2 使用说明书 零.Demo 项目源码 演示 apk 如果对你有用,希望能给个 star,谢谢. 一.功能 官方关于使用 ViewPager2 创建滑动视图的说明: Swipe vi ...