【spring boot】6.idea下springboot打包成jar包和war包,並且可以在外部tomcat下執行訪問到
接著上一章走唄:http://www.cnblogs.com/sxdcgaq8080/p/7712874.html
然後宣告一點,下面打包的過程中,scope一直都是使用預設的範圍
<!--用於編譯jsp--> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <!--<scope>runtime</scope>--> </dependency>
把上一章建立好的spring boot專案打包成jar包和war包
【jar和war的區別就是:<packaging>標籤中的值更改就行 如下圖】
=====================================================================================================================================
好了,這裡先打成jar包
使用maven的外掛打包
此時打包出來是有預設的名稱的jar包。然後在命令列下 執行起這個jar包。當然,jar包名字你需要去上面target路徑下去拷貝一下。【是不是很麻煩!!】
然後訪問一下jsp頁面,因為我方法中加了列印,可以看到進來了
但是頁面訪問不到:
然後去jar包中檢視一下,是因為jar包中沒有把webapp下的頁面檔案等打包進去,當然訪問找不到頁面了【如果你想jar包也可以打包webapp下的頁面的話,可以:http://www.cnblogs.com/sxdcgaq8080/p/7715427.html】
好吧,jar包既然打包不成功訪問,那就打包war包:就把jar改成war就好了
【注意:如果嫌棄上面需要去拷貝jar包名字麻煩,想打包出來的名字是自定義的,在build下 規定即可】
在打包成war包
看看 打包出來的war包名字是不是自定義的
然後再執行war包
這下是可以訪問到的了。
看看war包下,是已經將頁面檔案打包進去了。
=======================================================================================================================================
好了 打包暫時打包成功了,直接拿著上面的war包放到一個外部的tomcat中跑起來試一下:
啟動一下:
不成功,按照下面 兩步走,解決當前這個在外部tomcat沒辦法執行起來並訪問的問題:
第一步:
新建一個SpringBootStartApplication 繼承自 SpringBootServletInitializer
作用:因為在外部容器部署的話,就不能依賴於Application的main函數了,而是要以類似於web.xml檔案配置的方式來啟動Spring應用上下文,
此時我們需要在啟動類中繼承SpringBootServletInitializer並實現configure方法,這個類的作用與在web.xml中配置負責初始化Spring應用上下文的監聽器作用類似
【注意】:這個新建的類,與springboot的啟動類是同級的
package com.sxd; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.support.SpringBootServletInitializer; public class SpringBootStartApplication extends SpringBootServletInitializer{ @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(FirstdemoApplication.class); } }
第二步:
修改pom.xml檔案,這裡有兩種方法,但是最終的目的都是讓springboot內嵌的tomcat在執行時不起作用而已。
兩種方法任選一種!!!
方法1:
此時的pom.xml檔案內容:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.sxd</groupId> <artifactId>firstdemo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>firstdemo</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.8.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <!--web支援--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--jsp頁面使用jstl標籤--> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> <!--用於編譯jsp--> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <!--<scope>provided</scope>--> </dependency> <!--宣告spring boot內嵌tomcat的作用範圍 在執行時不起作用--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> <finalName>firstDemo</finalName> </build> </project>
好了 這兩步完成,就可以按照上面的打包過程,打包為war包,然後放在外部的tomcat下,start.bat就可以訪問了。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
方法2:
此時的pom.xml檔案內容:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.sxd</groupId> <artifactId>firstdemo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>firstdemo</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.8.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <!--web支援--> <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> <!--jsp頁面使用jstl標籤--> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> <!--用於編譯jsp--> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <!--<scope>provided</scope>--> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> <finalName>firstDemo</finalName> </build> </project>
好了 這兩步完成,就可以按照上面的打包過程,打包為war包,然後放在外部的tomcat下,start.bat就可以訪問了。
========================================================================================================================================
最後 啟動起來外部的tomcat ,在瀏覽器中訪問路徑如下:
需要加上你的專案名字,才能成功訪問。也就是這個資料夾的名字。
好了,到這裡為止,終於能將一個springboot專案成功的打包並且放在外部的tomcat下啟動並且能夠成功訪問到頁面了。
========================================================================================================================
最後的最後,你是否注意到pom.xml檔案中 ,上一個章節到這一章節一直在糾結的一個問題:
到現在為止,已經剔除了內建的tomcat的情況下
如果指定scope範圍為provided的話
那麼
1.啟動類啟動專案的情況下:
<scope>provided</scope>新增的情況,不能成功啟動,專案不能訪問
不新增的情況,使用預設的scope,可以成功啟動,專案可以訪問
訪問地址:http://localhost:8080/view/hello
2.在右側spring-boot:run啟動的情況下:
<scope>provided</scope>新增的情況,可以成功啟動,專案可以訪問
不新增的情況,使用預設的scope,可以成功啟動,專案可以訪問
訪問地址:http://localhost:8080/view/hello
3.在命令列啟動打包的war包情況下:
<scope>provided</scope>新增的情況,可以成功啟動,專案可以訪問
不新增的情況,使用預設的scope,可以成功啟動,專案可以訪問
訪問地址:http://localhost:8080/view/hello
4.將war包部署在外部tomcat下執行的情況下:
<scope>provided</scope>新增的情況,可以成功啟動,專案可以訪問
不新增的情況,使用預設的scope,可以成功啟動,專案可以訪問
訪問地址:http://localhost:8080/firstDemo/view/hello
第一種啟動方式:
第二種啟動方式:
第三種啟動方式:
第四種啟動方式: