• 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可以有两种部署方式。

  • 相关阅读:
    关于拉格朗日乘子法和KKT条件
    深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
    安全模式下运行Windows installer并卸载程序
    win10 进入安全模式的方法
    支持向量机通俗导论(理解SVM的三层境界)
    Windows系统防火墙用法
    浏览器起始页被篡改恶意跳转解决方法
    网络熟知端口号
    SSL/TLS协议运行机制的概述
    分布式拒绝服务攻击 DDoS
  • 原文地址:https://www.cnblogs.com/hfultrastrong/p/8567003.html
Copyright © 2020-2023  润新知