关于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服务,但愿它可以尽快完善成熟,更多地用于实践,提高开发效率。

相关文章
相关标签/搜索