我有两个基于maven项目非常典型的持久性文件。
eclipse和maven都无法在测试运行时将junit提供给我的测试失败。
答案 0 :(得分:0)
作为最后的手段,请尝试使用maven-resources-plugin强制复制:
<project>
...
<build>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<executions>
<execution>
<id>copy-resources</id>
<!-- here the phase you need -->
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}</outputDirectory>
<resources>
<resource>
<directory>src/**/*.xml/directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
...
</build>
...
</project>
未经测试。
答案 1 :(得分:0)
正如我在评论中解释的那样,我认为问题出在maven插件中。如果可能,请尝试使用maven-surefire-plugin
代替maven-failsafe-plugin
。但即使你让它与第二个persistence.xml
一起使用,在维护时也会遇到另一个问题(至少在Hibernate 5.2中)。它不会从主要来源检测带注释的类,但只能从测试中检测到,您必须使用<class>
标记列出它们,并且尽量不要忘记每次都这样做。我发现对我有用的解决方案是只有主xml并像我这样实例化EntityManagerFactory
:
@BeforeClass
public static void initJpa() throws Exception {
TreeMap<String, Object> props = new TreeMap<>();
props.put("javax.persistence.jdbc.driver", "org.postgresql.Driver");
props.put("javax.persistence.jdbc.url", "jdbc:postgresql://127.0.0.1:5432/projectdb");
props.put("javax.persistence.jdbc.user", "testuser");
props.put("javax.persistence.jdbc.password", "testpass");
props.put("javax.persistence.nonJtaDataSource", null); // important to override the data-source!
emf = Persistence.createEntityManagerFactory("persistance.unit.name", props);
}
javax.persistence.nonJtaDataSource
属性最终是诀窍。
这应该绕过你遇到的类加载覆盖问题。