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\repository</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:端口號

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM