2011-12-20 23 views
6

這讓我瘋狂,令我震驚的是,official documentation絕對是無用的。如何使用Ant + IntelliJ IDEA做OpenJPA增強

以下是我有:

  • 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:\工作\ 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. 這是更螞蟻的問題。如何讓OpenJPA增強器在openjpa-2.1.1.jar所在目錄以外的目錄中查找persistence.xml
+0

您是否已驗證META-INF目錄是否在您的類路徑中? – Rick 2011-12-20 15:09:21

+0

我不知道如何在Ant腳本中指定額外的classpath目錄。但爲了確保我將'persistence.xml'複製到OpenJPA的jar所在的目錄中。 – expert 2011-12-20 19:07:42

回答

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> 
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> 
+0

不,當它找不到我的實體時,它會給它們帶來ClassNotFound異常。我設法通過命令行和通過Ant工作。我四個小時的生活我永遠不會回來。 – expert 2011-12-20 21:20:06

+0

如果您將META-INF/persistence.xml放入bin中,它應該已經工作。 – Rick 2011-12-20 21:42:15

+1

沒有運氣:(儘管我看到'java.exe'進程訪問'persistence.xml',我設法使它像[this](http://pastebin.com/9bxWYQR3)一樣工作,但我很不高興我在'propertiesFile'屬性中指定了.xml的絕對路徑,你能告訴我如何通過指定文件的名字並在其他地方定義額外的類路徑來實現它的工作嗎?我嘗試了幾個選項,但它沒有工作:(謝謝! – expert 2011-12-21 07:11:03