J'essaie de créer un fichier jar exécutable dans le projet Spring Boot + Gradle, mais pour l'instant rien ne fonctionne. Voici la structure la plus simple possible. Il se peut que quelque chose manque dans la configuration de Gradle.
Gradle:
buildscript {
ext {
springBootVersion = '1.5.8.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'Java'
apply plugin: 'org.springframework.boot'
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
jar {
manifest {
attributes 'Main-Class': 'com.example.demo.DemoApplication'
}
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-web')
}
Fichier de configuration principal:
@RestController
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@GetMapping(value = "/")
public String index() {
return "index";
}
}
Lorsque j'ai exécuté le fichier jar tel que Java -jar 1.jar, j'ai eu cette exception:
[main] ERROR org.springframework.boot.SpringApplication - Applicati
on startup failed
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to proces
s import candidates for configuration class [com.example.demo.DemoApplication];
nested exception is Java.lang.IllegalArgumentException: No auto configuration cl
asses found in META-INF/spring.factories. If you are using a custom packaging, m
ake sure that file is correct.
at org.springframework.context.annotation.ConfigurationClassParser.proce
ssDeferredImportSelectors(ConfigurationClassParser.Java:556)
at org.springframework.context.annotation.ConfigurationClassParser.parse
(ConfigurationClassParser.Java:185)
at org.springframework.context.annotation.ConfigurationClassPostProcesso
r.processConfigBeanDefinitions(ConfigurationClassPostProcessor.Java:308)
at org.springframework.context.annotation.ConfigurationClassPostProcesso
r.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.Java:228)
at org.springframework.context.support.PostProcessorRegistrationDelegate
.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.ja
va:272)
at org.springframework.context.support.PostProcessorRegistrationDelegate
.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.Java:92)
at org.springframework.context.support.AbstractApplicationContext.invoke
BeanFactoryPostProcessors(AbstractApplicationContext.Java:687)
at org.springframework.context.support.AbstractApplicationContext.refres
h(AbstractApplicationContext.Java:525)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationConte
xt.refresh(EmbeddedWebApplicationContext.Java:122)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.
Java:693)
at org.springframework.boot.SpringApplication.refreshContext(SpringAppli
cation.Java:360)
at org.springframework.boot.SpringApplication.run(SpringApplication.Java
:303)
at org.springframework.boot.SpringApplication.run(SpringApplication.Java
:1118)
at org.springframework.boot.SpringApplication.run(SpringApplication.Java
:1107)
at com.example.demo.DemoApplication.main(DemoApplication.Java:13)
Caused by: Java.lang.IllegalArgumentException: No auto configuration classes fou
nd in META-INF/spring.factories. If you are using a custom packaging, make sure
that file is correct.
at org.springframework.util.Assert.notEmpty(Assert.Java:277)
at org.springframework.boot.autoconfigure.AutoConfigurationImportSelecto
r.getCandidateConfigurations(AutoConfigurationImportSelector.Java:153)
at org.springframework.boot.autoconfigure.AutoConfigurationImportSelecto
r.selectImports(AutoConfigurationImportSelector.Java:95)
at org.springframework.context.annotation.ConfigurationClassParser.proce
ssDeferredImportSelectors(ConfigurationClassParser.Java:547)
... 14 common frames omitted
Quel est le problème?
J'ai créé un projet avec toutes les sources que vous avez fournies. Exécuter "gradle build" depuis le terminal, basculer vers/build/libs puis exécuter "Java -jar artefact" fonctionne parfaitement.
Avez-vous essayé de nettoyer et de recompiler? Quelle version de Gradle utilisez-vous?
Au démarrage de printemps, vous pouvez créer directement un fichier jar exécutable en
springBoot {
executable = true
}
S'il vous plaît essayez
jar{
baseName = 'myapp'
version = 'version'
}
Il va créer un fichier jar avec le nom myapp-version.jarDo ./myapp-version.jar à partir de la commande line.it sera exécuté
Reportez-vous au lien suivant pour plus d'informations. https://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html
Dans Boot 2.x, les tâches bootJar et bootWar sont responsables du conditionnement de l'application.
La tâche bootJar est responsable de la création du fichier jar exécutable. Ceci est créé automatiquement une fois que le plugin Java est appliqué.
Si le fichier jar/war exécutable n’est pas généré, exécutez manuellement la tâche de classement ci-dessous.
$./gradlew bootJar
De même, bootWar génère un fichier war exécutable et est créé une fois le plugin war appliqué.
Nous pouvons exécuter la tâche bootWar en utilisant:
$./gradlew bootWar
Notez que pour Spring Boot 2.x, nous devons utiliser Gradle 4.0 ou version ultérieure.