Правильный путь к applicationContext.xml с использованием ClassPaспасибоmlApplicationContext

У меня есть веб-приложение с applicationContext.xml в WEB-INF/config/applicationContext.xml. Теперь мне нужно реализовать некоторый инструмент тестирования как автономное приложение, которое может использовать тот же applicationContext.xml, но имеет проблему с путём к config для класса ClassPaспасибоmlApplicationContext.

Я знаю, что когда я копирую applicationContext.xml в пакет по умолчанию (где находится .java), я могу использовать ClassPaспасибоmlApplicationContext ( "applicationContext.xml" ), но это необходимо?

import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AdminTool {

    private Logger log = Logger.getLogger(getClass());

    /** all below doesn't work - FileNotFoundException) **/
    private static final ApplicationContext ac = new ClassPathXmlApplicationContext("/WEB-INF/config/applicationContext.xml");
    private static final ApplicationContext ac = new ClassPathXmlApplicationContext("config/applicationContext.xml");
    private static final ApplicationContext ac = new ClassPathXmlApplicationContext("../config/applicationContext.xml");

    public static void main(String[] args) {
        new AdminTool();
    }

    public AdminTool() {
        log.debug(ac);
    }

}

Ответ 1

В локальном тестовом сценарии вы не находитесь внутри Jar, поэтому вам не нужен доступ на основе Classpath. Вместо этого используйте FileSystemXmlApplicationContext.

Возможно, что-то вроде этого:

private static final ApplicationContext ac =
    new FileSystemXmlApplicationContext(
        "src/WEB-INF/config/applicationContext.xml"
    );

(пути относятся к каталогу выполнения)

Ответ 2

Вот почему я предпочитаю размещать все файлы конфигурации в папке классов. Фактически, используя Maven, вы можете поместить все эти файлы в src/main/resources. Затем в тестовых файлах вы можете получить доступ как "classpath: applicationContext.xml".

Ответ 3

private static final ApplicationContext ac =
    new FileSystemXmlApplicationContext(
        "/WEB-INF/config/applicationContext.xml"
    );

Ответ 4

private static final ApplicationContext ac =
new FileSystemXmlApplicationContext(
    "/WEB-INF/config/applicationContext.xml"
);

Ответ 5

перейдите в свойство > Java Build Path > Источник вашего проекта проверяет путь к классам и добавляет каталог до WEB-INF в пути к классам. определенно это работает