未找到Gradle [META-INF / persistence.xml]

时间:2014-02-23 12:04:42

标签: java gradle jpa-2.0

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

$ 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

有趣的是,persistence.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一起测试了,那里没有这样的警告。

4 个答案:

答案 0 :(得分:6)

编译时需要persistence.xml。实现这一目标的一种方法是:

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

答案 1 :(得分:1)

事实上,@ peter-niederwieser建议将主要资源和类dir设置为相同位置的解决方案会导致jar存档中的重复条目。基本上,它是原始尺寸的两倍,不知道是否还有其他问题。

所以要解决这个问题,你必须添加

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

build.gradle

答案 2 :(得分:0)

META-INF应该在你的类路径的根目录中(/ src / main / java / META-INF)

答案 3 :(得分:0)

persistence.xml应该位于src / main / resources / META-INF中。这对我有用。请不要因为这不是一个春季项目