ComponentScan and Autowired not working for dependent Spring project?

user1340582 picture user1340582 · Feb 9, 2016 · Viewed 10.1k times · Source

I have two projects A and B. Both are built with Maven, and project A has a Maven dependency to project B. Both project have a class with @Configuration annotation where I define @Beans.

I have beans in project A, from both projects. If I use the @Autowired annotation in project A of a bean that is defined in same project, the autowiring works. However, if I use the @Autowired annotation in project A of a bean from project B, I will get an exception.

What does this mean? How can I autowire a bean in project A, that is defined in project B?

Answer

Peter picture Peter · Feb 9, 2016

This is normally an issue with the base classpath on ComponentScan.

If you for example have the following base packages

com.myproject.a

and

com.myproject.b

in your project A and B respectively, and you're using SpringBoot with the main class

package com.myproject.a

@Configuration 
@EnableAutoConfiguration 
@ComponentScan
class MyApp {
    // Some public static void main ... 
}

it will only find your classes in the package com.myproject.a and it's children.

To solve this issue you must enhance the @ComponentScan in a way that it scans both package structures, eg.

package com.myproject.a

@Configuration 
@EnableAutoConfiguration 
@ComponentScan(basePackages = {"com.myproject.a", "com.myproject.b"} 
// or basePackages = "com.myproject" in this example
class MyApp {
    // Some public static void main ... 
}