2009-01-30 18 views
7

Tôi đang làm việc trên một dự án SWT như một phần của một nhóm. Chúng tôi đang liên tục phá vỡ mỗi người khác xây dựng môi trường vì Eclipses .classpath tập tin được kiểm tra vào kiểm soát phiên bản và chúng tôi bao gồm các thư viện SWT khác nhau cho các máy của chúng tôi.Làm cách nào tôi có thể chỉ định mục nhập .classpath Eclipse cho nền tảng O/S cụ thể?

Tùy thuộc vào người cam kết cuối cùng, mục classpath có thể là:

<classpathentry kind="lib" path="lib/swt/swt-win32.jar"/> 

hoặc

<classpathentry kind="lib" path="lib/swt/swt-carbon.jar"/> 

hoặc

<classpathentry kind="lib" path="lib/swt/swt-gtk.jar"/> 

Dường như các thư viện là loại trừ lẫn nhau, tức là bạn không thể gộp chúng cùng một lúc và để SWT làm việc. Vì vậy, chúng tôi cần lọc chúng theo từng nền tảng bằng cách nào đó ...

Có ai có ý tưởng nào về cách thực hiện điều này không? Ý tưởng ban đầu của tôi là chia nó thành tệp ".classpath-swt" của riêng nó (được bỏ qua bởi VCS), tự động tạo nó bằng cách sử dụng Ant và bao gồm nó trong lớp con chính. Nhưng có vẻ Eclipse không hỗ trợ chia nhỏ tệp .classpath. Công việc hiện tại của chúng tôi là tránh cam kết .classpath trừ khi chúng tôi đã thực sự thay đổi các phụ thuộc, tuy nhiên điều này vẫn có nghĩa là một số người phải sửa môi trường phát triển của họ mỗi lần .classpath được thay đổi.

Bất kỳ đề nghị sẽ được nhiều đánh giá cao, miễn là nó không phải là "không sử dụng Eclipse" như thế này không phải là một lựa chọn cho dự án này :)

Trả lời

9

Eclipse sẽ cho phép bạn xác định các biến classpath vì vậy bạn có thể giữ .classpath giống nhau, nhưng mỗi nhà phát triển sẽ cấu hình Eclipse của mình theo nền tảng. Sau đó bạn có thể phiên bản tệp .classpath. Bạn sẽ phải thay đổi cấu trúc thư mục của nơi bạn lưu trữ các lọ SWT của bạn đến một cái gì đó mà tên jar không thay đổi trên mỗi nền tảng. Menu này có thể được tìm thấy trong: "Window-> Preferences-> Java-> Build Path"

SWTJARDIRECTORY/ 
    WIN32/ 
     SWT.JAR 
    CARBON/ 
     SWT.JAR 
    GTK/ 
     SWT.JAR 

Ex.

SWT_PLATFORM="SWTJARDIRECTORY/GTK", set by developer in Eclipse 

classpath

SWT_PLATFORM/SWT.JAR 
+0

Đó chính xác là những gì tôi đang tìm kiếm, cảm ơn! – seanhodges

+0

tính năng này trông như thế nào trong XML? Sẽ rất hữu ích cho những người khác thấy việc sử dụng thực tế biến trong XML (và giúp bạn tiết kiệm thời gian để nghiên cứu cách nhật thực phân tích các biến XML) – Gubatron

+0

Có vẻ như bạn cần "Mở rộng" một biến (Đường dẫn xây dựng Java) > Thêm biến> Mở rộng) để sử dụng nó trong đường dẫn xây dựng của bạn. XML của bạn sẽ có loại được đặt thành var: '' – idbrii

0

Làm thế nào về chỉ đơn giản là cấu hình các trường hợp riêng của bạn và cho một thành phần của môi trường của bạn, bạn không giữ nó trong kiểm soát nguồn của bạn? Ngoài ra, bạn có thể lưu trữ một tệp classpath cho mỗi môi trường, có lẽ trong một thư mục khác và trong tệp tin kiến ​​thức, bạn có thể chỉ cần có một mục tiêu cho mỗi môi trường sao chép một tệp chính xác. Để giữ một bản sao của điều này trong kiểm soát nguồn bạn phải chắc chắn để sao chép nó trở lại khi nó được cập nhật.

1

Bạn nên có các thư viện này trong một dự án riêng biệt, dễ nhận dạng thay vì được đặt trong từng dự án.

Ví dụ: tạo ra một dự án có tên là "00-swt-provider" (để nó đi lên trên) và để nó tham khảo một trong "00-swt-provider-carbon", "00-swt-provider-win32" hoặc "00-swt-provider -gtk ".

Một trong hai thư viện gốc này xuất các thư viện gốc thích hợp cho nền tảng đã cho và liên kết duy nhất nằm trong nhà cung cấp dịch vụ theo dõi. Dự án thực tế chỉ tham khảo dự án meta này.

Chúng tôi sử dụng một biến thể của nội bộ này - nó hoạt động tốt cho chúng tôi.

+0

Đây là ý tưởng hay nếu bạn có nhiều dự án, vì bạn có thể đặt SWT của mình phụ thuộc vào tất cả các dự án trong một bước. Nhưng chúng tôi chỉ có một dự án phụ thuộc vào SWT, điều này có nghĩa là tăng số lượng các dự án từ 1 lên 5. Tôi nghĩ biến classpath là một giải pháp neater cho việc này. – seanhodges

0

SWT thực hiện điều này bằng cách không phiên bản tệp .classpath, nhưng theo phiên bản nhiều tệp .classpath_ * riêng biệt với hệ điều hành và hệ thống cửa sổ được nối, ví dụ: .classpath_win32_win32. Vì vậy, khi bạn kiểm tra các nguồn từ kho lưu trữ, bạn sẽ phải sao chép tệp classpath thích hợp vào .classpath và biên dịch lại dự án của bạn.

+0

Xem nhận xét của @ basszero về giải pháp gọn gàng. Chúng tôi coi nhiều .classpaths nhưng quyết định rằng nó sẽ dẫn đến rất nhiều tiềm năng để phá vỡ, như ai đó trên một nền tảng có thể thêm một cái gì đó để classpath của họ để lại những người khác đã lỗi thời. – seanhodges