2011-12-20 13 views
6

これは私を夢中にしていて、私はofficial documentationが絶対にuselesであることにショックを受けています。ここで 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ディストリビューションのjarファイルが破損している場合にも発生する可能性があります。セキュリティポリシーが過度に厳しい場合は になることがあります。

私はProcess Monitorでテストし、それが開き、persistence.xmlを読み込むことがわかります。

一部の人filed bug私は問題があり、彼が得た答えはpersistence.xmlが問題の原因ではないということでした。

質問は以下のとおりです。

  1. は、私はそれを動作させるために何ができますか?
  2. persistence.xmlをスキップし、.classファイルのパターンを指定するだけで機能させることはできますか?
  3. それはもっとAntの質問です。 openjpa-2.1.1.jar以外のディレクトリにあるpersistence.xmlを探すためにOpenJPAエンハンサーを作るにはどうすればよいですか?
+0

META-INFディレクトリがクラスパスにあることを確認しましたか? – Rick

+0

Antスクリプトでクラスパスディレクトリを追加指定する方法がわかりません。しかし、OpenJPAのjarが置かれているディレクトリに 'persistence.xml'をコピーしたことを確認するだけです。 – expert

答えて

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

Nah、エンティティが見つからない場合は、ClassNotFound例外が発生します。コマンドラインとAnt経由で動作させることができました。私の人生の4時間は戻ってこないよ。 – expert

+0

META-INF/persistence.xmlをbinに入れると、それはうまく動作するはずです。 – Rick

+1

No luck :(たとえ 'java.exe'プロセスが' persistence.xml'にアクセスしても、私は[this](http://pastebin.com/9bxWYQR3)のように動作しますが、私は不幸です私は 'propertiesFile'属性で.xmlへの絶対パスを指定しています。ファイルの名前だけを指定し、別のクラスパスを別の場所に定義することで、どのように動作させることができるでしょうか?ありがとう! – expert

関連する問題