【问题标题】:How to access Spring context from a depending project?如何从依赖项目访问 Spring 上下文?
【发布时间】:2013-09-03 19:02:42
【问题描述】:

假设我有两个项目:

ProjectA and ProjectB
ProjectA depends on ProjectB

我有一个 context.xml 位于 ProjectB/target/test-classes/context.xml。现在我需要从 ProjectA 中查找上下文。在 projectB 中,我有一个访问器类:

Class ContextAccessor{
    ApplicationContext context = new
        ClassPathXmlApplicationContext("context.xml");

    public static ApplicationContext getContext(){
        return context;
    }
}

在 ProjectA 中,我尝试使用以下方法获取上下文:

ContextAccessor.getContext();

但它会抛出异常消息:

Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: IOException     parsing XML document from class path resource [context.xml]; nested exception is java.io.FileNotFoundException: class path resource [context.xml] cannot be opened because it does not exist
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341)
at 

请提出建议。欣赏。

【问题讨论】:

  • 你是否将projectB中的类和资源添加到projectA的类路径中?
  • @SotiriosDelimanolis:不。如果我不想更改项目配置,我该怎么办?

标签: java spring classpath applicationcontext


【解决方案1】:

您需要确保 ProjectB(我想它被打包为 jar)在 ProjectA 的类路径中。如果您使用 Maven,请参考 here,以了解如何做到这一点。

一旦它在类路径中,您应该能够使用上面给出的代码创建一个上下文。还要确保 context.xml 的位置正确传递给构造函数,请参阅 JavaDoc for ClassPathXmlApplicationContext

【讨论】:

  • ProjectB 在 ProjectA 的依赖项中,但不在 classPath 中。有没有不改变项目配置的解决方法?
  • 我想不出任何其他方法可以在不将 ProjectB jar 放入 ProjectA 的类路径中的情况下访问 pom 文件。但是为什么不能更改 pom 配置??
【解决方案2】:

我认为您没有在 ProjectA 的项目依赖项中添加 ProjectB。请添加并重试。

【讨论】:

  • 我已经检查了 pom。 ProjectB 确实存在于 ProjectA 的依赖项中。否则我应该无法使用 ContextAccessor,对吧?
【解决方案3】:

我终于解决了这个问题:

Class ContextAccessor{
    ApplicationContext context = new
        FileSystemXmlApplicationContext(this.getClass().getProtectionDomain().
        getCodeSource().getLocation().getPath());

    public static ApplicationContext getContext(){
        return context;
    }
}

假设上下文位于 ProjectB/target/classes/context.xml

【讨论】:

    猜你喜欢
    • 2017-10-20
    • 1970-01-01
    • 2020-12-17
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    相关资源
    最近更新 更多