[ROZWIĄZANY] Spring Boot: Your ApplicationContext is unlikely to start due to a @ComponentScan of the default package.

Tytułowy problem, to jeden z najczęściej błędów popełnianych przez programistów rozpoczynających swą przygodę ze SpringBoot. Na szczęście jest on bardzo łatwy do naprawienia.

1. Problem

Podczas próby wystartowania aplikacji SpringBoot w logu dostajemy poniższy wyjątek a sama aplikacji nie uruchamia się.

      .   ____          _            __ _ _
     /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
    ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
     \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::       (v1.5.10.RELEASE)
    2018-03-26 09:47:54.566  INFO 236 --- [           main] MyApp                                    : Starting MyApp on *** with PID 236 (***\spring-value\build\classes\main started by *** in ***\spring-value)
    2018-03-26 09:47:54.569  INFO 236 --- [           main] MyApp                                    : No active profile set, falling back to default profiles: default
    2018-03-26 09:47:54.644  INFO 236 --- [           main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@5123a213: startup date [Mon Mar 26 09:47:54 CEST 2018]; root of context hierarchy
    2018-03-26 09:47:54.659  WARN 236 --- [           main] ionWarningsApplicationContextInitializer : 
    ** WARNING ** : Your ApplicationContext is unlikely to start due to a @ComponentScan of the default package.
    2018-03-26 09:48:03.537  WARN 236 --- [           main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [jar:file:/***/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-autoconfigure/1.5.10.RELEASE/be96efab0d35181f18c486b0ec8d6a41a7042fce/spring-boot-autoconfigure-1.5.10.RELEASE.jar!/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration$EmbeddedDatabaseConfiguration.class]; nested exception is java.lang.IllegalStateException: Could not evaluate condition on org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$EmbeddedDatabaseConfiguration due to org/springframework/dao/DataAccessException not found. Make sure your own configuration does not rely on that class. This can also happen if you are @ComponentScanning a springframework package (e.g. if you put a @ComponentScan in the default package by mistake)
    2018-03-26 09:48:03.541  INFO 236 --- [           main] utoConfigurationReportLoggingInitializer : 
    Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
    2018-03-26 09:48:03.550 ERROR 236 --- [           main] o.s.boot.SpringApplication               : Application startup failed

...

org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:47) ~[spring-boot-autoconfigure-1.5.10.RELEASE.jar:1.5.10.RELEASE]
      ... 24 common frames omitted
    Caused by: java.lang.ClassNotFoundException: org.springframework.dao.DataAccessException
      at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_131]
      at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_131]
      at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) ~[na:1.8.0_131]
      at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_131]
      ... 26 common frames omitted
    Process finished with exit code 1

2. Przyczyna

2.1. Adnotacja @SpringBootApplication użyta na klasie znajdującej się w domyślny pakiecie

To właśnie najczęstsza przyczyna tytułowego problemy. Prawdopodobnie oznaczyłeś klasę znajdującą się w pakiecie domyślnym (bez pakietu) adnotacją @SpringBootApplication. Ta adnotacja zawiera w sobie adnotację @ComponentScan, która jest bezpośrednią przyczyną problemu.

2.1.1. Rozwiązanie

Przenieś klasę aplikacji do dowolnego, nazwanego pakietu np. “com.example.app

2.2. Klasa znajdująca się w plakiecie domyślnym posiada adnotację @ComponentScan

To bezpośrednia przyczyna omawianego problemu. Nie możesz używać adnotacji @ComponentScan na klasach nie znajdujących się w żadnym pakiecie (default package).

2.2.1 Rozwiązanie

Upewnij się, że na pewno potrzebujesz adnotować klasę jako @ComponetScan. Jeśli tak, to umieść ją w jakimś pakiecie np. “com.example.app“.

Na zakończenie mam jeszcze jedną prośbę.

Jeśli pomogłem Ci rozwiązać Twój problem, to udostępnij proszę ten post. Dzięki temu będę miał okazję trafić do szerszej grupy odbirców. Dziękuję

Leave a Reply

avatar
  Subscribe  
Notify of
Close Menu