Как я могу исключить один файл persistence.xml из пути к тестовым классам в Eclipse без использования Maven / Ant?

При запуске интеграционных тестов JUnit внутри Eclipse у меня есть два файла persistence.xml в пути к классам: один содержит конфигурацию для тестовых случаев, а другой - для производственной среды. Мне нужно найти способ исключить файл persistence.xml для производства из пути к тестовым классам.

Ограничения: мне не разрешено использовать Maven или Ant, только Eclipse Helios SR1 (с JUnit). Поставщик постоянства JPA 2 - EclipseLink 2.2.0. Поскольку я должен использовать ClearCase 7.0 в качестве VCS, связанные ресурсы невозможны, как описано здесь, например.

Вот примерная структура проекта:

project-datamodel (containing the Entity beans)
\- src/resources/META-INF/persistence.xml (for production; want to exclude it)
\- test/resources/META-INF/persistence.xml (for test)

project-service (containing the Session beans)
\- ejbModule

project-service-it (containing the JUnit integration tests for the Session beans)
\- test

person Bastian    schedule 28.07.2011    source источник


Ответы (2)


У меня возникла эта проблема, потому что два моих файла persistence.xml (рабочий и тестовый) использовали одно и то же имя <persistence-unit>. Как упоминалось выше, порядок путей к классам не имеет значения, поскольку EclipseLink, по-видимому, находит все файлы persistence.xml, прежде чем решить, какой из них использовать. Я решил это, переименовав тестовый PU как в XML-файле, так и в вызове из моего модульного теста:

@BeforeClass
public static void setup() {
    em = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME).createEntityManager();
}
person Matthew Cornell    schedule 28.08.2012

Вы можете редактировать путь к классам при создании конфигурации запуска для своих модульных тестов (Eclipse создаст ее автоматически, если вы выберете «Запуск от имени -> Тест Junit» в контекстном меню.

При редактировании этой новой конфигурации запуска вы можете добавить пользовательские папки на вкладке «Путь к классам» и переместить их перед путем по умолчанию. Я не пробовал, но это должно сработать, потому что в тесте он первым обнаружит тест persistence.xml.

person Daniel Schneller    schedule 28.07.2011
comment
Спасибо, Даниэль, за ответ! Проблема заключается не в порядке пути к классам, как я понял, а в следующем: поскольку можно иметь больше единиц сохраняемости, EclipseLink обрабатывает все файлы persistence.xml в пути к классам. В моем случае единица сохранения состояния одинакова в обоих файлах persistence.xml. Я не знаю EclipseLink, но похоже, что он объединяет / перезаписывает конфигурацию из обоих файлов, что приводит к досадным ошибкам. Вот почему я просто хочу исключить файл persistence.xml для производства. - person Bastian; 28.07.2011
comment
Мое предыдущее предположение, конечно, было неверным. При текущей структуре проекта в пути к классам не может быть двух файлов persistence.xml, поскольку Eclipse просто перезаписывает первый (рабочий) вторым (тестовым), копируя его в целевой каталог. Это потому, что каталог src / resources указан перед каталогом test / resources. Таким образом, с этой структурой у меня должна быть обратная проблема: конфигурация для производства больше невозможна. - person Bastian; 28.07.2011
comment
Я переместил файлы persistence.xml следующим образом: project-service: ejbModule/META-INF/persistence.xml (для производства) project-service-it: test/resources/META-INF/persistence.xml (для тестирования). Теперь я вернулся в начало ... Порядок пути к классам ничего не меняет :(. - person Bastian; 28.07.2011