如何在不使用Maven/Ant的情况下从Eclipse中的测试类路径中排除一个persistence.xml?

如何在不使用Maven/Ant的情况下从Eclipse中的测试类路径中排除一个persistence.xml?,eclipse,unit-testing,maven,classpath,persistence.xml,Eclipse,Unit Testing,Maven,Classpath,Persistence.xml,在Eclipse中运行JUnit集成测试时,我在类路径上有两个persistence.xml文件——一个包含测试用例的配置,另一个包含生产环境的配置。我需要找到一种从测试类路径中排除persistence.xml的方法 限制:我不允许使用Maven或Ant,只允许使用EclipseHeliosSR1(使用JUnit)。JPA2持久性提供程序是EclipseLink 2.2.0。例如,由于我必须使用ClearCase7.0作为VCS,因此不可能使用链接资源 以下是粗略的项目结构: project-

在Eclipse中运行JUnit集成测试时,我在类路径上有两个persistence.xml文件——一个包含测试用例的配置,另一个包含生产环境的配置。我需要找到一种从测试类路径中排除persistence.xml的方法

限制:我不允许使用Maven或Ant,只允许使用EclipseHeliosSR1(使用JUnit)。JPA2持久性提供程序是EclipseLink 2.2.0。例如,由于我必须使用ClearCase7.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

您可以在为单元测试创建运行配置时编辑类路径(如果您从上下文菜单中选择“RunAs->Junit Test”,Eclipse将自动创建一个类路径)


编辑新的运行配置时,可以在“类路径”上添加自定义文件夹选项卡,并将它们向上移动到默认类路径前面。我没有尝试过,但应该这样做,因为在测试中它会首先找到test
persistence.xml

您可以在为单元测试创建运行配置时编辑类路径(如果选择“runas->Junit test”,Eclipse将自动创建一个类路径)从上下文菜单中


当编辑新的运行配置时,您可以在“Classpath”选项卡上添加自定义文件夹,并将它们移到默认类路径前面。我没有尝试过,但应该这样做,因为在测试中它会首先找到test
persistence.xml

我遇到这个问题,因为我的两个persistence.xml文件(生产和测试)使用了相同的
名称。如上所述,类路径顺序并不重要,因为EclipseLink显然会在决定使用哪个文件之前找到所有persistence.xml文件。我通过重命名xml文件和单元测试调用中的测试PU解决了这个问题:

@BeforeClass
public static void setup() {
    em = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME).createEntityManager();
}

我遇到这个问题是因为我的两个persistence.xml文件(production和test)使用相同的
名称。如上所述,类路径顺序并不重要,因为EclipseLink显然会在决定使用哪个文件之前找到所有persistence.xml文件。我通过重命名xml文件中的测试PU和来自单元测试的调用来解决此问题:

@BeforeClass
public static void setup() {
    em = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME).createEntityManager();
}

谢谢Daniel的回答!问题不在于类路径的顺序,因为我知道它是正确的,而是以下问题:因为可以有更多的持久性单元,EclipseLink处理类路径中的所有persistence.xml文件。在我的例子中,两个persistence.xml文件中的持久性单元都是相同的。我不知道EclipseLink,但它似乎是合并/覆盖的从这两个文件编写配置,导致恼人的错误。这就是为什么我只想排除persistence.xml用于生产。当然,我以前的假设是错误的。在当前项目结构中,类路径上不能有两个persistence.xml文件,因为Eclipse只会覆盖第一个(生产)第二个(测试)通过将其复制到目标目录。也就是说,因为src/resources目录列在test/resources目录之前。因此,使用此结构,我应该会遇到相反的问题:生产配置不再可能。我将persistence.xml文件移动如下:项目服务:
ejbModule/META-INF/persistence。xml
(用于生产)项目服务it:
test/resources/META-INF/persistence.xml
(用于测试)现在,我回到了开始…类路径顺序没有改变:(.谢谢Daniel的回答!问题不在于类路径顺序,因为我知道它是正确的,而是以下问题:由于可以有更多的持久性单元,EclipseLink处理类路径中的所有persistence.xml文件。在我的例子中,两个persistence.xml文件中的持久性单元都是相同的。我不知道EclipseLink,但它似乎合并了/overwrite这两个文件的配置会导致恼人的错误。这就是为什么我只想将persistence.xml排除在生产之外。当然,我之前的假设是错误的。在当前的项目结构中,类路径上不能有两个persistence.xml文件,因为Eclipse只会覆盖第一个(生产)第二个(测试)通过将其复制到目标目录。也就是说,因为src/resources目录列在test/resources目录之前。因此,使用此结构,我应该会遇到相反的问题:生产配置不再可能。我将persistence.xml文件移动如下:项目服务:
ejbModule/META-INF/persistence。xml
(用于生产)项目服务it:
test/resources/META-INF/persistence.xml
(用于测试)现在,我回到了开始…类路径顺序没有改变:(。