如何使用Ant + IntelliJ IDEA进行OpenJPA增强

时间:2011-12-20 10:26:59

标签: intellij-idea ant openjpa

这让我发疯,我很震惊official documentation绝对是用途。

这就是我所拥有的:

  • 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:\ 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并不是问题的根源。

问题是:

  1. 我该怎么做才能让它发挥作用?
  2. 我是否可以通过跳过persistence.xml的需要并仅指定我想要增强的.class文件的模式来使其工作?
  3. 这是更多的Ant问题。如何使OpenJPA增强器在persistence.xml所在的目录以外的目录中查找openjpa-2.1.1.jar

2 个答案:

答案 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>