読者です 読者をやめる 読者になる 読者になる

Spring Bootでspring-boot-starter-parentじゃない親pomを使いつつ、Fully Executable Warにする。

最近はSpringとかSpring Bootで組むあんなのとかそんなのを開発しております。

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <executable>true</executable>
    </configuration>
</plugin>

こんな感じで、Fully Executable War というのになるように作ると、(WebアプリならTomcatまで含めて)依存関係全部込みのJarファイルを作ってくれた上に、Jarファイルの頭にシェルスクリプトをつけて、/etc/init.d/ からシンボリックリンクを張れば、そのままサービスにできちゃうファイルを作ってくれる便利さなのですが、 なぜかこれがうまくいかない。

原因は、pom.xmlで、親を

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.1.RELEASE</version>
</parent>

とするのではなく、いろんな事情で親にしないといけない別の親pomを指定しながら、

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring.boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

これでspring-boot-dependenciesを指定してたら、だいたい同じことをしてくれるのかなと思ってたらmavenプラグインの設定に関しては何もしてくれなかったため。

<plugin>
        <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-maven-plugin</artifactId>
         <version>${spring.boot.version}</version>
         <executions>
            <execution>
                 <goals>
                     <goal>repackage</goal>
                 </goals>
            </execution>
        </executions>
        <configuration>
            <executable>true</executable>
        </configuration>
</plugin>

こんな感じで、repackageの設定をする必要がありました。