Spring Boot 的 .original 文件是什么意思?

创建Spring Boot项目并运行`mvn clean package`命令时,将在target目录中创建以下样式的`.original`文件。

image.png

为了弄清楚这是什么东西,我进行了调查。

原始文件只是一个Jar或War文件。

是的,只是一个普通的Jar文件,War文件。

Spring Boot可以创建可执行的Jar(War)文件。
这种形式是非.original文件的Jar或War。

原始内容不是一个可执行文件,只是一个Jar或War文件。

当我们解压缩Jar或War并比较其内容时会发现,可执行的Jar(War)包含了Spring Boot相关的必要类,而且文件结构也不同。

詳細內容在官方文件中有解釋:
https://docs.spring.io/spring-boot/docs/current/reference/html/executable-jar.html

Spring Boot Maven Plugin的作用

这个文件是由Spring Boot Maven插件创建的。
这个插件有一个名为spring-boot:repackage的目标,它在这里创建可执行的Jar(War),并将原来由Maven打包的Jar或War文件重新命名为.original。

为什么在没有指定spring-boot:repackage的情况下,会创建mvn clean package的文件呢?这是因为在spring-boot-starter-parent的pom.xml中进行了以下设定。

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <executions>
    <execution>
      <id>repackage</id>
      <goals>
        <goal>repackage</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <mainClass>${start-class}</mainClass>
  </configuration>
</plugin>

由于repackage是在package阶段执行的,所以执行mvn clean package命令时,repackage也会被执行。

为了避免创建原始文件,可以采取以下措施。

如果需要创建可执行的Jar(War)文件,则必定会创建.original文件。但如果只想创建普通的Jar或War文件,则可以使用以下任一方法跳过创建可执行的Jar(War)。

    コマンドの引数で指定する場合
mvn clean package -Dspring-boot.repackage.skip=true
    pom.xmlで設定する場合
<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <configuration>
        <skip>true</skip>
      </configuration>
    </plugin>
  </plugins>
</build>

原始文件的使用方式

如果你的运维方式是不使用内置的Tomcat,而是将War文件部署到应用服务器上,那么并不一定需要使用可执行的War文件。(当然,可执行的War文件也可以进行部署。)

由于Executable War包含了用于执行的Spring Boot类和在Maven中设置为provided范围的库,因此通常比普通的War文件大。因此,如果进行此类操作,您可以部署.original文件或进行上述配置,以避免创建Executable War,从而减小文件大小。

但是,我认为Spring Boot的优点就在于可以使用Java命令快速执行。

广告
将在 10 秒后关闭
bannerAds