Skip to content
Patrik Beno edited this page Jul 27, 2015 · 1 revision

Spring Boot Launcher is provided as a standalone module. This may or may not get integrated into main Spring Boot code base. However, while it is usable as is, it requires a few modifications to the Spring Boot code base so that the artifacts built by Spring Boot can be processed by the Launcher.

These updates are broken into several small contributions submitted as pull requests.

This page provides overview for all of them. The goal is to provide single consolidated information that puts individual isolated pull requests in a wider context.

Repackager: Pluggable Layouts

Relation to Spring Boot Launcher? Launcher needs non-executable layout with no launcher class and no embedded libraries. Originally, I considered custom MAVEN layout but it is basically the same as NONE. Hence, instead of creating another redundant layout, how about fixing the existing one: NONE?

Plugins: support for overriding layout-provided launcher class

Spring Boot plugins "hijack" application’s manifest by redirecting Main-Class attribute to a layout-provided launcher class and embedding some core Spring Boot Loader classes. Original Main-Class attribute is copied to Start-Class attribute which is handled by loader.

The problem is, you might need to customize default launcher behavior, but the plugins do not provide any means.

This, in particular, is the case of Spring Boot Launcher, which gave up on its own dedicated layout (see above) but needs to customize default launcher.

Spring-Boot-Dependencies

This modifies both Maven and Gradle plugins so that they populate Spring-Boot-Dependencies manifest attribute with list of Maven artifact dependencies. These few tens or hundreds characters can be considered a valuable dependency information stored within each artifact, or they can be utilized by dependency management tools like Spring Boot Launcher.

Spring Boot Launcher

Main code. It requires artifacts with properly populated Spring-Boot-Dependencies manifest attribute (provided by plugins), simple NONE layout with no embedded dependencies. Also, to build launcher itself, ability to customize launcher class is required.

Clone this wiki locally