这简直要把我逼疯了,我很震惊官方文档竟然毫无用处。
我有:
- IntelliJ IDEA 11
- OpenJPA 2.1.1
由于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: 撮合下 build . xml: 283: org.apache.openjpa.util.MetaDataException:无法配置元数据工厂(conf.newMetaDataFactoryInstance()返回null)。这可能意味着没有找到任何配置属性。确保你有一个META-INF/persistence.xml文件,它在你的类路径中可用;或者您用于配置的属性文件是可用。如果您正在使用Ant,请参阅or任务嵌套元素的属性。如果您的OpenJPA发行jar已损坏,或者如果您的安全策略过于严格。
我测试了进程监视器,可以看到它打开并读取 persistence.xml
。
有人提交了bug,我有问题,他得到的答案是,找到persistence.xml
不是问题的根源。
问题是:
- 我怎么做才能使它工作?
- 我可以通过跳过需要
persistence.xml
和只是指定模式。class文件,我想要增强它的工作吗? - 这是一个更重要的问题。我如何使OpenJPA增强器在
openjpa-2.1.1.jar
所在的目录之外寻找persistence.xml
?
所以我不能使它没有未记录的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>
看来您可能错过了文档中的一个重要部分。您的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>