2011-12-20 32 views
6

Điều này khiến tôi phát điên và tôi bị sốc rằng official documentation hoàn toàn là USEN.Cách nâng cấp OpenJPA với Ant + IntelliJ IDEA

Dưới đây là những gì tôi có:

  • IntelliJ IDEA 11
  • OpenJPA 2.1.1

Kể từ OpenJPA được thêm vào danh sách các thư viện sử dụng tôi đã có classpath để OpenJPA trông giống như này

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

Theo tài liệu chính thức tôi đã thêm vào sau mục tiêu

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

Nó mang lại cho tôi ngoại lệ

C: \ work \ prj \ build.xml: 283: org.apache.openjpa.util.MetaDataException: MetaDataFactory không thể được cấu hình (conf. newMetaDataFactoryInstance() trả về null). Điều này có nghĩa là không tìm thấy thuộc tính cấu hình nào. Đảm bảo rằng bạn có tệp META-INF/persistence.xml, có sẵn trong đường dẫn lớp học của bạn, hoặc tệp thuộc tính bạn đang sử dụng để định cấu hình là khả dụng. Nếu bạn đang sử dụng Ant, vui lòng xem hoặc thuộc tính của phần tử lồng nhau của công việc. Điều này cũng có thể xảy ra nếu bình phân phối OpenJPA của bạn bị hỏng hoặc nếu chính sách bảo mật của bạn quá nghiêm ngặt.

tôi thử nghiệm với Process Monitor và có thể thấy rằng nó sẽ mở ra và đọcpersistence.xml.

Một số người filed bug gặp sự cố tôi có và câu trả lời mà anh nhận được là việc tìm kiếm persistence.xml không phải là một vấn đề.

Câu hỏi là:

  1. Tôi có thể làm gì để làm cho nó hoạt động?
  2. Tôi có thể làm cho nó hoạt động bằng cách bỏ qua nhu cầu persistence.xml và chỉ định mẫu cho các tệp .class mà tôi muốn được nâng cao?
  3. Đó là câu hỏi về Ant. Làm thế nào tôi có thể làm cho OpenJPA enhancer tìm kiếm persistence.xml trong thư mục khác với nơi openjpa-2.1.1.jar cư trú?
+0

Bạn đã xác minh rằng thư mục META-INF có trên đường dẫn lớp của bạn không? – Rick

+0

Tôi không biết cách chỉ định thư mục classpath bổ sung trong tập lệnh Ant. Nhưng chỉ để chắc chắn tôi đã sao chép 'persistence.xml' vào thư mục chứa jar của OpenJPA. – expert

Trả lời

8

Vì vậy, tôi không thể làm cho nó hoạt động mà không có giấy tờ không có giấy tờ propertiesFile. Đây là phiên bản phù hợp với tôi. Đồng thời chỉ định persistence-unit qua # làm cho nó không thành công với 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

Dường như bạn có thể đã bỏ lỡ một phần quan trọng trong tài liệu. library.openjpa.classpath của bạn thiếu tham chiếu đến Thực thể của bạn và vị trí của tệp persistence.xml. Hãy thử thêm nó và xem nó như thế nào.

<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

Không, khi nó không thể tìm thấy thực thể của tôi, nó cho phép ngoại lệ ClassNotFound trên chúng. Tôi quản lý để làm cho nó hoạt động thông qua dòng lệnh và thông qua Ant. Bốn giờ trong cuộc đời tôi sẽ không bao giờ quay lại. – expert

+0

Nếu bạn đưa bạn META-INF/persistence.xml vào thùng, nó sẽ hoạt động. – Rick

+1

Không may mắn: (Mặc dù tôi thấy rằng quá trình 'java.exe' truy cập' persistence.xml'. Tôi đã quản lý để làm cho nó hoạt động như [this] (http://pastebin.com/9bxWYQR3). Nhưng tôi không hài lòng tôi chỉ định đường dẫn tuyệt đối tới .xml trong thuộc tính 'propertiesFile' Bạn có thể cho tôi biết cách tôi có thể làm cho nó hoạt động bằng cách chỉ định tên của tệp và xác định đường dẫn lớp bổ sung ở nơi khác không? Tôi đã thử vài tùy chọn nhưng nó không hoạt động: (Cảm ơn! – expert

Các vấn đề liên quan