我正在使用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一起测试了,那里没有这样的警告。
答案 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中。这对我有用。请不要因为这不是一个春季项目