69. Supporting other build systems

If you want to use a build tool other than Maven, Gradle or Ant, you will likely need to
develop your own plugin. Executable jars need to follow a specific format and certain
entries need to be written in an uncompressed form (see the
executable jar format section
in the appendix for details).

The Spring Boot Maven and Gradle plugins both make use of spring-boot-loader-tools to
actually generate jars. You are also free to use this library directly yourself if you
need to.

69.1 Repackaging archives

To repackage an existing archive so that it becomes a self-contained executable archive
use org.springframework.boot.loader.tools.Repackager. The Repackager class takes a
single constructor argument that refers to an existing jar or war archive. Use one of the
two available repackage() methods to either replace the original file or write to a new
destination. Various settings can also be configured on the repackager before it is
run.

69.2 Nested libraries

When repackaging an archive you can include references to dependency files using the
org.springframework.boot.loader.tools.Libraries interface. We don’t provide any
concrete implementations of Libraries here as they are usually build system specific.

If your archive already includes libraries you can use Libraries.NONE.

69.3 Finding a main class

If you don’t use Repackager.setMainClass() to specify a main class, the repackager will
use ASM to read class files and attempt to find a suitable class
with a public static void main(String[] args) method. An exception is thrown if more
than one candidate is found.