zoukankan      html  css  js  c++  java
  • Spring Boot war包&jar包对比

    使用 Maven对SpringBoot程序进行打包处理有两种格式:
    一种是war包,一种是jar包。

    虽然我们将springboot应用打包成了war包,但是我们依然可以使用 java -jar的方式来运行。

    如何将应用打包成war包:
    1、将pom.xml文件中的打包方式改为 :<packaging>war</packaging>
    2、然后添加一个类,这个类继承 SpringBootServletInitializer 类,并且重写了里面的 configure() 方法。

    package com.thunisoft.eurekaserver;
    
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.boot.web.support.SpringBootServletInitializer;
    
    public class ApplicationWebStarter extends SpringBootServletInitializer {
    
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
            return builder.sources(EurekaserverApplication.class);
        }
    }
    

      

    然后可以直接使用 maven 去打包应用,这一点没有区别。

    下面我们就来研究一下这两种打包方式,产出的文件结构有什么不同;

    1、首先看一下打包成war包的方式:

    文件夹 PATH 列表
    卷序列号为 CE2F-63AD
    C:USERSADMINISTRATORDESKTOPEUREKA-WAR
    ├─META-INF
    │  │  MANIFEST.MF
    │  │  
    │  └─maven
    │      └─com.thunisoft
    │          └─eurekaserver
    │                  pom.properties
    │                  pom.xml
    │                  
    ├─org
    │  └─springframework
    │      └─boot
    │          └─loader
    │              │  ExecutableArchiveLauncher$1.class
    │              │  ExecutableArchiveLauncher.class
    │              │  ......
    │              │  ......
    │              │  WarLauncher.class
    │              │  
    │              ├─archive
    │              │      Archive$Entry.class
    │              │      Archive$EntryFilter.class
    │              │      ......
    │              │      ......
    │              │      JarFileArchive.class
    │              │      
    │              ├─data
    │              │      ByteArrayRandomAccessData.class
    │              │      ......
    │              │      ......
    │              │      RandomAccessDataFile.class
    │              │      
    │              ├─jar
    │              │      AsciiBytes.class
    │              │      Bytes.class
    │              │      CentralDirectoryEndRecord.class
    │              │      ......
    │              │      ......
    │              │      CentralDirectoryVisitor.class
    │              │      FileHeader.class
    │              │      
    │              └─util
    │                      SystemPropertyUtils.class
    │                      
    └─WEB-INF
        ├─classes
        │  │  application.yml
        │  │  bootstrap.yml
        │  │  
        │  └─com
        │      └─thunisoft
        │          └─eurekaserver
        │                  ApplicationWebStarter.class
        │                  EurekaserverApplication.class
        │                  
        └─lib
                antlr-2.7.7.jar
                antlr-runtime-3.4.jar
                ......
    			......
    			......
    			aopalliance-1.0.jar
                archaius-core-0.7.4.jar
    

      


    2、然后我们看一下jar包的打包目录

    文件夹 PATH 列表
    卷序列号为 CE2F-63AD
    C:USERSADMINISTRATORDESKTOPEUREKA-JAR
    ├─BOOT-INF
    │  ├─classes
    │  │  │  application.yml
    │  │  │  
    │  │  └─com
    │  │      └─thunisoft
    │  │          └─eurekaserver
    │  │                  EurekaserverApplication.class
    │  │                  
    │  └─lib
    │          antlr-2.7.7.jar
    │          antlr-runtime-3.4.jar
    │          aopalliance-1.0.jar
    │          ......
    │          ......
    │          ......
    │          classmate-1.3.4.jar
    │          commons-codec-1.10.jar
    │          commons-collections-3.2.2.jar
    │          
    ├─META-INF
    │  │  MANIFEST.MF
    │  │  
    │  └─maven
    │      └─com.thunisoft
    │          └─eurekaserver
    │                  pom.properties
    │                  pom.xml
    │                  
    └─org
        └─springframework
            └─boot
                └─loader
                    │  ExecutableArchiveLauncher$1.class
                    │  ExecutableArchiveLauncher.class
                    │  ......
                    │  ......
                    │  PropertiesLauncher.class
                    │  WarLauncher.class
                    │  
                    ├─archive
                    │      Archive$Entry.class
                    │      Archive$EntryFilter.class
                    │      ......
                    │      ......
                    │      JarFileArchive.class
                    │      
                    ├─data
                    │      ByteArrayRandomAccessData.class
                    │      RandomAccessData$ResourceAccess.class
                    │      ......
                    │      ......
                    │      RandomAccessDataFile$FilePool.class
                    │      RandomAccessDataFile.class
                    │      
                    ├─jar
                    │      AsciiBytes.class
                    │      Bytes.class
                    │      CentralDirectoryEndRecord.class
                    │      ......
                    │      ......
                    │      ......
                    │      FileHeader.class
                    │      JarURLConnection.class
                    │      ZipInflaterInputStream.class
                    │      
                    └─util
                            SystemPropertyUtils.class
    

      

    3、对比
    对比之后我们发现,其实这两中打包方式解压后的目录结构大体上是相似的。
    不同点:
    1、首先如果是jar包,一般是这样三个目录: META-INF org BOOT-INF
    2、war包的结构是,会将上面的 BOOT-INF 目录名 换成 WEB-INF
    3、相对于jar包,war包里面会多出一个类SpringBootServletInitializer,这个类的存在就可以让我们把打包出的war包放入tomcat等一系列的容器中运行。

    将jar包改为war包其实很容易,只需要更改BOOT-INF 为 WEB-INF,然后添加一个启动类,SpringBootServletInitializer,这样就可以直接将war包扔进容器中运行了,当然也可以使用jar -jar方式运行,但是里面的main方法是要存在的,不然只能放在容器中运行,不能使用命令行运行。
    所以综上所述,使用war包比使用jar要更加方便,因为war可以有两种部署方式。

  • 相关阅读:
    直击美国大选,特朗普担心黑客?郭盛华这样回应
    30岁郭盛华近照曝光,容貌大变判若两人,经历了什么?
    美选举日,科技股飙升,原因是什么?
    索尼收购了TikTok?事实真是这样吗?
    腾讯手游《王者荣耀》创下每日1亿用户记录
    东方联盟创始人郭盛华十大励志名言
    抛弃谷歌!苹果研发自己的搜索引擎技术
    vivo 悟空活动中台
    Android 加载图片占用内存分析
    Linux Page Cache调优在Kafka中的应用
  • 原文地址:https://www.cnblogs.com/hfultrastrong/p/8567003.html
Copyright © 2011-2022 走看看