Как получить доступ к контексту Spring из зависимого проекта?

Предположим, у меня есть два проекта:

ProjectA and ProjectB
ProjectA depends on ProjectB

И у меня есть файл context.xml, расположенный по адресу ProjectB/target/test-classes/context.xml. Теперь мне нужно загрузить контекст из ProjectA. В проекте B у меня есть класс доступа:

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 

Пожалуйста, дайте предложения. Признательность.


person Edmond    schedule 03.09.2013    source источник
comment
Вы добавили классы и ресурсы из проекта B в путь к классам проекта A?   -  person Sotirios Delimanolis    schedule 03.09.2013
comment
@SotiriosDelimanolis: Нет. Что мне делать, если я не хочу менять конфигурацию проекта?   -  person Edmond    schedule 04.09.2013


Ответы (3)


Вам нужно убедиться, что ProjectB (я полагаю, он упакован в банку) в пути к классам ProjectA. обратитесь здесь, если вы используете Maven, чтобы понять, как это может быть сделано.

Как только он окажется в пути к классу, вы сможете создать контекст с приведенным выше кодом. Также убедитесь, что расположение context.xml правильно передано в конструктор, обратитесь к JavaDoc для ClassPathXmlApplicationContext.

person vasanth    schedule 03.09.2013
comment
ProjectB находится в зависимостях ProjectA, но не classPath. Есть ли обходной путь без изменения конфигурации проекта? - person Edmond; 04.09.2013
comment
Я не могу придумать никакого другого способа, с помощью которого вы можете получить доступ к файлу pom, не добавляя банку ProjectB в путь к классам ProjectA. но почему вы не можете внести изменения в конфигурацию pom ?? - person vasanth; 04.09.2013

Я думаю, вы не добавили ProjectB в проектные зависимости ProjectA. Пожалуйста, добавьте его и повторите попытку.

person Abhijeet Rai    schedule 03.09.2013
comment
Я проверил пом. ProjectB существует в зависимостях ProjectA. В противном случае я не смогу использовать ContextAccessor, верно? - person Edmond; 04.09.2013

Я наконец решил эту проблему, используя:

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

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

Предположим, что контекст находится в ProjectB/target/classes/context.xml.

person Edmond    schedule 03.09.2013