2011-02-09 14 views
7

W mojej aplikacji RCP, chciałbym wskazać właściwość (osgi.java.profile) do pliku i wolałbym używać ścieżek względem mojego katalogu instalacji i konfiguracji.Konfiguracja Eclipse OSGI: względne ścieżki i/lub substytucje @ config.dir?

Czy istnieje określona specyfikacja dotycząca rodzaju zmiennych obsługiwanych w pliku config.ini?


@ config.dir wydaje się być wspierane, istnieją odniesienia w wbudowanego polecenia, a to zawsze wymieniane jako typowy przykład (np this SO answer) Jednak patrząc na docs jak Eclipse Pomoc/Runtime Options, wymienia kilka "symboliczne lokalizacje", takie jak @ user.home; jednak wydaje się to dość ograniczone i nie obejmuje @ config.dir.

Nawet wykopałem w źródłach org.eclipse.osgi i nie znalazłem żadnych odnośników do tego (znalazłem LocationManager i jego zmienne zmienne zmienne dla @ user.dir & co). Czy mogę w ten sposób odwoływać się do dowolnych właściwości systemu?

Czy ten @ config.dir jest szczególnym przypadkiem, obsługiwanym tylko przez P2? UPDATE: to wydaje się być w przypadku .. patrząc na Eclipse SDK, O .. pokazy dialogowe Konfiguracja @ config.dir nierozwiązany, prawdopodobnie dosłownie przez Equinox ..

Dzięki za wszelkie podpowiedzi.

+0

+1, a ja otwarcie bounty dla to pytanie. Naprawdę potrzebuję móc określić ścieżkę względem katalogu instalacyjnego, a nie obszaru konfiguracji dla pliku eclipse.p2.data.area w pliku config.ini. Jeśli ktoś może mi powiedzieć, jak to zrobić, zrób 200 powtórzeń! –

+0

@pelotom, dzięki za impuls - miejmy nadzieję ... Jestem całkiem przekonany, że moje pytanie nie ma dokładnej odpowiedzi (jest niewiarygodne, ale podstawienie wydaje się być w jądrze sztywne) .. Jednak, ponieważ wydajesz się być bardziej zainteresowany właściwość specyficzna dla P2, może być lepiej obsługiwana, tzn. @ config.dir wydaje się być specjalnie obsługiwane przez przetwarzanie konfiguracji P2 - może to nie jest jedyne. – inger

Odpowiedz

1

Od org.eclipse.core.runtime.adaptor.LocationManager, tutaj są specjalne tokeny:

// 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

Dzięki Chris - znalazłem tę samą listę (zobacz moje pytanie). Wydaje się to dość ograniczone - tak więc zastanawiałem się, czy coś przeoczyłem (np. Właściwości systemu lub sg w ten sposób). Po debugowaniu w ramach, nie wydaje się wiele nadziei. – inger

+0

Też zadaję podobne pytanie na grupie dyskusyjnej Equinox http://www.eclipse.org/forums/index.php?t=msg&goto=653500&S=2de0a18be29a148e02639f3968181b8e#msg_653500 - w oczekiwaniu na odpowiedź. – inger

+0

@inger: z kodu źródłowego wydawało się całkiem jasne, że są to jedyne obsługiwane opcje. –

1

Dlaczego nie użyć dwóch zmiennych własności systemu?

Jeden nazywa się -Dmy.relativepath=filename, który jest przetwarzany przez kod względnej ścieżki folderu instalacji zaćmienia (obszar roboczy lub w dowolnym miejscu), inny nazywa się -Dmy.path=absolutepath.

Właściwość systemowa jest przekazywana do jvm, potrzebna jest trochę trudna (przetłumaczyć zmienną w czasie wykonywania) w rodzimym launcherze (jak eclipse.exe), jeśli chcesz użyć zmiennej w swojej wartości.

+0

Oczywiście mogę wypróbować obejście, w którym tworzę właściwości, które powinien posiadać Eclipse, ale to wymagałoby co najmniej dodatkowego skryptu launchera, dodatkowych hacków. Po tym wciąż nie jestem pewien, czy mogę dotrzeć do tej właściwości w config.ini , jako część innych definicji własności. Co mnie tak naprawdę interesowało, czy istniała jakaś funkcja Eclipse, którą przeoczyłem. – inger

+1

@inger, to zdecydowanie trudna wersja p2. Możesz znaleźć @ config.dir zastępuje wartość właściwości szkieletu "osgi.configuration.area" w czasie wykonywania. Zobacz metodę org.eclipse.equinox.internal.p2.core.Activator.buildLocation (String, URI, boolean, boolean). Wartość właściwości systemowej jvm "eclipse.p2.data.area" zawsze wynosi "@ config.dir /../ p2". – Kane

1

Look jak osgi.java.profile został rozwiązany w 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); 
    } 

Oznacza to osgi.java.profile musi wskazywać albo na pełny adres URL lub ścieżkę względną w systemie wiązki (org.eclipse.osgi) . To uniemożliwia użycie ścieżki względnej katalogu instalacyjnego bez łatania Eclipse.

1

można użyć adresu URL platformy (Platform URI scheme), aby osiągnąć ten cel, tj

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

w config.ini, by wskazać plik java_profile.txt w bieżącym katalogu konfiguracyjnym.

Można również wykorzystać istniejące właściwości systemu w config.ini:

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

Sądzę, że to będzie pomocne - wypróbowanie tego jak najszybciej. Czy wiesz, czy to wsparcie zostało ostatnio dodane, czy działałoby w wersji 3.6.x? Ostatnim razem poddałem się i skończyłem z okropnymi ścieżkami absolutnymi. – inger

+0

@inger Tak, powinno działać na 3.6, przynajmniej zgodnie z [dokumentacją] (http://help.eclipse.org/helios/index.jsp) – tkotisis

3

jestem późno do partii, ale mam nadzieję, że to pomoże innym w przyszłości.

Począwszy od wersji Eclipse 3.8/4.2 (czerwiec 2012), możesz zastąpić właściwości Java i zmienne środowiskowe w pliku config.ini (Eclipse Bug 241192). Program uruchamiający Equinox nie obsługuje podstawiania w pliku programu uruchamiającego eclipse.ini. Składnia wykorzystuje znaki dolara ($ zmienna $), aby wskazać podstawienia zmiennej:

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

mogę sobie wyobrazić można użyć coś takiego dla swoich celów:

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

Działa dobrze z niektórymi zmiennymi, np 'osgi.install.area'. Inne zmienne, takie jak 'osgi.configuration.area', nie zostały rozwiązane. – Tobber