2011-12-20 27 views
6

ile OpenJPA geliştirme yapmak ve ben official documentation kesinlikle useles olduğunu şaşırdım. İşte nasıl bu beni delirtiyor Ant + IntelliJ IDEA

ben ne var:

  • IntelliJ IDEA 11
  • OpenJPA 2.1.1

OpenJPA Zaten benziyor OpenJPA için sınıf yolunu vardı kullanılan kütüphanelerin listesine eklenir yana bu

<path id="library.openjpa.classpath"> 
    <fileset dir="${basedir}/lib/openjpa"> 
     <patternset refid="library.patterns"/> 
    </fileset> 
</path> 

Resmi belgelere göre aşağıdaki hedefi ekledim:

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

Bu istisna bana

C verir: \ iş \ prj \ build.xml: 283: org.apache.openjpa.util.MetaDataException: MetaDataFactory (conf yapılandırılmamış edilemedi. newMetaDataFactoryInstance() null döndürdü). Bu, hiçbir yapılandırma özelliği bulunmayan anlamına gelebilir. META-INF/persistence.xml dosyanızın, sınıf yolunuzda, adresinde bulunduğuna veya yapılandırma için kullandığınız özellik dosyasının adresinden erişilebilir olduğundan emin olun. Eğer Ant kullanıyorsanız, görevin iç içe elemanın veya özelliklerini bakın. Güvenlik politikası aşırı sıkı ise Bu aynı zamanda OpenJPA dağıtım kavanoz bozuk oluşabilir veya olabilir.

Ben Process Monitor ile test ve açılır ve persistence.xml okur görebilirsiniz.

Bazı kişilerde sorun yaşıyorum filed bug var ve o var cevabı persistence.xml bulmak bir sorun kaynağı değil.

Sorular şunlardır:

  1. Ne çalışması için ne yapabilirim?
  2. Ben persistence.xml ihtiyacını atlama ve sadece gelişmiş olmak istiyorum .class dosyaları için kalıp belirterek çalışabilir yapabilir miyim?
  3. Daha Ant soru. Nasıl OpenJPA arttırıcı nerede openjpa-2.1.1.jar kahntılannin dışındaki dizinde persistence.xml aramaya yapabilirsiniz?
+0

META-INF dizininizin sınıfınızda olduğunu doğruladınız mı? – Rick

+0

Ant komut dosyasında ek sınıf yolu dizini belirtmeyi bilmiyorum. Ama sadece 'persistence.xml' yi OpenJPA'nın kavanozunun bulunduğu dizine kopyaladığımdan emin olmak için. – expert

cevap

8

Bu yüzden belgesiz propertiesFile olmadan işe gelemedi. İşte benim için çalışan versiyonu. Kalıcı birimin # aracılığıyla belirtilmesi, NullReferenceException ile başarısız olmasını sağlar.

<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

Belgelerin önemli bir bölümünü kaçırmış olabileceğiniz anlaşılıyor. Sizin library.openjpa.classpath, Varlıklarınızın bir referansı ve persistence.xml dosyasının yeri eksik. Bunu eklemeyi deneyin ve nasıl gittiğini görün.

<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

Hayır, varlıklarımı bulamadığında, onlara ClassNotFound istisnası veriyor. Komut satırı ve Ant ile çalışmayı başardım. Hayatımın dört saati asla geri dönemeyeceğim. – expert

+0

Eğer META-INF/persistence.xml dosyasını çöp kutusuna koyarsanız, işe yaramış olmalıydı. – Rick

+1

Hayır şans :('java.exe' sürecinin persistence.xml 'ye eriştiğini görsem de, onu [bu] gibi çalışmayı başardım (http://pastebin.com/9bxWYQR3) Ama mutsuzum 'propertiesFile' özniteliğinde .xml mutlak yolunu belirttim.Yalnızca dosyanın adını belirterek ve başka bir yerde başka bir sınıf yolu tanımlayarak nasıl çalışabileceğimi söyleyebilir misiniz? Çift seçenekleri denedim ama işe yaramadı :(Teşekkürler! – expert