zoukankan      html  css  js  c++  java
  • springboot打war包汇总

    概述

      第一次用maven工具打war包,出现各种各样的问题,做个问题记录方便下次查看

    maven

      一开始用的maven是springboot默认的,在.m2下,要打包时才发现没有mvn指令。索性自己就重新装个maven,去官网下载,我安装的是3.5.2版本。因为maven仓库默认是国外的,需要更改为国内的镜像地址,方便建立本地的仓库,于是更改setting.xml文件,在<mirrors>标签内添加一个新的标签,完成之后自己配置环境变量,下图是lz自己电脑的配置,根据自己安装目录进行,完成后测试下maven -version

        <mirror>
          <id>mirrorId</id>
          <mirrorOf>repositoryId</mirrorOf>
          <name>Human Readable Name for this Mirror.</name>
          <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        </mirror>

    环境变量

     

    指定要下载的本地仓库地址,所以添加本地地址

    <localRepository>D:maven
    epository</localRepository>

    IDEA配置maven

      除此之外,IDEA也需要更改默认的maven地址,home directory选择本地maven,file 选择本地maven的配置文件,local repository选择本地仓库路径

    pom.xml修改

    重新加载maven->reimport,下载本地仓库时间较慢,慢慢等待吧。本地仓库下载完成后,必须修改打包形式,在pom.xml内添加

    <packaging>war</packaging>

    因为springboot整合有tomcat的容器如果打成war包放置在外部服务器的tomcat下,将会出现冲突,所以移除内部的tomcat容器,在pom.xml下添加

         <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

    还需要添加servlet-api依赖

            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
                <scope>provided</scope>
            </dependency>

    如果不想用maven打包出来的war名称,还得添加自己自定义的名称

    <finalName>seasgame</finalName>
            <pluginManagement>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>2.3.2</version>
                        <configuration>
                            <encoding>${project.build.sourceEncoding}</encoding>
                            <source>1.7</source>
                            <target>1.7</target>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <testFailureIgnore>true</testFailureIgnore>
                        </configuration>
                    </plugin>
                </plugins>
            </pluginManagement>

    pom.xml修改到这里,我们开始进行打包,在pom.xml那层目录,执行 mvn clean package

    启动类修改

    public class SpringBootStartApplication extends SpringBootServletInitializer
    {
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder)
        {
            // 注意这里要指向原先用main方法执行的SeasgameApplication启动类
            return builder.sources(SeasgameApplication.class);
    
        }
    }

    问题汇总

    因为移除了tomcat,所以跟tomcat依赖相关的得更改。

    ERROR: expected START_TAG or END_TAG not TEXT

    这是因为pom.xml的文件内,有不合法的语法,也可以看提示哪一行出的问题,建议处理方法将idea的检验级别拉高,有问题就会一下子报红。将标签内容补全,重新在进行打包

    ERROR:No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?

    这是因为我们需要之指定一个符合配置的JDK环境,这个问题一般是因为装有多个版本的jdk引发的,idea的maven配置Runner,需要配置哪个版本,最好都一致。

    ERROR:Unsupported major.minor version 52.0

    版本信息不一致,低版本编译高版本出的问题,springboot我建议用tomcat 8 以上和jdk8以上,因为tomcat7太过老旧了,可能会出现各种不兼容的问题,升级后一般能解决很多问题。

    ERROR: Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5

    这是被某个程序占用了,我们重新启动下idea,甚至还无法解决可以重启。

    在打包的时候出现这几个问题,一 一解决后要部署到服务器。因为服务器还是用jdk7和tomcat7。。各种版本不兼容,很头疼。只能自己在装一个jdk8 和tomcat8,在tomcat8内指定jdk版本运行。

    在tomcat8的bin下修改 setclasspath.sh 在第一行添加

    export JAVA_HOME=/usr/local/jdk1.8.0_172/
    export JAVA_HOME=/usr/local/jdk1.8.0_172/jre

    如何还不行,在catalina.sh内也添加上。因为有多个版本tomcat所以端口号会冲突,修改server里的端口号。。可参考这篇文件

    https://blog.csdn.net/Jay_1989/article/details/52870760

    好了,启动tomcat8,发现

    ERROR:Field xxxService in 某个类 required a single bean, but 3 were found

    这是因为我在内部有个工程类

    private EntityManager entityManager;

    找不到这个bean,将注解弄掉。顺利跑起来了,第一次打war包花了一下午的时间,终于成功跑起来,访问127.0.0.1:端口号

  • 相关阅读:
    DATASNAP远程方法返回TSTREAM正解
    DELPHI获取宽带IP
    DELPHI HMAC256
    JWT -- JSON WEB TOKEN
    UNIGUI集成HTML导航
    咏南WEB APP开发框架
    购买咏南中间件
    咏南中间件当作WEB SERVER使用方法
    咏南中间件增加WEBSOCKET支持
    iOS -- 设置label的自适应
  • 原文地址:https://www.cnblogs.com/dslx/p/11465842.html
Copyright © 2011-2022 走看看