web-dev-qa-db-fra.com

Échec du traitement des candidats d'importation pour la classe de configuration

J'ai un projet de démarrage printanier que je peux exécuter avec succès depuis IntelliJ, mais lorsque je compresse un fichier jar exécutable, je ne peux plus l'exécuter. Voici la trace de la pile de l'exception:

18:13:55.254 [main] INFO  o.s.c.a.AnnotationConfigApplicationContext - Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@b3d7190: startup date [Wed Sep 07 18:13:55 CEST 2016]; root of context hierarchy
18:13:55.403 [main] WARN  o.s.c.a.AnnotationConfigApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [el.dorado.App]; nested exception is Java.lang.IllegalArgumentException: No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.
18:13:55.414 [main] ERROR o.s.boot.SpringApplication - Application startup failed
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [el.dorado.App]; nested exception is Java.lang.IllegalArgumentException: No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.
    at org.springframework.context.annotation.ConfigurationClassParser.processDeferredImportSelectors(ConfigurationClassParser.Java:489)
    at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.Java:191)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.Java:321)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.Java:243)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.Java:273)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.Java:98)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.Java:681)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:523)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.Java:759)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.Java:369)
    at org.springframework.boot.SpringApplication.run(SpringApplication.Java:313)
    at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1185)
    at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1174)
    at dz.lab.jpmtask.App.main(App.Java:33)
Caused by: Java.lang.IllegalArgumentException: No auto configuration classes found 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:276)
    at org.springframework.boot.autoconfigure.EnableAutoConfigurationImportSelector.getCandidateConfigurations(EnableAutoConfigurationImportSelector.Java:145)
    at org.springframework.boot.autoconfigure.EnableAutoConfigurationImportSelector.selectImports(EnableAutoConfigurationImportSelector.Java:84)
    at org.springframework.context.annotation.ConfigurationClassParser.processDeferredImportSelectors(ConfigurationClassParser.Java:481)
    ... 13 common frames omitted

Ma configuration est quelque chose comme:

@Configuration
@EnableAutoConfiguration
public class AppConfig {
  ... some beans
}

J'ai ajouté META-INF/spring.factories dans le dossier des ressources du projet comme décrit dans 43.2 Localisation des candidats à la configuration automatique comme suit Mais ceci n'a pas résolu le problème:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
el.dorado.AppConfig

Voici le projet pom.xml:

<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>el.dorado</groupId>
  <artifactId>ElDorado</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>ElDorado</name>
  <url>http://maven.Apache.org</url>

  <properties>
     <junit.version>4.12</junit.version>
  </properties>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.0.RELEASE</version>
  </parent>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <dependency>
      <groupId>com.h2database</groupId>
      <artifactId>h2</artifactId>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit.version}</version>
      <scope>test</scope>
    </dependency>

  </dependencies>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-Assembly-plugin</artifactId>
        <configuration>
          <archive>
            <manifest>
              <mainClass>el.dorado.App</mainClass>
              <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
            </manifest>
          </archive>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
        <executions>
          <execution>
            <id>make-Assembly</id> <!-- this is used for inheritance merges -->
            <phase>package</phase> <!-- bind to the packaging phase -->
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <!--<version>0.7.8-SNAPSHOT</version>-->
        <executions>
          <execution>
            <id>jacoco-initialize</id>
            <goals>
              <goal>prepare-agent</goal>
            </goals>
          </execution>
          <execution>
            <id>jacoco-site</id>
            <phase>verify</phase>
            <goals>
              <goal>report</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

</project>
15
bachr

Je viens de le comprendre, j'aurais dû utiliser plugin Spring Boot maven à la place. Maintenant, la section de construction de mon pom.xml ressemble à ceci:

<build>
<plugins>
  <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
      <fork>true</fork>
      <mainClass>dz.lab.jpmtask.App</mainClass>
    </configuration>
    <executions>
      <execution>
        <goals>
          <goal>repackage</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
  <plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <!--<version>0.7.8-SNAPSHOT</version>-->
    <executions>
      <execution>
        <id>jacoco-initialize</id>
        <goals>
          <goal>prepare-agent</goal>
        </goals>
      </execution>
      <execution>
        <id>jacoco-site</id>
        <phase>verify</phase>
        <goals>
          <goal>report</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
</plugins>
</build>

Je construis le projet avec mvn clean package et ensuite Java -jar target/myproject.jar et cela fonctionne comme un charme.

9
bachr

Je pense que vous avez oublié d’utiliser Annotation dans votre AppConfig.

Ajouter trois annotations comme

@Configuration
@EnableWebMvc
@ComponentScan("Scan_Package_Name") 
public class AppConfig {
  ... some beans
}
1
susan097

Je l'ai résolu comme suit:

  1. supprimer le spring-boot-maven-plugin
  2. transformateurs à ressort dans plug-in shade veuillez vous reporter à spring parent pom
0
Cyanny

Je suis passé de mvn clean compile Assembly:single À mvn clean package Et l'erreur a disparu.

0
Michael

J'ai aussi eu le 

Échec du traitement des candidats d'importation pour la classe de configuration [...]; L'exception imbriquée est Java.lang.IllegalStateException: impossible de lire les métadonnées pour la classe ...

erreur due à une faute de frappe dans mon fichier spring.factories. Dans ce cas, l’exception racine était 

la ressource de chemin de classe [...] ne peut pas être ouverte car elle n'existe pas.

C'est un point important à vérifier car il ne peut pas être validé au moment de la compilation.

0
Brad Mace