Java “外部罐不工作”;无法自动连线“;

Java “外部罐不工作”;无法自动连线“;,java,spring,intellij-idea,autowired,artifact,Java,Spring,Intellij Idea,Autowired,Artifact,在IntelliJ IDEA中,我得到以下错误: 无法自动连线。未找到“ExternalClass”类型的bean。 检查信息:检查bean类中的自动布线问题 背景:我提取了代码的一部分,并将其作为工件上传,当我试图在我的“主”代码中使用它时,我遇到了错误,无法使用maven进行编译 @Autowired public ClassName (ExternalClass externalClass){ this.externalClass = externalClass; } 工件是POM

在IntelliJ IDEA中,我得到以下错误:

无法自动连线。未找到“ExternalClass”类型的bean。 检查信息:检查bean类中的自动布线问题

背景:我提取了代码的一部分,并将其作为工件上传,当我试图在我的“主”代码中使用它时,我遇到了错误,无法使用maven进行编译

@Autowired
public ClassName (ExternalClass externalClass){
   this.externalClass = externalClass;
}
工件是POM文件中的一个依赖项,它在自动完成时显示良好


我尝试了几个类,每次都会出现错误。

您需要在提取的模块中定义一个
@Configuration
,并提供模块的扫描路径

@Configuration
// add any packages where you have bean definitions here (ex: ExtractedClass package)
@ComponentScan(basePackages = {"..."})
public class ExtractedConfig {

    // ...

}
然后,在使用依赖项的模块中,导入配置

@Configuration
@Import(ExtractedConfig.class)
public class MainConfig {

    // ...

}

重构之前您没有这个问题,因为提取的bean位于扫描路径中(因此符合自动连线的条件)。当您将它们移动到不再适用的不同模块中时,您需要相应地调整扫描路径

您需要在提取的模块中定义
@配置
,并提供模块的扫描路径

@Configuration
// add any packages where you have bean definitions here (ex: ExtractedClass package)
@ComponentScan(basePackages = {"..."})
public class ExtractedConfig {

    // ...

}
然后,在使用依赖项的模块中,导入配置

@Configuration
@Import(ExtractedConfig.class)
public class MainConfig {

    // ...

}

重构之前您没有这个问题,因为提取的bean位于扫描路径中(因此符合自动连线的条件)。当您将它们移动到不再适用的不同模块中时,您需要相应地调整扫描路径

我最终发现了这个问题,并正在分享,以防其他人也会遇到同样的错误。 为了使autowire和spring正常工作,工件需要与主项目相同的包结构。 例子: 如果主要项目包结构为:

com.domainname.something.myproject
工件应该是:

com.domainname.something.myproject.artifactname

我最终发现了这个问题,并正在分享,以防其他人遇到同样的错误。 为了使autowire和spring正常工作,工件需要与主项目相同的包结构。 例子: 如果主要项目包结构为:

com.domainname.something.myproject
工件应该是:

com.domainname.something.myproject.artifactname

请添加信息和注释,以便其他人能够重现该问题。当然,您发布的唯一代码在Spring上下文中是完全正确的。您可以发布您的完整代码吗?请添加信息和,以便其他人能够重现该问题。当然,您发布的唯一代码在Spring上下文中完全没有问题。您可以发布您的完整代码吗?我尝试了这一点,在类内部使用工件使用
@Configuration+@Import(ExternalClass.class)
。在我在类中使用的工件内部,其他代码使用:
@Configuration@ComponentScan(basePackages=“com.pack1.pack2.pack4.pack5.pack6”)
我使用的类在pack6内部。然而,当我这样做时,我得到了一些错误:“创建名为[…]的bean时出错。我是否正确实现了您的解决方案?您应该将包定义为
basePackages={“com.pack1”、“com.pack2”等}
pack1,pack2在我这方面可能是一个糟糕的表示,我想重命名/匿名我的包,例如org.springframework.web.multipart.MultipartException,其中pack1是springframework。所有类都在pack6中,其中一些类在pack6的子包中。pack1-5只代表我的“目录”“@ArneO.Ose真的,你应该把你的问题简化成一个问题,正如我在对你的问题的评论中所建议的那样,然后发布完整的代码。在这里尝试“匿名化”事物,只是在抽象的层面上谈论它,很可能不会带来实质性的帮助。我发现了我的问题所在(我发布了一个答案)。另外,我使用了
@SpringBootApplication
,它不需要
@ComponentScan
,因为它已经在它的“内部”。这两种操作都显示Intellij中存在冗余错误。但是谢谢你的回答,它帮了我正确的方向:)我尝试了这个,在类内部使用工件
@Configuration+@Import(ExternalClass.class)
。在我在类中使用的工件内部,其他代码使用:
@Configuration@ComponentScan(basePackages=“com.pack1.pack2.pack4.pack5.pack6”)
我使用的类在pack6内部。然而,当我这样做时,我得到了一些错误:“创建名为[…]的bean时出错。我是否正确实现了您的解决方案?您应该将包定义为
basePackages={“com.pack1”、“com.pack2”等}
pack1,pack2在我这方面可能是一个糟糕的表示,我想重命名/匿名我的包,例如org.springframework.web.multipart.MultipartException,其中pack1是springframework。所有类都在pack6中,其中一些类在pack6的子包中。pack1-5只代表我的“目录”“@ArneO.Ose真的,你应该把你的问题简化成一个问题,正如我在对你的问题的评论中所建议的那样,然后发布完整的代码。在这里尝试“匿名化”事物,只是在抽象的层面上谈论它,很可能不会带来实质性的帮助。我发现了我的问题所在(我发布了一个答案)。另外,我使用了
@SpringBootApplication
,它不需要
@ComponentScan
,因为它已经在它的“内部”。这两种操作都显示Intellij中存在冗余错误。但是谢谢你的回答,它帮了我正确的方向:)