gpt4 book ai didi

java - 如何将非 gradle JUnit 项目(使用 Hibernate 和 EntityManager)转换为 gradle Junit 项目并保持工作

转载 作者:行者123 更新时间:2023-12-03 06:19:44 24 4
gpt4 key购买 nike

我有一个 JPA/Hibernate 项目,它实现了许多存储库接口(interface)(我使用 DDD),我还有另一个项目使用 JUnit 4 测试第一个项目。我的 IDE 是 Eclipse Luna。后来我了解到,我可以用运行时和测试代码制作一个项目,但此时,我将它们分开在这两个项目中。

到目前为止一切正常。

现在,我决定将我的测试项目转换为 Gradle 项目。转换后,我创建了这个 build.gradle文件

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'application'

tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}

repositories {
mavenLocal()
mavenCentral()
}

jar {
baseName = 'dominio.hibernate.tests'
version = '0.1.0'
}

dependencies {
compile 'junit:junit:4.11'
compile 'org.hamcrest:hamcrest-all:1.3'
runtime fileTree(dir: '../dominio/build/libs', include: '*.jar')
compile fileTree(dir: '../dominio/build/libs', include: '*.jar')
runtime fileTree(dir: '../dominio.hibernate/build/libs', include: '*.jar')
compile fileTree(dir: '../dominio.hibernate/build/libs', include: '*.jar')
compile 'postgresql:postgresql:9.0-801.jdbc4'
compile 'org.hibernate:hibernate-core:4.3.6.Final'
compile 'org.hibernate:hibernate-c3p0:4.1.0.Final'
compile "javax.enterprise:cdi-api:1.0-SP1"
compile "javax.servlet:servlet-api:2.5"
runtime "org.jboss.weld:weld-core:1.0.1-SP1"
compile project(':Dominio')
compile project(':DominioHibernate')
}

task wrapper(type: Wrapper) {
gradleVersion = '1.11'
}

编译效果很好,但是当我运行测试时, 无论是在 Eclipse 中还是通过 Gradle ,我有以下异常
javax.persistence.PersistenceException: No Persistence provider for EntityManager named unidades
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:61)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
at dominio.hibernate.tests.HibernateUnidadeOrganizacionalRepositoryTests.setUp(HibernateUnidadeOrganizacionalRepositoryTests.java:36)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
... the rest of the stack

我强调 Java 代码没有任何变化,并且在 Gradle 出现之前它运行完美。

因此,似乎在将项目转换为 Gradle 后, persistence.xml在 JUnit 运行期间不再可访问,我无法获得 EntityManager实例我需要执行测试。

我浏览了大量关于 JUnit、资源文件和 Gradle 相关问题的帖子,但没有人能告诉我如何解决问题。

有任何想法吗?提前致谢!

最佳答案

为了成功运行使用 Hibernate 的测试,Hibernate 资源和相关代码必须放在相同的输出目录中:

sourceSets.main.output.resourcesDir = sourceSets.main.output.classesDir

这只是测试的问题,因为它们的类路径上有输出目录,而不是 Jar/War。 (这避免了为运行测试构建 Jar/War 的需要。)

关于java - 如何将非 gradle JUnit 项目(使用 Hibernate 和 EntityManager)转换为 gradle Junit 项目并保持工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27174697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com