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の設定をする必要がありました。