【问题标题】:Spring component scan for nested jar嵌套 jar 的 Spring 组件扫描
【发布时间】:2013-12-03 21:16:14
【问题描述】:

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

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

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

我收到一个错误,即 class not found .../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 作为依赖项

【问题讨论】:

    标签: java spring jar autowired applicationcontext


    【解决方案1】:

    确保你的类路径中存在 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 在父项目的类路径中

    【讨论】:

    • 我在 maven 中添加了 jar 文件,但它仍然返回找不到文件。我通过以下方式初始化应用程序上下文: org.springframework.context.ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");它说inner.jar/x/y/z/class not found
    • 用关于 jar、包和类的附加信息更新了我的答案
    • @melt321 你能详细说明如何确保类路径中存在 jar 并且为组件扫描设置了正确的类包名称吗?
    • 忘记为 spring 上下文加载器侦听器设置 web.xml。现在正在工作。谢谢!
    【解决方案2】:

    如果您确定 jar 在您的类路径下,并且您的类仍然没有自动装配。

    您确定这些类的注释正确吗? 因为当你说component-scan 时会发生什么,spring 会尝试查找带有@Component 注释的类或诸如@Service 等组件的子类型。

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

    【讨论】:

      猜你喜欢
      • 2018-04-01
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      • 1970-01-01
      • 2017-02-27
      相关资源
      最近更新 更多