2011-12-13 20 views
5

Tôi nhận được lỗi từ nhật thực khi tôi cố gọi một mã làm việc 100%. Đó là ví dụ làm việc trong netbeans của tôi nhưng không phải là dự án nhật thực này. Lỗi là vô lý và tôi gần như chắc chắn nó gây ra bởi một số phụ thuộc Maven cho OPPA JPA mà tôi đang sử dụng. Bất kỳ con trỏ?Lỗi JPA ClassFormat "Thuộc tính Mã không có trong phương thức không phải là bản địa hoặc trừu tượng trong tệp lớp javax/persistence/Persistence"

Map<String,String> properties = new HashMap<String,String>(); 
properties.put(PersistenceUnitProperties.JDBC_PASSWORD, ""); 
properties.put(PersistenceUnitProperties.JDBC_USER, "root"); 
properties.put(PersistenceUnitProperties.JDBC_URL, "jdbc:mysql://localhost:3306/mydb"); 
properties.put(PersistenceUnitProperties.JDBC_DRIVER, "com.mysql.jdbc.Driver"); 

emf = Persistence.createEntityManagerFactory("Persistentunitname", properties); 

Lỗi này xảy ra trên dòng cuối cùng, và lỗi này là:

ClassFormat Lỗi "thuộc tính Mã Vắng mặt trong phương pháp đó không phải là mẹ đẻ hoặc trừu tượng trong tập tin lớp javax/bền bỉ/Persistence"

+0

Xem http://maven.40175.n5.nabble.com/Problem-running-unit-tests-from-maven-JPA-related-td126893.html để có đề xuất giải pháp. –

+0

Giải pháp được đề xuất ở đó, openejb -javaee 6.0, không tồn tại (ít nhất không phải là phiên bản 6). Tôi nghĩ rằng vấn đề có một giải pháp tương tự nhưng dường như không thể tìm thấy nó – SQC

+0

Tôi có javaee6.0.jar, vì vậy tôi nghĩ rằng có cái gì khác đang xảy ra – SQC

Trả lời

3

Điều gì đang xảy ra là tài liệu tham khảo pom của bạn javaee-api. Gói này không cung cấp các phần thân phương thức, chỉ các phần đầu. Nó thực sự là một gói bị hỏng được 'cố định' khi chạy khi được triển khai vào một môi trường JavaEE.

NetBeans đang cung cấp triển khai thực sự javaee trong khi Eclipse thì không. Để giải quyết điều này thêm:

<dependency> 
    <groupId>org.eclipse.persistence</groupId> 
    <artifactId>eclipselink</artifactId> 
    <version>2.4.0</version> 
    <scope>compile</scope> 
</dependency> 

Điều này sẽ cung cấp các triển khai cần thiết của javax.resistence và mã của bạn sẽ hoạt động.

9

Nếu bạn có một sự phụ thuộc JavaEE trong pom của bạn như

<dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-web-api</artifactId> 
    <version>6.0</version> 
</dependency> 

di chuyển nó đến cuối phụ thuộc của bạn. Sự phụ thuộc JPA của bạn phải đến trước sự phụ thuộc javaee hoặc bạn sẽ nhận được lỗi đó.

+1

Thật tuyệt khi biết rằng tôi phải di chuyển javaee-web-api đến cùng. Cảm ơn –