
5.0 / 5
En este rápido tutorial veremos dos formas de definir un punto de entrada en una aplicación Spring Boot a través de Maven y Gradle.
La clase principal de una aplicación Spring Boot es una clase que contiene un método public static void main() que inicia el ApplicationContext de Spring. De forma predeterminada, si la clase principal no está explÃcitamente especificada, Spring buscará una en el classpath en tiempo de compilación y no podrá iniciarse si no se encuentra ninguna o varias de ellas.
Spring Boot espera que la propiedad de metadatos de Main-Class del artefacto se establezca en org.springframework.boot.loader.JarLauncher  (o WarLauncher ), lo  que significa que al pasar nuestra clase principal directamente a la lÃnea de comandos java no se iniciará correctamente nuestra aplicación Spring Boot.
Un manifest de ejemplo se ve asÃ:
Manifest-Version: 1.0 Start-Class: org.baeldung.DemoApplication Main-Class: org.springframework.boot.loader.JarLauncher
En su lugar, necesitamos definir la propiedad de clase de inicio en el manifiesto que JarLauncher evalúa para iniciar la aplicación.
Veamos cómo podemos controlar esta propiedad usando Maven y Gradle.
La clase principal se puede definir como un elemento de clase de inicio en la sección de propiedades de pom.xml :
<properties> <!-- The main class to start by executing "java -jar" --> <start-class>org.baeldung.DemoApplication</start-class> </properties>
Tenga en cuenta que esta propiedad solo se evaluará si también agregamos spring-boot-starter-parent como <parent> en nuestro  pom.xml .
Alternativamente, la clase principal se puede definir como el elemento  mainClass del plugin spring-boot-maven en la sección de plugin de nuestro pom.xml :
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>org.baeldung.DemoApplication</mainClass> </configuration> </plugin> </plugins> </build>
Si utilizamos el complemento Spring Boot Gradle , hay algunas configuraciones heredadas de  org.springframework.boot  donde podrÃamos especificar nuestra clase principal.
En el archivo Gradle del proyecto,  mainClassName se puede definir dentro springBoot bloque de configuración . Este cambio realizado aquà es recogido por las tareas bootRun y bootJar :
springBoot { mainClassName = 'org.baeldung.DemoApplication' }
Por otra parte, la clase principal se puede definir como la mainClassName propiedad de bootJartarea Gradle:
bootJar { mainClassName = 'org.baeldung.DemoApplication' }
O como un atributo manifiesto de la  tarea bootJar :
bootJar { manifest { attributes 'Start-Class': 'org.baeldung.DemoApplication' } }
Tenga en cuenta que la clase principal especificada en el  bloque de configuración bootJar solo afecta al JAR que produce la tarea en sÃ. El cambio no afecta el comportamiento de otras tareas de Spring Boot Gradle, como  bootRun .
Como beneficio adicional, si el complemento de la aplicación Gradle se aplica al proyecto, mainClassName se puede definir como una propiedad global:
mainClassName = 'org.baeldung.DemoApplication'
También podemos especificar una clase principal a través de la interfaz de lÃnea de comando.
El org.springframework.boot.loader.PropertiesLauncher de Spring Boot   viene con un argumento JVM que le permite anular la clase principal lógica llamada loader.main :
java -cp bootApp.jar -Dloader.main=org.baeldung.DemoApplication org.springframework.boot.loader.PropertiesLauncher
Hay más de unas pocas formas de especificar el punto de entrada a una aplicación Spring Boot. Es importante saber que todas estas configuraciones son solo formas diferentes de modificar el manifiesto de un archivo JAR o WAR.
Fuente y mas Información aquÃ.
By antonio
Buenas, buen aporte.