LoginSignup
9
4

More than 5 years have passed since last update.

Spring Boot の .originalファイルとは何か

Last updated at Posted at 2018-10-25

Spring Bootプロジェクトを作成し、mvn clean packageコマンドを実行すると、targetディレクトリ内に以下のように.originalファイルが作成されています。

image.png

これはなんぞや、ということで調べてみました。

.originalファイルはただのJarもしくはWar

はい、ただのJarファイル、Warファイルです。

Spring BootはExecutable Jar(War)を作成することができます。
この形式になっているのが、.originalではない方のJarやWarです。

.originalはExecutableではない、ただのJarやWarということです。

JarやWarを解凍して中身を比較するとわかりますが、Executable Jar (War) は実行に必要なSpring Boot関連のクラスを含んでいたり、ディレクトリ構成が異なっていたりします。

詳細は公式ドキュメントに説明があります。
https://docs.spring.io/spring-boot/docs/current/reference/html/executable-jar.html

Spring Boot Maven Pluginが作っている

このファイルはSpring Boot Maven Pluginが作成しています。
このPluginにはspring-boot:repackageというゴールがあり、ここでExecutable Jar (War) を作成し、もともとMavenでpackageされていたJarやWarを.originalという名称にリネームしています。

なぜ、mvn clean packageという感じに、spring-boot:repackageを指定していないのに作成されてしまうのかというと、spring-boot-starter-parentのpom.xmlに以下のような設定が行われているからです。

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>

repackagepackageフェーズで実行されるので、mvn clean packageすれば、repackageも実行されます。

.originalファイルを作成しないようにするためには

Executable Jar (War) を作成する必要があるのであれば、.originalファイルは必ず作成されてしまいます。
しかし、ただのJarやWarを作成するだけにしたいのであれば、以下のいずれかでExecutable Jar (War) の作成をスキップできます。

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

.originalファイルの使いみち

組み込みTomcatを利用せず、Warファイルをアプリケーションサーバにデプロイする運用なのであれば、Executable Warである必要はありません。
(もちろん、Executable Warでもデプロイは可能です。)

Executable Warは、実行するために必要なSpring Bootのクラスや、Mavenでprovidedスコープにしたライブラリも含んでいるため、通常のWarファイルよりもファイルサイズが大きくなりがちです。
そのため、このような運用を行っている場合であれば、.originalファイルをデプロイしたり、上述の設定を行って、Executable Warを作成しないようにすることで、ファイルサイズを抑えることができます。

ただ、javaコマンドでサクッと実行できるのがSpring Bootの良さだと思いますけど。

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4