0
点赞
收藏
分享

微信扫一扫

springboot项目打包成jar和war部署到阿里云的问题总结

栖桐 2022-04-19 阅读 52
java

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强制终止线程

注意:部署到阿里云服务器上使用其他端口,需要查看云服务器安全组端口号是否打开

我就是因为这个没打开,一直在找打包的问题

举报

相关推荐

0 条评论