Spring组件扫描嵌套jar

时间:2013-11-20 02:57:32

标签: java spring jar autowired applicationcontext

基本上我有这个Outer.jar,在其中声明是一个带有组件扫描的应用程序上下文:

<context:component-scan
        base-package="x.y.z.class" />

但是这个x.y.z.class位于inner.jar中,它是outer.jar的依赖项,

我收到错误,找不到类.../Outer.jar/x/y/z/class,如何指定签入inner.jar?

更新: 将应用程序上下文初始化为:

 org.springframework.context.ApplicationContext ctx = 
                 new ClassPathXmlApplicationContext("applicationContext.xml");

exception: I/O failure during classpath scanning; nested exception is java.io.FileNotFoundException: ..\default\deploy\test.war\WEB-INF\lib\inner.jar\x\y\z
 and it says inner.jar/x/y/z/class not found

Outer.jar将inner.jar作为依赖

2 个答案:

答案 0 :(得分:6)

确保在类路径中存在inner.jar(或任何你命名的内容)(通过添加到maven依赖项,eclipse项目设置,使用-cp jvm命令行参数等),并且只需引用包名称您希望包含在inner.jar中的类。

另外,请确保您不要混淆jar,基本包和完全限定的类名。如果我在Blah.jar中有一个类com.mycoolcompany.service.Booya,通常我只需要做

<context:component-scan base-package="com.mycoolcompany.service.*" />

确保Blah.jar位于父项目的类路径

答案 1 :(得分:2)

如果您确定该jar位于类路径下,但您的课程仍未自动装配。

您确定这些类是否正确注释? 因为当你说component-scan时会发生什么,spring试图找到用@Component注释的类或者像@Service等等的类型的子类型。

我猜这是你的第三方依赖,可能没有注释类。 在这种情况下,您应该在应用程序上下文中手动定义beans。 HTH