關於spring boot jar包與war包的問題

此文爲轉載:http://mrlee23.iteye.com/blog/2047968java

 

在開發調試完成以後,能夠將應用打成JAR包的形式,在Eclipse中能夠直接使用Maven插件的package命令,最終會造成一個可運行的 JAR包。咱們使用java –jar命令就能夠運行這個JAR包了。Myeclipse的Maven的package請參考(http://mrlee23.iteye.com/blog/2047946 )所呈現出的效果與在調試期是同樣的。如今看一下這個JAR包解壓後的目錄結構:web

 

 

 

 

這個JAR包與傳統JAR包的不一樣之處在於裏面有一個名爲lib的目錄,在這個目錄中包含了這個簡單應用所依賴的其餘JAR包,其中也包含內置的嵌 入式Tomcat,正是使用它,才能發佈服務和訪問Web資源。除了咱們編寫的源碼所編譯造成的CLASS之外,在org目錄下還有許多Spring所提 供的CLASS,正是依賴這些CLASS,纔可以加載位於lib目錄下JAR中的類。這樣的加載機制與在OSGi bundle中聲明Bundle-Classpath很相似,不過在OSGi中會由容器來負責加載指定路徑下的類。這大體闡述了這樣一個JAR包可以發佈 服務的緣由。spring

若是咱們想要使用HTML、JSP等Web資源的話,在Controller中直接返回對應的視圖就能夠了。數據庫

若是咱們想要將這個JAR包轉換成能夠在Servlet容器中部署的WAR的話,就不能依賴於Application的main函數了,而是要以相似於web.xml文件配置的方式來啓動Spring應用上下文,此時咱們須要聲明這樣一個類:apache

 

Hellowebxml 代碼   收藏代碼
  1. public class HelloWebXml extends SpringBootServletInitializer {  
  2.     @Override  
  3.     protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {  
  4.         return application.sources(Application.class);  
  5.     }  
  6.   
  7. }  

 

這個類的做用與在web.xml中配置負責初始化Spring應用上下文的監聽器做用相似,只不過在這裏不須要編寫額外的XML文件了。api

若是要將最終的打包形式改成WAR的話,還須要對pom.xml文件進行修改,除了須要將packaging的值修改成war之外,還須要對依賴進行適當的配置(這一部分在Spring Boot的樣例和文檔中均未說起,提醒你們注意):tomcat

Pom.xml代碼   收藏代碼
  1. <dependency>  
  2.             <groupId>org.springframework.boot</groupId>  
  3.             <artifactId>spring-boot-starter-web</artifactId>   
  4.            <exclusions>  
  5.             <exclusion>  
  6.                 <groupId>org.springframework.boot</groupId>  
  7.                 <artifactId>spring-boot-starter-tomcat</artifactId>  
  8.             </exclusion>  
  9.            </exclusions>   
  10. </dependency>  

 

在這裏須要移除對嵌入式Tomcat的依賴,這樣打出的WAR包中,在lib目錄下才不會包含Tomcat相關的JAR包,不然將會出現啓動錯誤。另外,在移除對Tomcat的依賴後,爲了保證編譯正確,還須要添加對servlet-api的依賴,所以添加以下的配置:安全

Pom.xml代碼   收藏代碼
  1. <dependency>  
  2.             <groupId>org.apache.tomcat</groupId>  
  3.             <artifactId>tomcat-servlet-api</artifactId>  
  4.             <version>7.0.42</version>  
  5.             <scope>provided</scope>  
  6. </dependency>  

 

在這裏將scope屬性設置爲provided,這樣在最終造成的WAR中不會包含這個JAR包,由於Tomcat或Jetty等服務器在運行時將 會提供相關的API類。此時,執行mvn package命令就會獲得一個WAR文件,咱們能夠直接將其放到Tomcat下運行(須要7.0.42版本以上)。服務器

以上介紹了基於Spring Boot開發應用的過程,目前它的文檔尚不完善,可是在GitHub上有很多的樣例,包括與Spring Data集成訪問數據庫(關係型以及非關係型)、安全、WebSocket等,讀者感興趣能夠下載運行。app

基於以上的介紹,但願讀者可以對Spring Boot這個新項目有所瞭解。它簡化了JAR包管理和相關基礎設施環境的配置,可以幫助咱們快速開發Web應用或構建REST服務,但願它可以儘快完善成熟,更多地用於實踐,提高開發效率。

相關文章
相關標籤/搜索