天天看點

springboot war 包打包注意事項

把spring-boot項目按照平常的web項目一樣釋出到tomcat容器下,當然不可能永遠都在你的編輯器運作了,在編輯中運作是因為Spring boot 內建了Tomcat,下面我們要釋出我們自己的Tomcat

一、在pom.xml裡設定 

1

<code>&lt;packaging&gt;war&lt;/packaging&gt;</code>

二、移除嵌入式tomcat插件,在pom.xml裡找到spring-boot-starter-web依賴節點,在其中添加如下代碼

注:如果第三步使用第三種方式,則不需要第二步驟

2

3

4

5

6

7

8

9

10

11

<code>&lt;dependency&gt;</code>

<code>    </code> <code>&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;</code>

<code>    </code> <code>&lt;artifactId&gt;spring-boot-starter-web&lt;/artifactId&gt;</code>

<code>    </code> <code>&lt;!-- 移除嵌入式tomcat插件 --&gt;</code>

<code>    </code> <code>&lt;exclusions&gt;</code>

<code>        </code> <code>&lt;exclusion&gt;</code>

<code>            </code> <code>&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;</code>

<code>            </code> <code>&lt;artifactId&gt;spring-boot-starter-tomcat&lt;/artifactId&gt;</code>

<code>        </code> <code>&lt;/exclusion&gt;</code>

<code>    </code> <code>&lt;/exclusions&gt;</code>

<code>&lt;/dependency&gt;</code>

三、添加servlet-api的依賴,下面三種方式都可以,任選其一種,本用文的第三種

<code>    </code> <code>&lt;groupId&gt;javax.servlet&lt;/groupId&gt;</code>

<code>    </code> <code>&lt;artifactId&gt;javax.servlet-api&lt;/artifactId&gt;</code>

<code>    </code> <code>&lt;version&gt;3.1.0&lt;/version&gt;</code>

<code>    </code> <code>&lt;scope&gt;provided&lt;/scope&gt;</code>

<code>    </code> <code>&lt;groupId&gt;org.apache.tomcat&lt;/groupId&gt;</code>

<code>    </code> <code>&lt;artifactId&gt;tomcat-servlet-api&lt;/artifactId&gt;</code>

<code>    </code> <code>&lt;version&gt;8.0.36&lt;/version&gt;</code>

<code>&lt;!--Springboot內建的tomcat來提供api--&gt;</code>

<code>&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;</code>

<code>&lt;artifactId&gt;spring-boot-starter-tomcat&lt;/artifactId&gt;</code>

<code>&lt;scope&gt;provided&lt;/scope&gt;</code>

在這裡将scope屬性設定為provided,這樣在最終形成的WAR中不會包含這個JAR包,因為Tomcat或Jetty等伺服器在運作時将 會提供相關的API類。

四、修改啟動類,并重寫初始化方法,main方法啟動的方式,都有一個App的啟動類,代碼如下:

<code>@SpringBootApplication</code>

<code>public</code>  <code>class</code>  <code>Application {</code>

<code>    </code> <code>public</code>  <code>static</code>  <code>void main(String[] args) {</code>

<code>        </code> <code>SpringApplication.run(Application.</code> <code>class</code> <code>, args);</code>

<code>    </code> <code>}</code>

<code>}</code>

改為:

12

13

14

15

16

<code>public</code>  <code>class</code>  <code>SpinggirlApplication </code> <code>extends</code>  <code>SpringBootServletInitializer {</code>

<code>    </code> <code>/**</code>

<code>     </code> <code>* 如果要釋出到自己的Tomcat中的時候,需要繼承SpringBootServletInitializer類,并且增加如下的configure方法。</code>

<code>     </code> <code>* 如果不釋出到自己的Tomcat中的時候,就無需上述的步驟</code>

<code>     </code> <code>*/</code>

<code>    </code> <code>@Override</code>

<code>    </code> <code>protected</code>  <code>SpringApplicationBuilder configure(SpringApplicationBuilder builder) {</code>

<code>        </code> <code>// 注意這裡要指向原先用main方法執行的Application啟動類</code>

<code>        </code> <code>return</code>  <code>builder.sources(Application.</code> <code>class</code> <code>);</code>

或者啟動類不做改變,重新建立一個類,如下:

<code>import org.springframework.boot.builder.SpringApplicationBuilder;</code>

<code>import org.springframework.boot.web.support.SpringBootServletInitializer;</code>

<code>public</code>  <code>class</code>  <code>ServletInitializer </code> <code>extends</code>  <code>SpringBootServletInitializer {</code>

<code>        </code> <code>return</code>  <code>builder.sources(SpinggirlApplication.</code> <code>class</code> <code>);</code>

<code>    </code> 

五、打包部署

通過指令行進入項目根目錄下(即包含pom.xml的目錄),在指令行裡輸入: 

mvn clean package即可, 等待打包完成。

出現[INFO] BUILD SUCCESS即為打包成功。 

然後把target目錄下的war包放到tomcat的webapps目錄下,啟動tomcat,即可自動解壓部署。 

最後在浏覽器中輸入

http://localhost:[端口号]/[打包項目名]/