2017-12-08 11 views
1

私はmvn spring-boot:runでそれを開始しますが、ここでエラーにjava -jar jarName.jar結果Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'HomeService' available春ブーツジャーNoSuchBeanDefinitionException

を実行しようとした場合に適しています春のブートアプリケーションを建て、それがhttps://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.htmlここで説明されるようにspring-boot-maven-pluginと私のpom.xmlで、ここでは、ここで

<build> 
    <sourceDirectory>src/main/java</sourceDirectory> 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
     </resource> 
     <resource> 
      <directory>src/main/resources/${profileName}</directory> 
     </resource> 
    </resources> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
       <compilerArgument>-proc:none</compilerArgument> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.bsc.maven</groupId> 
      <artifactId>maven-processor-plugin</artifactId> 
      <version>2.2.4</version> 
      <executions> 
       <execution> 
        <id>process</id> 
        <goals> 
         <goal>process</goal> 
        </goals> 
        <phase>generate-sources</phase> 
        <configuration> 
         <!-- source output directory --> 
         <outputDirectory>target/metamodel</outputDirectory> 
         <!-- <processors> --> 
         <!-- <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor> --> 
         <!-- </processors> --> 
         <overwrite>true</overwrite> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <version>1.5.8.RELEASE</version> 
      <configuration> 
       <executable>true</executable> 
       <profiles> 
        <profile>dev</profile> 
        <profile>live</profile> 
       </profiles> 
      </configuration> 
      <executions> 
       <execution> 
        <goals> 
         <goal>repackage</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

<profiles> 
    <profile> 
     <id>live</id> 
     <build> 
      <plugins> 
       <plugin> 
        <artifactId>maven-jar-plugin</artifactId> 
        <executions> 
         <execution> 
          <phase>package</phase> 
          <goals> 
           <goal>jar</goal> 
          </goals> 
          <configuration> 
           <tasks> 
            <delete file="src/main/resources/application.properties" /> 
            <copy file="src/main/resources/application-live.properties" 
             tofile="src/main/resources/application.properties" /> 
           </tasks> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
    <profile> 
     <id>dev</id> 
     <build> 
      <plugins> 
       <plugin> 
        <artifactId>maven-jar-plugin</artifactId> 
        <executions> 
         <execution> 
          <phase>package</phase> 
          <goals> 
           <goal>jar</goal> 
          </goals> 
          <configuration> 
           <tasks> 
            <delete file="src/main/resources/application.properties" /> 
            <copy file="src/main/resources/application-dev.properties" 
             tofile="src/main/resources/application.properties" /> 
           </tasks> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

Spring-Boot Executable-Jar NoSuchBeanDefinitionExceptionは、Appクラス

@Configuration 
@EnableAutoConfiguration 
@ComponentScan (basePackages = { "myProject.status" }) 
public class App { 

private static final Logger logger = LogManager.getLogger(App.class); 

public static void main(String[] args) throws BeansException, IOException, InterruptedException { 
    logger.info("APPLICATION STARTED"); 

    ConfigurableApplicationContext context = SpringApplication.run(App.class, args); 
    logger.info(context.getBean(HomeService.class).home()); 

} 
01です

がここHomeService

package myProject.status.service; 
@Service 
public class HomeService { 

    public String home() { 
     return "application works"; 
    } 
} 

私は@PostConstruct方法、すべてのものとすべてのAutowiresは準備が整っているはずでBeanを取得することも試みている、それはまた、動作しません。

mvn spring-boot:runmvn packageの違いは何ですか?どうすれば正しい瓶を作ることができますか?

ありがとうございます!

+0

Maven jarプラグインを使用するのではなく、スプリングブートプラグインを使用してください。 – PaulNUK

+0

@PaulNUKすべてのプロファイルを無効にして、そのセクションをpomからspring-boot-maven-pluginの設定にしても、同じエラーが発生する – Slava

+0

起動時にサービスクラスがスキャンされていますか? – pvpkiran

答えて

1

$ mvn package spring-boot:repackageを使用すると、スタンドアロンの実行可能なjarを構築できます。

spring-boot:repackageを展開するためにパッケージ化することである一方、mvn spring-boot:runmvn spring-boot:repackageとの違いは、地元の実行とデバッグのためにそのspring-boot:runです。

さらに、<packaging>jar</packaging>を指定する必要があります。

App.javaの別のコメントは、ただ1つの注釈を@SpringBootApplicationとして使用できます。 App.javaがパッケージmyProject.statusであると仮定すると、3つの注釈をすべてカバーします。

+0

を解決しませんあなたの助言をありがとうが、それでも同じエラーです。私はspring-boot-maven-plugin設定にjarモードを追加することさえできます。私は同じ瓶を得る。 jarから実行するとautowireをスキャンしないように見えます。最初の私の春のブートプロジェクトではなく、それは前に働いていました。しかし今ではありません。 – Slava

+0

別のプロジェクトにはSpringbootapplicationという注釈が付けられていて、それが重要なポイントかもしれません。ここで私はいくつかのデータソースを設定していますが、私にとっては自動設定では動作しません。だから私は手動で注釈をつけた。私は、この注釈とjarからの実行方法との間に可能な違いを見つけようとしています。 – Slava

+0

@ Slava、コードをどこかにプッシュできれば、そこからデバッグできます。 – chenrui

0

私は私の問題を解決しました。それは混乱しているので、私はそれがなぜそうであるか把握しようとします。私は瓶からmvn spring-boot:runだけ純粋@ComponentScan作品で(basePackages = { "myProject.status" })

@ComponentScan (basePackages = { "myProject.status" })作品を削除する必要がありjarファイルの実行を行います。実際にそれは本当に私のルートディレクトリですので、私はそれを必要としませんが、質問は、なぜそれが開かれている瓶から動作しません。すべてのクラスはこのルートディレクトリの下にありますので、そこにあるはずですが、jarから実行している依存関係をスキャンしないこともあります。

ありがとう、私に返事をくれた皆さん!