Gradle [META-INF/persistence.xml] was not found



我正在使用gradle构建我的JPA/EJB项目并收到以下警告:

$ gradle jar
:compileJava
Note: Creating static metadata factory ...
Note: The persistence xml file [META-INF/persistence.xml] was not found. NO GENERATION will occur!! Please ensure a persistence xml file is available either from the CLASS_OUTPUT directory [META-INF/persistence.xml] or using the eclipselink.persistencexml property to specify its location. 
2 warnings
:processResources UP-TO-DATE
:classes
:jar

我的项目结构:

   ProjectX
   |-src
   |---main
   |-----java
   |-------domain
   |-------ejb
   |-----resources
   |-------META-INF
   |-----------persistence.xml

有趣的是,持久性.xml最终出现在目标jar工件中:

$ jar -tf target/projectx.jar
META-INF/
META-INF/MANIFEST.MF
domain/
domain/Employee.class
ejb/
ejb/EmployeeEJB.class
META-INF/persistence.xml

为什么有人抱怨[META-INF/persistence.xml]即使它在那里?

gradle 文件:

apply plugin: 'java'
project.buildDir = 'target'
sourceSets.all {
    output.resourcesDir = output.classesDir
}
jar{
    destinationDir=project.buildDir
}
repositories {
    mavenCentral()
}
dependencies {
    compile 'org.glassfish:javax.ejb:3.0.1','org.eclipse.persistence:javax.persistence:2.0.0'
}

我现在用 maven 快速测试了,那里没有这样的警告。

编译

时需要persistence.xml。实现此目的的一种方法是:

sourceSets.main.output.resourcesDir = sourceSets.main.output.classesDir
compileJava.dependsOn(processResources)

事实上,@peter-niederwieser 建议的解决方案是将主要资源和类目录设置为同一位置,这会导致 jar 存档中出现重复条目。基本上是原来大小的两倍,不知道是不是还有其他问题。

因此,要解决此问题,您必须添加

sourceSets.main.output.resourcesDir = sourceSets.main.output.classesDir
jar {
    duplicatesStrategy = 'exclude'
}

到你的build.gradle.

META-INF 应该

在你的类路径的根目录中 (

/src/main/java/META-INF)

持久性.xml应该在 src/main/resources/META-INF 中。这对我有用。请不要说这是一个非春季项目

相关内容

最新更新