Giriş
Spring boot uygulamasını paketlemek için
gerekir. Açıklaması
şöyle.
Unfortunately, if we are working with a jar package, the basic Maven package goal doesn't include any of the external dependencies.
This means that we can use it only as a library in a bigger project.
To circumvent this limitation, we need to leverage the Maven Spring Boot plugin repackage goal to run our jar/war as a stand-alone application.
Maven 3.2 gerektirir. Açıklaması
şöyle.
The Spring Boot Maven Plugin provides Spring Boot support in Maven, allowing you to package executable jar or war archives and run an application “in-place”. To use it you must be using Maven 3.2 (or better).
mvn package spring-boot:repackage
Bağlıysa sadece şöyle yaparız
mvn package
Bağlamak için şöyle yaparız. Bu en kullanılabilecek en basit hali.
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
1. repackage Goal - Fat Jar Yapısı
Eğer fat jar'ı açarsak
BOOT-INF dizininde kendi kodlarımızı görebiliriz.
org ile başlayan dizinde de spring kodları var. Şeklen
şöyle|__BOOT-INF
| |__classes //1 - Project compiled classes
| |__ lib //2 - JAR dependencies
|__META-INF
| |__ MANIFEST.INF
|__org
|__ springframework
|__ boot
|__ loader //3 - Spring Boot class-loading classes
Manifest dosyasının için şöyledir
Manifest-Version: 1.0
Created-By: Maven JAR Plugin 3.4.2
Build-Jdk-Spec: 22
Implementation-Title: spring-cds-tutorial
Implementation-Version: 0.0.1-SNAPSHOT
Main-Class: org.springframework.boot.loader.launch.JarLauncher
Start-Class: com.colak.springtutorial.SpringTutorialApplication
Spring-Boot-Version: 3.3.1
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
Spring-Boot-Layers-Index: BOOT-INF/layers.idx
Main-Class İle Tanımlanan JarLauncher Nedir
Açıklaması
şöyle. Yani uygulamayı esas başlatan Spring sınıfıdır
When a Spring Boot JAR file is executed using the java -jar command, the JVM uses the Main-Class attribute in the MANIFEST.MF file to start the specified launcher.
Açıklaması
şöyle. Bu sınıf
Start-Class alanını okur ve belirtilen sınıfı Main class olarak kullanır
JarLauncher extends org.springframework.boot.loader.Launcher and is specifically designed to start Spring Boot applications packaged as Fat JARs.
Start-Class İle Tanımlanan Kendi Sınıfım
@SpringBootApplication olarak işaretli kendi Main sınıfımı belirtir
2. Plugin Kullanımı
mainClass Tag
ÖrnekEğer kodumuzda birden fazla main metodu varsa başlangıç olanını belirtmek için
kullanırız. configuration tag'i için açıklama
şöyle.
Your existing archive will be enhanced by Spring Boot during the package phase. The main class that you want to launch can either be specified using a configuration option, or by adding a Main-Class attribute to the manifest in the usual way. If you don’t specify a main class the plugin will search for a class with a public static void main(String[] args) method.
Şöyle
yaparız.
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<mainClass>gpdi.MyApp</mainClass>
</configuration>
</execution>
</executions>
</plugin>
classifier Tag
ÖrnekŞöyle
yaparız.
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>exec</classifier>
</configuration>
</execution>
</executions>
</plugin>