Spring Boot 的 .original 文件是什么意思?
创建Spring Boot项目并运行`mvn clean package`命令时,将在target目录中创建以下样式的`.original`文件。
为了弄清楚这是什么东西,我进行了调查。
原始文件只是一个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命令快速执行。