IDEA中使用tomcat部署项目遇到的问题:
1,tomcat中webapps目录下有原来的项目,但是实际使用中启动tomcat却没有看到这个项目启动。
2.这个目录下竟然没有当前正在开发准确说是正在tomcat上跑着的项目。。
最后发现IDEA其实是通过自己内置的tomcat配置文件设置虚拟路径实现部署的,完全不会对已经安装的tomcat设置有任何影响
首选说IDEA Artifacts选择要部署web应用时会有两个项,一个是war:exploded,另一个是war。
第一个war:exploded 指的是热加载,开发中一般会用这个进行部署。因为更改文件后可以热部署刷新。
下面通过project的设置可以看到这个结构。其实这种形式部署时不会打成war包,如图,IDEA默认编译输出路径是在项目target目录下,然后通过配置虚拟路径方式实现部署。。所以就有了我上面提到的第二个问题,这种形式部署启动的话tomcat里面是找不到部署目录的。
不妨直接看一下是不是这样,这种方式部署的时候IDEA不会直接使用本地tomcat,而是为每个项目复制一套配置信息,如下图,Unnamed_EduProject_2这个目录下就包含了tomcat的配置信息,直接看conf\Catalina\localhost目录下,果然有一个名为edu_manager_war_exploded的xml文件,这个实现方式,class文件在磁盘路径上,而且配了虚拟路径,毫无疑问这就是正儿八经的tomcat使用虚拟路径部署的方式,文件内容为:
<Context path="/edu_manager_war_exploded" docBase="D:\DEV\EduProject\common-parent\edu-manager\target\edu-manager" />
所以war:exploded 热加载 的大概的过程就是通过内置的tomcat信息,采用虚拟路径部署的方式来实现这种方式IDE部署。除了跑起来的是我们安装的tomcat,其他配置跟本地的tomcat没有啥关系。。。。
第二个war形式 ,这个会就会把项目打成war包。
但是这种形式启动后会发现项目出现在我们自己的webapps下去了,第一反应就是IDEA把项目部署到了我们安装的tomcat,但是令人懵逼的是在IDEA的tomcat的conf\Catalina\localhost目录下仍然可以看到虚拟路径的设置。哇,这就看傻了。。。
<Context path="/edu_manager_war" docBase="D:\DEV\EduProject\common-parent\edu-manager\target\edu-manager.war" />
tomcat会加载webapps下的项目,然后加载虚拟路径配置的项目。
但是虚拟路径配置的如果是war包,那虚拟路径的配置其实不会部署项目,这个配置会以虚拟路径设置的名称作为解压后的名字把war包解压到webapps下然后就被tomcat加载了不会原磁盘位置直接解压。所以当我们选择这个进行部署的时候自然就能在目录下看到项目的目录了。