2011-02-09 70 views
7

Trong ứng dụng RCP của tôi, tôi muốn trỏ một thuộc tính (osgi.java.profile) vào một tệp và muốn sử dụng các đường dẫn liên quan đến cài đặt và thư mục cấu hình của tôi.Cấu hình Eclipse OSGI: các đường dẫn tương đối và/hoặc các thay thế giống như @ config.dir?

Có thông số chính xác về loại biến nào được hỗ trợ trong config.ini không?


@ config.dir dường như được hỗ trợ, có tài liệu tham khảo trong dựng sẵn, và nó luôn được nhắc đến như một ví dụ điển hình (ví dụ this SO answer) Tuy nhiên, nhìn vào tài liệu như Eclipse help/Runtime Options, nó đề cập đến một vài "vị trí tượng trưng" như @ user.home; tuy nhiên điều đó có vẻ khá hạn chế và không bao gồm @ config.dir.

Thậm chí đã đào vào các nguồn org.eclipse.osgi và không tìm thấy tham chiếu đến điều này (tôi đã tìm thấy Trình quản lý vị trí và các thay thế biến mã cứng của nó cho @ user.dir & co). Tôi có thể tham khảo các thuộc tính hệ thống tùy ý theo cách nào đó không?

Đây có phải là @ config.dir một trường hợp đặc biệt, chỉ được xử lý bởi P2 không? CẬP NHẬT: điều này có vẻ là trường hợp .. xem Eclipse SDK, Giới thiệu .. Hộp thoại cấu hình hiển thị @ config.dir chưa được giải quyết, có thể được thực hiện theo nghĩa đen .. Equalx ..

Cảm ơn mọi gợi ý.

+0

+1 và tôi mở một bounty cho câu hỏi này. Tôi thực sự cần để có thể chỉ định một đường dẫn liên quan đến thư mục cài đặt, chứ không phải là khu vực cấu hình, cho eclipse.p2.data.area trong config.ini của tôi. Nếu bất cứ ai có thể cho tôi biết làm thế nào để làm điều đó, có 200 đại diện! –

+0

@pelotom, cảm ơn vì sự tăng trưởng - hãy hy vọng .. Tôi thực sự khá thuyết phục câu hỏi của tôi không có câu trả lời chính xác (không thể tin được nhưng sự thay thế có vẻ như đã được khắc phục trong lõi) .. Tuy nhiên, vì bạn có vẻ quan tâm hơn một đặc tính P2 cụ thể, nó có thể được hỗ trợ tốt hơn, tức là @ config.dir dường như được xử lý đặc biệt bởi quá trình xử lý cấu hình P2 - có thể đó không phải là duy nhất. – inger

Trả lời

1

Từ org.eclipse.core.runtime.adaptor.LocationManager, sau đây là các thẻ đặc biệt:

// Data mode constants for user, configuration and data locations.                       
    private static final String NONE = "@none"; //$NON-NLS-1$                         
    private static final String NO_DEFAULT = "@noDefault"; //$NON-NLS-1$                       
    private static final String USER_HOME = "@user.home"; //$NON-NLS-1$                       
    private static final String USER_DIR = "@user.dir"; //$NON-NLS-1$                       
+0

Cảm ơn Chris -I đã tìm thấy cùng một danh sách đó (xem câu hỏi của tôi). Nó có vẻ khá hạn chế - vì vậy đã tự hỏi nếu tôi bị mất một cái gì đó (ví dụ như thuộc tính hệ thống hoặc sg như thế). Sau khi gỡ lỗi thông qua khuôn khổ, dường như không có nhiều hy vọng. – inger

+0

Tôi cũng đã hỏi một câu hỏi tương tự trên nhóm tin tức Equinox http://www.eclipse.org/forums/index.php?t=msg&goto=653500&S=2de0a18be29a148e02639f3968181b8e#msg_653500 - đang chờ câu trả lời. – inger

+0

@inger: nó có vẻ khá rõ ràng từ mã nguồn mà đó là những lựa chọn duy nhất được hỗ trợ. –

1

Tại sao không sử dụng hai biến sở hữu hệ thống?

Một tên là -Dmy.relativepath=filename, được xử lý bởi mã của bạn đường dẫn tương đối của thư mục cài đặt nhật thực (không gian làm việc hoặc ở bất kỳ đâu), tên khác được gọi là -Dmy.path=absolutepath.

