springboot项目打包成jar和war部署到阿里云的问题总结
-
问题一:
在本地测试的时候,打成jar包,使用java -jar xxxx.jar命令启动项目,浏览器访问资源报404,log打印拦截器正常工作。解决方法: 1)确保将resource资源打包进去了。
<resources>
<!--把jsp编译到META-INF/resources目录中-->
<resource>
<directory>src/main/webapp</directory>
<targetPath>META-INF/resources</targetPath>
<includes>
<include>**/*.*</include>
</includes>
</resource>
<!--使用了mybatis,而且mapper文件放在src/main/java目录下-->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<!--把src/main/resources下的所有文件都包含在classes目录下-->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>*.*</include>
</includes>
</resource>
</resources>
2)如果jar包中存在了resource资源,依旧报404,将打包方式改为war,使用java -jar xxxx.war命令启动。
- 问题二:
改成war方式打包,如果报java.lang.NoSuchMethodError:javax.servlet.http.HttpServletRequest.getHttpServletMapping()Ljavax/servlet/http/HttpServletMapping;
解决方法: 依赖冲突,将pom文件中的servlet依赖加上<scope>provided</scope>
,或者直接去掉。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
- 问题三:
由于springboot自带tomcat,如果使用的是它自带的,那么会用properties配置文件里设置的port。当使用java -jar xxx.war后tomcat启动失败,检查port是否被占用
Windows系统下使用:
1)netstat -aon:查看所有端口情况
2)netstat -aon|findstr 端口号:查看指定端口的情况,记住最后一列的数字
C:\Users\zjj>netstat -aon|findstr "8080"
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 7072
TCP [::]:8080 [::]:0 LISTENING 7072
3)tasklist|findstr 端口号:查看占用了该端口的进程的名称
4)taskkill /pid 进程号 /f:强制结束对应pid的进程
C:\Users\zjj>taskkill /pid 7072 /f
linux操作系统下使用:
1)netstat -anp|grep 8080:找到占用8080端口的线程
2)kill -9 线程id:根据线程id强制终止线程
注意:部署到阿里云服务器上使用其他端口,需要查看云服务器安全组端口号是否打开
我就是因为这个没打开,一直在找打包的问题