2015-03-24 14 views
44

Tôi đã tạo một dự án công cụ ứng dụng Google bằng cách sử dụng dự án nguyên mẫu maven với nhà cung cấp Datanucleus JPA, về cơ bản tuân theo tài liệu về công cụ ứng dụng của Google.Thử nghiệm đơn vị gradle ở đâu cho công cụ ứng dụng Google mong đợi persistence.xml?

Mọi thứ hoạt động tốt khi chạy mục tiêu maven "test".

Bây giờ, tôi đã tích hợp dự án vào studio Android và muốn di chuyển tập lệnh xây dựng thành dạng tốt nghiệp. Tôi đã sao chép tất cả các phụ thuộc từ pom.xml đến build.gradle và dự án xây dựng tốt. Tuy nhiên, tất cả các thử nghiệm truy cập kho dữ liệu của Google đều không thành công.

Trong đầu ra thử nghiệm tôi nhận được thông báo sau:

Cảnh báo: Không META-INF/file persistence.xml được tìm thấy trong classpath của thread hiện hành!

Tôi đã kiểm tra build thư mục được tạo ra trong việc xây dựng và không có thư mục chứa các persistence.xml từ src/main/webapp/WEB-INF/classes/META-INF

Sử dụng maven, tuy nhiên, nó được đặt một cách chính xác trong thư mục target/myapp-1.0-SNAPSHOT/WEB-INF/classes/META-INF.

Tôi đã thử sao chép persistence.xml bằng cách sử dụng tác vụ sao chép gradle vào các vị trí khác nhau, chẳng hạn như build/classes/META-INFbuild/classes/webapp/WEB-INF/classes/META-INF v.v. nhưng không có tác dụng.

+0

Trong khi tôi chắc chắn không biết đủ về gradle, vv để dứt khoát trả lời này, Goog toàn năng đã cho tôi [SO câu hỏi này] (http://stackoverflow.com/questions/1279060/jpa-with-toplink- không-meta-inf-persistence-xml-đã được tìm thấy-trong-classpath) mà có thể giúp đỡ. – Becuzz

+0

Cảm ơn bạn đã chỉ ra điều này. Tuy nhiên, dự án của tôi đang xây dựng tiền phạt WAR. Tệp persistence.xml được đặt chính xác vào thư mục WEB-INF/classes/META-INF. Đây không phải là vấn đề. Vấn đề là khi chạy thử nghiệm đơn vị (nơi không có WAR đang được xây dựng), persistence.xml phải được đặt * ở đâu đó *. Tôi đang yêu cầu điều này ở đâu đó. – itchee

+5

cách tiếp cận của tôi sẽ là đặt 1 trong mỗi thư mục cho đến khi nó chạy :) có vẻ như lame nhưng đã được chứng minh là hiệu quả – deW1

Trả lời

15

Chỉ vì tệp được đặt trong một thư mục không tự động có nghĩa là nó nằm trong CLASSPATH.

Đặt thư mục META-INF chứa persistence.xml trong /src/main/resources.

+4

Điều này thực sự chính xác. Cảm ơn bạn một ngàn lần. Nhưng bạn có thể xây dựng thêm một chút nữa không, tại sao Gradle xây dựng mong đợi tệp dưới 'tài nguyên' khi tệp web phải nằm trong' webapp'? – itchee

+0

Có lẽ anh ta sẽ, nếu anh ta không * (rất có thể) * sao chép câu trả lời của anh ta mà không biết ý nghĩa của nó từ một bình luận về [câu trả lời này] (http://stackoverflow.com/a/15403627/4686625), từ câu hỏi Travis J được liên kết. – miradulo

+0

xem câu trả lời này để biết thêm thông tin về cách mvn sắp xếp lại mọi thứ http://stackoverflow.com/questions/1297473/maven-including-a-meta-inf-folder-in-the-classes-folder – skullkid

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