今天有个童鞋告诉我,无法在测试服务器的tomcat上部署他的WAR文件了。一般来说,eclipse直接导出的WAR包,是直接丢到 tomcat 的 webapps 目录中,tomcat就会自动解压了;另一种方式是,使用 java -jar xxx.war 命令直接运行 war 文件。
这个童鞋的 war 包没有经过maven编译,直接由 eclipse导出,所以第二种方式不可行,会报错“no main manifest attribute" 。而使用方法一,却遇到了 tomcat 无法启动的问题,现象如下:
运行startup.sh并没有输出异常信息,打印“Tomcat started.”字样
运行命令“ps -aux | grep tomcat”;发现tomcat并没有真正启动
这事儿着实有点诡异,这台服务器上还部署了ngrinder,占用了8080端口。虽然 tomcat 状态异常,但是 ngrinder 能正常使用。莫非是端口冲突?我把 conf/server.xml 中的默认端口号改掉,重试一次,还是不能正常启动。
最后,我用“ps -A”查看所有运行的进程,把 java 进程 kill掉。此时,ngrinder 也不能访问了。再用 startup.sh 来启动 tomcat ,tomcat 就能启动了,之前的 war 包也自动解压了。浏览器上访问没有异常,ngrinder 也可以正常使用。
看到这里,你或许认为 是我改了端口号才解决了这个问题,然而,当我把端口号换回默认的8080,之前的错误却无法复现,一切正常了。