2012-02-14 40 views
10

Tôi đang cố gắng để hiểu được những tập tin classpath Eclipse, đặc biệt, tôi muốn biết điều này:Hiểu tờ khai classpath Eclipse

  1. Làm thế nào là JRE sử dụng nó (tức là JVM đọc file xml này trực tiếp, hoặc là eclipse bằng cách nào đó cho nó vào trình biên dịch nội bộ của nó)?

  2. Các mục phức tạp (như đường dẫn ivy bên dưới) được phân tích cú pháp và được tích hợp vào JVM ClassLoader khi tôi chạy các lớp từ IDE của mình như thế nào?

Bối cảnh: Tôi có một lỗi lạ mà là nhật thực toàn phần được sử dụng phiên bản "sai" của một lớp, trong khi ivy của tôi/ant build đang sử dụng phiên bản chính xác, và vì vậy tôi muốn công cụ Eclipse để tốt hơn bắt chước trình nạp lớp được sử dụng trong bản dựng thuần túy của tôi. Để làm điều này, tôi nghĩ tôi sẽ phải xem xét các tệp dự án/classpath của Eclipse.

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
    <classpathentry kind="src" path="src"/> 
    <classpathentry kind="src" path="test"/> 
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> 
    <classpathentry kind="lib" path="conf"/> 
    <classpathentry kind="con" path="org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER/?ivyXmlPath=ivy.xml&amp;confs=*"/> 
    <classpathentry kind="output" path="build"/> 
</classpath> 
+0

Tôi không tin JVM biết bất cứ điều gì về tệp classpath Eclipse. Bạn có thể gõ lên một lớp thử nghiệm với một khối chính mà chỉ cần in ra System.getProperty ("java.class.path") - nó sẽ cho bạn thấy rằng tất cả các tham chiếu phức tạp của bạn chỉ được giải quyết cho các vị trí tệp jar trên đĩa, sau đó được đưa vào một classpath JRE bình thường. Nếu bạn có một lỗi tối nghĩa với các công cụ Ivy thì bạn có thể muốn nâng cấp nó với các nhà phát triển của plugin Ivy Eclipse? Chúc may mắn giải quyết sự cố của bạn – davidfrancis

Trả lời

10

Hai điều khác nhau:

1) Dự án classpath được sử dụng để biên dịch mã của bạn sử dụng Eclipse Java Compiler (EJC), vì vậy các thông tin tập tin được truyền cho EJC.

2) Khi bạn tạo cấu hình khởi chạy, bạn thực sự khai báo đường dẫn lớp để chạy ứng dụng của bạn, theo mặc định, dựa trên đường dẫn lớp dự án của bạn. Đường dẫn lớp này được chuyển như một đối số cho JVM như bạn sẽ làm điều đó theo cách thủ công (java -cp $ {classpathentries} yourmainclass). Nếu bạn muốn tìm hiểu chính xác classpath của cấu hình khởi chạy của bạn, hãy khởi chạy ứng dụng/lớp của bạn trong chế độ gỡ rối, và trong khung nhìn Debug, hãy chọn quy trình của bạn và bấm vào Thuộc tính nơi bạn sẽ thấy toàn bộ classpath (tất cả các lọ/các thư mục được chuyển làm đối số cho JVM)

Lưu ý: Tôi không thể thấy nội dung đường dẫn của bạn.

+0

Nhờ chỉ ra "gỡ lỗi, thuộc tính", đây là những gì tôi đang tìm kiếm. –

+0

Có cách nào để thay đổi đường dẫn lớp theo cách thủ công trong cấu hình khởi chạy không? Một số dự án maven phụ thuộc của chúng tôi có các tài nguyên thử nghiệm trong thư mục nguồn src/test/resources. Lệnh chạy eclipse sẽ bao gồm thư mục target/test-classes vào classpath cuối cùng, đó không phải là những gì chúng ta muốn. – Chris

0

Vấn đề có thể là:

Nó có nghĩa là trong classpath eclipse của bạn, bạn nên có hai phiên bản khác nhau của cùng lớp (hai tập tin jar khác nhau của phiên bản khác nhau). Nếu đó là trường hợp, sau đó thử loại bỏ một. Cũng trong đường dẫn xây dựng nhật thực của bạn có cái gì đó gọi là "Xây dựng thứ tự", nơi bạn có thể chỉ định thứ tự của lọ classpath thử thay đổi đó.

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