这让我发疯,我很震惊official documentation绝对是用途。
这就是我所拥有的:
由于openjpa被添加到已使用的库列表中,我已经有了OpenJPA的类路径,看起来像这样
<path id="library.openjpa.classpath">
<fileset dir="${basedir}/lib/openjpa">
<patternset refid="library.patterns"/>
</fileset>
</path>
根据官方文件,我添加了以下目标
<target name="enhance">
<copy includeemptydirs="false" todir="${basedir}/lib/openjpa">
<fileset dir="src" excludes="**/*.launch, **/*.java"/>
</copy>
<taskdef name="openjpac" classname="org.apache.openjpa.ant.PCEnhancerTask">
<classpath refid="library.openjpa.classpath"/>
</taskdef>
<openjpac>
<classpath refid="library.openjpa.classpath"/>
</openjpac>
</target>
它给了我异常
C:\ work \ prj \ build.xml:283:org.apache.openjpa.util.MetaDataException: 无法配置MetaDataFactory (conf.newMetaDataFactoryInstance()返回null)。这可能意味着 没有找到配置属性。确保你有一个 META-INF / persistence.xml文件,它在类路径中可用, 或者您用于配置的属性文件是 可用。如果您使用的是Ant,请参阅或 任务的嵌套元素的属性。 如果您的OpenJPA分发罐损坏,也可能发生这种情况 如果你的安全政策过于严格。
我使用Process Monitor进行了测试,可以看到打开并阅读 persistence.xml
。
我遇到问题的某些人filed bug和他得到的答案是找到persistence.xml
并不是问题的根源。
问题是:
persistence.xml
的需要并仅指定我想要增强的.class文件的模式来使其工作?persistence.xml
所在的目录以外的目录中查找openjpa-2.1.1.jar
?答案 0 :(得分:8)
所以如果没有未记录的propertiesFile
,我就无法工作。这是适合我的版本。同时通过#
指定持久性单元会使其失败并显示NullReferenceException。
<target name="enhance">
<taskdef name="openjpac" classname="org.apache.openjpa.ant.PCEnhancerTask">
<classpath refid="library.openjpa.classpath"/>
</taskdef>
<openjpac>
<classpath refid="library.openjpa.classpath"/>
<classpath location="${reporting.output.dir}"/>
<config propertiesFile = "${basedir}/src/META-INF/persistence.xml"/>
</openjpac>
</target>
答案 1 :(得分:0)
您可能错过了文档中的重要部分。您的library.openjpa.classpath
缺少对您的实体的引用,以及persistence.xml文件的位置。尝试添加它,看看它是怎么回事。
<path id="jpa.enhancement.classpath">
<pathelement location="bin"/> <!-- add something like this -->
<!-- lib contains all of the jars that came with the OpenJPA binary download -->
<fileset dir="lib">
<include name="**/*.jar"/>
</fileset>
</path>