2014-09-11 16 views
5

Tôi đã cố gắng thiết lập đơn giản nhất của các ứng dụng ngủ đông đơn giản và vì lý do vượt xa tầm thường của tôi về tư duy tôi không thể làm cho nó chạy. Maven là dễ dàng đủ - thêm phụ thuộc vào con đường xây dựng, cập nhật dự án, blah blah blah yadda yadda yaddaCách quá nhiều phụ thuộc Maven

Nó bắt đầu như là một đơn ClassNotFoundException mà đòi hỏi một sự phụ thuộc mất tích. Tôi sẽ nhập bình bị thiếu và chạy lại ứng dụng, chỉ để có được một số khácClassNotFoundException. Điều tiếp theo tôi biết tôi có một tấn lọ và NO ĐƠN LÀM VIỆC

enter image description here

* Thư mục đã được đeo mặt nạ để bảo vệ hạnh

Tôi đã sử dụng cả hai Maven và Hibernate trong dự án cuối cùng của tôi trong Eclipse Kepler và nó gần như là quá dễ dàng, ha! Cập nhật lên Luna là một nỗi đau thực sự cố gắng để Maven chạy đúng - vô hiệu hóa Mức tuân thủ Java Compilier chỉ để có thể cập nhật Dynamic Web Module, chưa kể đến việc tạo thủ công src/main/java và src/test/java bị thiếu các thư mục có tiêu chuẩn với maven-archetype-webapp, danh sách sẽ tiếp tục. Tôi đã dành nhiều thời gian chỉ để có được những điều không thất bại.

Trong dự án cuối cùng của tôi tất cả những gì cần thiết để nhập khẩu là:

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.1.0</version> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-core</artifactId> 
    <version>4.3.6.Final</version> 
</dependency> 
<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-c3p0</artifactId> 
    <version>4.3.6.Final</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-core</artifactId> 
    <version>4.1.0.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-web</artifactId> 
    <version>4.1.0.RELEASE</version> 
    </dependency> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-webmvc</artifactId> 
    <version>4.1.0.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.codehaus.jackson</groupId> 
    <artifactId>jackson-mapper-asl</artifactId> 
    <version>1.9.13</version> 
</dependency> 

Đó là nó! Tôi đã bơi trong các Nhà máy Phiên và cập nhật các bảng cơ sở dữ liệu giống như nó là công việc của tôi (có nghĩa là).

Điều này khiến tôi tin rằng một số chức năng cốt lõi bị thiếu trong dự án mới này. Có lẽ tôi đã bỏ qua một cái gì đó trong IDE Upgrade. Gần như có thể đảm bảo đường dẫn xây dựng của tôi. Hãy giúp tôi!

Về dự án của tôi - Tôi đang sử dụng: Eclipse Luna (Kepler là 100x dễ dàng hơn để thiết lập với Maven) Maven webapp Archetype JDK-1,7 Hibernate Lõi 4-3.6

ngoại lệ mới nhất của tôi là

Exception in thread "main" java.lang.NoClassDefFoundError: javax/persistence/NamedStoredProcedureQuery 
    at org.hibernate.cfg.AnnotationBinder.bindDefaults(AnnotationBinder.java:276) 
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1402) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844) 
    at com.boa.ecris.test.Main.main(Main.java:22) 
Caused by: java.lang.ClassNotFoundException: javax.persistence.NamedStoredProcedureQuery 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    ... 4 more 

Nếu điều này cụ thể đối với javax persistence-api.jar, nó đã ở trong đó !!!

+2

'persistence-api.jar' không có lớp bị thiếu. Hãy thử thêm 'javaee-api.jar' –

+0

Cảm ơn bạn đã giúp. –

+1

Thay đổi ide không nên phá vỡ phụ thuộc - có phải là cùng một pom? Ngoài ra, bạn sẽ thấy rất nhiều lọ vì Eclipse đang hiển thị cho bạn tất cả các phụ thuộc tạm thời. – Romski

Trả lời

0

Khi bạn có ClassNotFoundException, trước hết bạn phải xem trang web lưu trữ của mình. Bạn có thể nhận được url lưu trữ maven từ tệp cài đặt trong thư mục .m2. Sau đó, bạn có thể tìm kiếm sự phụ thuộc của mình tại trang web đó bằng các mã tạo tác phiên bản của mình. Nếu phiên bản của bạn không có ở đó, bạn có thể thấy một số phiên bản khác và đặt nó thay cho phiên bản của bạn. Vì vậy, bạn có thể cung cấp sự ổn định tại dự án của bạn mà không cần thêm thủ công.

0

Luna cũng có thể tạo phân cấp dự án maven. Trên hộp thoại Dự án maven mới, hãy chọn hộp kiểm Tạo một dự án đơn giản (bỏ qua lựa chọn kiểu mẫu).

+0

Cảm ơn @babsaai, tôi không thể hiểu tại sao nguyên mẫu webapp ban đầu không có các thư mục đó –

2

API Java thay đổi theo thời gian. Bạn cần tìm đúng phiên bản của phụ thuộc của bạn (cụ thể là phiên bản chứa phiên bản API bạn muốn/cần sử dụng).Vì bạn đã nói với Maven sử dụng phiên bản 1.0.2 của persistance-api, đó là những gì Maven sẽ làm - bạn có thể biết rõ hơn.

Nếu lỗi không biến mất, sau đó bước tiếp theo của bạn nên là trung tâm repo Maven, đặc biệt là "tìm lớp học cho tôi" search thoại: http://search.maven.org/#search%7Cga%7C1%7Cfc%3Ajavax.persistence.NamedStoredProcedureQuery

Tiếp theo, bạn cần phải hiểu đó phụ thuộc bạn muốn trong dự án của bạn và chọn đúng từ danh sách. Vì Maven không biết về những ràng buộc của bạn, đó là điều bạn phải tự tìm ra.

Lời khôn ngoan: Máy tính không có bộ não, tự mang theo.

+0

Mặc dù bạn đã làm tổn thương cảm xúc của tôi, đây là câu trả lời mang tính xây dựng và hữu ích. Tôi không phải là một chuyên gia Maven nhưng tôi học bằng ví dụ. Vì vậy, cảm ơn bạn –

+0

Vâng, tôi có xu hướng làm điều đó :-) OTOH, "* blah blah blah yadda yadda yadda *" làm cho nó khó khăn cho tôi để ở lại chuyên nghiệp ;-) –

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