@导入无法从从属jar聚合带注释的配置

时间:2018-10-29 14:09:15

标签: spring dependency-injection

我有一个项目设置,其中包含Spring JPA配置的通用模块(JPA.jar)。

@Configuration
@EnableJpaRepositories({"com.db.jpa.repository"})
@EnableTransactionManagement
public class Jpa {
  // ...
}

我打算从Web服务(春季启动)中调用配置,并具有从JPA.jar导入JPA配置的配置。

@Configuration
@Import(com.db.config.Jpa.class)
public class JpaApp {
}

此操作失败,并显示以下错误:

Caused by: java.io.FileNotFoundException: class path resource [com/db/config/Jpa.class] cannot be opened because it does not exist
    at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:180)
    at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:51)
    at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:103)
    at org.springframework.boot.type.classreading.ConcurrentReferenceCachingMetadataReaderFactory.createMetadataReader(ConcurrentReferenceCachingMetadataReaderFactory.java:88)
    at org.springframework.boot.type.classreading.ConcurrentReferenceCachingMetadataReaderFactory.getMetadataReader(ConcurrentReferenceCachingMetadataReaderFactory.java:75)
    at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:81)
    at org.springframework.context.annotation.ConfigurationClassParser.asSourceClass(ConfigurationClassParser.java:731)
    at org.springframework.context.annotation.ConfigurationClassParser$SourceClass.getRelated(ConfigurationClassParser.java:1007)
    at org.springframework.context.annotation.ConfigurationClassParser$SourceClass.getAnnotationAttributes(ConfigurationClassParser.java:988)
    at org.springframework.context.annotation.ConfigurationClassParser.collectImports(ConfigurationClassParser.java:536)
    at org.springframework.context.annotation.ConfigurationClassParser.getImports(ConfigurationClassParser.java:509)
    at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:300)
    at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:245)
    at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:635)
    ... 40 more

找不到任何说明这对于Spring @Import是非法的文档。但是,我看到这是使用类路径前缀对@ImportResource的资源完成的。

我可以使用通用的JPA模型和存储库为每个Web服务组件包含一组配置,但是只是想知道是否可以从依赖项jar集中使用@Configuration(s)来聚合@Import

  1. 有可能吗?
  2. 如果违法,有什么根据吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以将@Import用于其他jar的配置类。我认为您收到此错误是因为jar并未在pom.xml中定义为依赖项(如果您当然使用maven的话),这就是Spring找不到它的原因。