一、前因
最近项目需要经常使用maven打包发布到服务器上,打包的时候遇到缓存是很正常的事情,按常规都是使用 maven clean 命令清理target文件夹,但在清理次数多了的时候偶尔发现:清理完成后使用IntelliJ启动tomcat测试时,发现程序一直卡在这里
18-Feb-2019 16:32:51.812 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [D:\Java\apache-tomcat-8.5.34\webapps\manager]
18-Feb-2019 16:32:51.969 信息 [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
18-Feb-2019 16:32:52.021 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [D:\Java\apache-tomcat-8.5.34\webapps\manager] has finished in [205] ms
这个问题令我很懊恼。在网上查阅一些资料发现大量文档都是使用增加虚拟机堆内存大小来解决这个问题
在catalina.bat 文件中设置了jvm参数 set JAVA_OPTS= -Xmx1024M -Xms512M -XX:MaxPermSize=256m。
但我尝试过后并没有什么好转,程序依旧跑不起来。
二、思路
该篇文章提供了思路:
https://segmentfault.com/q/1010000012009206/a-1020000016238241
http://www.myexception.cn/other/1998827.html
从网络上了解,artifact是一种用于装载项目资产以便于测试,部署,或者分布式软件的解决方案。例如集中编译class,存档java应用包,web程序作为目录结构,或者web程序存档等。因为使用IntelliJ的好处是不用把代码重新发布到本地的tomcat中,IntelliJ自己会虚拟一个tomcat,程序直接在上面跑,免除了拷贝代码操作(MyEclipse就是这个干的)。
日志上一直停止在Deployment of web application directory中,我们可以从IntelliJ虚拟出来的tomcat来入手。
参考正常启动的子项目
可以发现两个路径是不一样的,这个时候我猜测,执行命令 maven clean 后把原来target文件给删除了,原有的地址也就不见了,当IntelliJ重新加载的时候搜索不到这个文件夹,就自定义一个默认输出地址,也就是“D:\baoping\Eduz-a\Eduz-wk\eduz_apis_war_exploded”。那么为什么一定要在target/eduz-apis-0.0.1-SNAPSHOT我也不得而知,欢迎知道的朋友在下方评论区评论。
三、解决方案
发现问题了,那么我们就去解决,接下来怎么解决呢,请跟着我的脚步!
修改eduz-apis:war exploded
第三步:在target文件夹下建立
target\eduz-apis-0.0.0.1-SNAPSHOT\WEB-INF
target\eduz-apis-0.0.0.1-SNAPSHOT\META-INF
在META-INF文件夹下添加MANIFEST.MF文件(可从其他项目获取)
第四步:
修改eduz-apis:war
添加eduz-apis:war
下面两张图对比,不难看出区别
正常子项目的配置如下:
下面是修改部分:
到这里Artifacts的配置修改已经完毕
接下来修改 Configurations Tomcat Server
当所有配置完成后,需要更新Maven配置,不然可能出现找不到依赖项目
最后项目正常运行