2016-09-07 9 views
8

私はIntelliJから正常に実行できるSpringブートプロジェクトを持っていましたが、実行可能なjarをパッケージ化するともう実行できません。ここでは、例外のスタックトレースです:設定クラスのインポート候補を処理できませんでした

18:13:55.254 [main] INFO o.s.c.a.AnnotationConfigApplicationContext - Refreshing org.spring[email protected]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 

私の設定のようなものです:

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

43.2 Locating auto-configuration candidatesで説明したように、次のように私は、プロジェクトのリソースフォルダの下META-INF/spring.factoriesを追加しました。しかしこれはしませんでした問題を修正:

01:ここで

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

は、プロジェクト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> 
+0

Bootがこの 'AppConfig'を最初にスキャンするためには、あなたの*エントリーポイント*設定クラスに' @ EnableAutoConfiguration'が必要です。 – chrylis

+0

SpringBootApplicationクラスとpom.xmlを共有できますか? –

+0

これは奇妙な設定です。自動構成クラスに '@ EnableAutoConfiguration'を入れてはいけません。参照したドキュメントを確認してください。第二に、クラスパス上で 'spring-boot-autoconfigure'なしであなたのアプリを動かそうとしているようです。 'spring.factories'が見つかりませんので、ビルドでは正しくパッケージ化されません。問題を再現するプロジェクトを共有してください。 –

答えて

9

私はそれを理解するだけで、代わりにSpring Boot maven pluginを使用していたはずです。

<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> 

私はmvn clean packageでプロジェクトを構築し、java -jar target/myproject.jar、それは魔法のように動作:今、私のpom.xmlのビルドセクションは次のようになります。

0

次のように私はそれを解決:

  1. は 春・ブートのmaven-pluginのに日陰のプラグイン で
  2. コンフィグスプリングトランスを削除spring parent pom
0

を参照してください。私もしました得た

処理できませんでした構成クラス[...]のインポート候補。原因私のspring.factoriesファイルのタイプミスにクラスのメタデータを読み取ることができません...

エラー:ネストされた例外はjava.lang.IllegalStateExceptionです。この場合、ルート例外は

クラスパスリソース[...]が存在しないためオープンできませんでした。

これはコンパイル時に検証することができないため、チェックすることが重要です。

+0

と私は既に私自身の答えでgoogle経由で保存されています –

関連する問題