Thuộc tính hệ thống được chuyển đến jvm, bạn cần một số mẹo (dịch biến trong thời gian chạy) trong trình khởi chạy gốc (như eclipse.exe) nếu bạn muốn sử dụng biến trong giá trị của nó.

+0

Tất nhiên tôi có thể thử một cách giải quyết nơi tôi tạo các thuộc tính mà Eclipse cần có, nhưng ít nhất cũng sẽ yêu cầu thêm một kịch bản trình khởi chạy, thêm các dấu gạch ngang .. Sau này tôi vẫn không chắc mình có thể tiếp cận được thuộc tính đó trong config.ini , như một phần của các định nghĩa thuộc tính khác .. Điều tôi thực sự quan tâm nếu có một số tính năng Eclipse để làm điều này mà tôi đã bỏ lỡ. – inger

+1

@inger, nó chắc chắn là một p2 phức tạp. Bạn có thể tìm thấy @ config.dir được thay thế bằng giá trị của thuộc tính framework 'osgi.configuration.area' trong thời gian chạy. Xem phương thức org.eclipse.equinox.internal.p2.core.Activator.buildLocation (Chuỗi, URI, boolean, boolean). Giá trị của thuộc tính hệ thống của jvm 'eclipse.p2.data.area' luôn là '@ config.dir /../ p2'. – Kane

1

Nhìn cách osgi.java.profile được giải quyết trong org.eclipse.osgi.framework.internal.core.Framework:

// check for the java profile property for a url 
String propJavaProfile = FrameworkProperties.getProperty(Constants.OSGI_JAVA_PROFILE); 
if (propJavaProfile != null) 
    try { 
     // we assume a URL 
     url = new URL(propJavaProfile); 
    } catch (MalformedURLException e1) { 
     // try using a relative path in the system bundle 
     url = findInSystemBundle(propJavaProfile); 
    } 

Điều đó có nghĩa osgi.java.profile phải chỉ một trong hai đến một URL đầy đủ, hoặc một đường dẫn tương đối trong bó hệ thống (org.eclipse.osgi) . Điều này làm cho việc sử dụng đường dẫn tương đối của thư mục cài đặt không thể mà không cần vá Eclipse.

1

Bạn có thể sử dụng một URL nền tảng (Platform URI scheme) để đạt được điều này, ví dụ:

osgi.java.profile = platform:/config/java_profile.txt 

trong config.ini, sẽ trỏ đến file java_profile.txt trong thư mục cấu hình hiện tại.

Bạn cũng có thể sử dụng thuộc tính hệ thống hiện có trong config.ini:

osgi.java.profile = ${osgi.configuration.area}/java_profile.txt 
+0

Tôi đoán điều này sẽ hữu ích - hãy thử ASAP. Bạn có biết nếu hỗ trợ này được thêm gần đây, nó có hoạt động trong 3.6.x không? Thời gian qua tôi đã từ bỏ và kết thúc với những con đường tuyệt đối khó chịu .. – inger

+0

@inger Có, nó sẽ làm việc cho 3.6, ít nhất là theo [tài liệu] (http://help.eclipse.org/helios/index.jsp) – tkotisis

3

Tôi muộn để đảng, nhưng hy vọng điều này sẽ giúp những người khác trong tương lai.

Bắt đầu với Eclipse 3.8/4.2 (tháng 6 năm 2012), bạn có thể thay thế các thuộc tính Java và các biến môi trường vào tệp config.ini của bạn (Eclipse Bug 241192). Trình khởi chạy Equinox không hỗ trợ thay thế trong tệp trình chạy eclipse.ini. Cú pháp sử dụng dấu hiệu đô la ($ BIẾN $) để chỉ thay biến:

osgi.configuration.area=$APPDATA$/MyCompany/MyProgram/configuration 
osgi.user.area=$APPDATA$/MyCompany/MyProgram/user 
osgi.instance.area=$APPDATA$/MyCompany/MyProgram/instance 

Tôi tưởng tượng bạn có thể sử dụng một cái gì đó như thế này cho mục đích của bạn:

osgi.java.profile=$osgi.install.area$/path/to/profile.txt 
+0

Hoạt động tốt với một số biến, ví dụ 'osgi.install.area'. Các biến khác như 'osgi.configuration.area' không được giải quyết. – Tobber

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