2011-12-20 9 views
6

To doprowadza mnie do szału i jestem zszokowany, że official documentation jest absolutnie użyteczny.Jak zrobić ulepszenie OpenJPA z Ant + IntelliJ IDEA

Oto co mam:

  • IntelliJ IDEA 11
  • OpenJPA 2.1.1

Od OpenJPA jest dodawany do listy używanych bibliotek miałem już ścieżkę klasy do OpenJPA który wygląda jak ten

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

Według oficjalnej dokumentacji dodałem następujący cel

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

To daje mi wyjątek

C: \ praca \ PRJ \ build.xml: 283: org.apache.openjpa.util.MetaDataException: MetaDataFactory nie może być skonfigurowany (conf. newMetaDataFactoryInstance() zwrócił wartość null). Może to oznaczać, że nie znaleziono żadnych właściwości konfiguracyjnych: . Upewnij się, że masz plik META-INF/persistence.xml , że jest on dostępny w ścieżce klasy, lub że plik właściwości, którego używasz do konfiguracji, jest dostępny . Jeśli używasz Ant, zobacz atrybuty zagnieżdżonego elementu zadania. Może to również wystąpić, jeśli twoje słoiki dystrybucji OpenJPA są uszkodzone lub , jeśli twoje zasady bezpieczeństwa są nadmiernie restrykcyjne.

testowałem z Process Monitor i widać, że otwiera i czytapersistence.xml.

Mam jedną osobę, która ma problemy i otrzymałem odpowiedź, że znalezienie persistence.xml nie jest źródłem problemu.

Pytania są następujące:

  1. Co mogę zrobić, aby to działało?
  2. Czy mogę to zrobić, pomijając potrzebę dla persistence.xml i po prostu określając wzorzec dla plików .class, które chcę poprawić?
  3. To więcej pytanie na Anta. Jak mogę uczynić wzmacniacz OpenJPA, aby szukał persistence.xml w katalogu innym niż gdzie znajduje się openjpa-2.1.1.jar?
+0

Czy zweryfikowałeś, że katalog META-INF znajduje się w ścieżce klas? – Rick

+0

Nie wiem, jak określić dodatkowy katalog ścieżek klas w skrypcie Ant. Ale dla pewności skopiowałem 'persistence.xml' do katalogu, w którym znajduje się jar OpenJPA. – expert

Odpowiedz

8

Więc nie mogłem sprawić, żeby działało bez nieudokumentowanego propertiesFile. Oto wersja, która działa dla mnie. Również określenie jednostki trwałości przez # powoduje, że kończy się niepowodzeniem z wyjątkiem 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

Wygląda na to, że pominięto ważną część dokumentacji. Twój numer library.openjpa.classpath nie zawiera odniesienia do twoich jednostek i lokalizacji pliku persistence.xml. Spróbuj to dodać i zobacz, jak idzie.

<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, kiedy nie może znaleźć moich jednostek, daje na nich wyjątek ClassNotFound. Udało mi się sprawić, by działał on przez linię poleceń i przez Ant. Cztery godziny mojego życia, nigdy nie wrócę. – expert

+0

Jeśli umieścisz META-INF/persistence.xml w bin, powinno działać. – Rick

+1

Bez powodzenia :(Nawet jeśli widzę, że proces 'java.exe' uzyskuje dostęp do' persistence.xml' .Mogę sprawić, żeby działało jak [this] (http://pastebin.com/9bxWYQR3) .Ale jestem nieszczęśliwy że podaję absolutną ścieżkę do .xml w atrybucie "propertiesFile". Czy mógłbyś mi powiedzieć, jak mogę sprawić by działało, podając tylko nazwę pliku i definiując dodatkową ścieżkę klasy w innym miejscu? Próbowałem opcji pary, ale to nie działało :(Dzięki! – expert