Eclipse OSGI config: относительные пути и / или @ config.dir-подобные замены? - PullRequest
7 голосов
/ 09 февраля 2011

В моем приложении RCP я хотел бы указать свойство (osgi.java.profile) на файл и предпочел бы использовать пути относительно моего каталога установки и конфигурации.

Есть ли точные спецификации длякакие переменные поддерживаются в config.ini?


@config.dir, кажется, поддерживается, есть ссылки во встроенном, и это всегда упоминается как типичный пример (например, этот ответ SO) Однако, глядя на документы, такие как Eclipse help / Параметры времени выполнения , в нем упоминается несколько «символических мест», таких как @ user.home;однако это кажется довольно ограниченным и не включает @ config.dir.

Я даже копался в org.eclipse.osgi источниках и не нашел ссылок на это (я нашел LocationManager и его жестко закодированные замены переменных для@ user.dir & co).Могу ли я как-то ссылаться на произвольные системные свойства?

Является ли этот @ config.dir особым случаем, который обрабатывается только P2? ОБНОВЛЕНИЕ: похоже, что это так ... глядя на Eclipse SDK, О программе ... Диалог конфигурации показывает @ config.dir неразрешенным, вероятно, воспринятым Равноденствием буквально.намеки.

Ответы [ 5 ]

3 голосов
/ 16 января 2014

Я опаздываю на вечеринку, но, надеюсь, это поможет другим в будущем.

Начиная с Eclipse 3.8 / 4.2 (июнь 2012 г.), вы можете заменить свойства Java и переменные среды в вашей конфигурации.INI-файл ( Eclipse Bug 241192 ).Средство запуска Equinox не поддерживает подстановку в файле средства запуска eclipse.ini.Синтаксис использует знаки доллара ($ VARIABLE $) для обозначения подстановки переменных:

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

Я думаю, вы могли бы использовать что-то подобное для своих целей:

osgi.java.profile=$osgi.install.area$/path/to/profile.txt
1 голос
/ 15 февраля 2012

Для этого можно использовать URL-адрес платформы ( Схема URI платформы ), т. Е.

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

в config.ini будет указывать на файл java_profile.txt в текущемкаталог конфигурации.

Вы также можете использовать существующие системные свойства в config.ini:

osgi.java.profile = ${osgi.configuration.area}/java_profile.txt
1 голос
/ 07 июня 2011

Почему бы не использовать две системные переменные свойства?

Один с именем -Dmy.relativepath=filename, который обрабатывается вашим кодом относительного пути к папке установки eclipse (рабочая область или где-либо еще), другой называется -Dmy.path=absolutepath.

Системное свойство передается в jvm, вам нужно немного хитрости (перевести переменную во время выполнения) в собственный модуль запуска (например, eclipse.exe), если вы хотите использовать переменную в ее значении.

1 голос
/ 10 июня 2011

Посмотрите, как файл osgi.java.profile разрешен в 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);
    }

Это означает, что osgi.java.profile должен указывать либо на полностью определенный URL, либо на относительный путь в системном комплекте (org.eclipse.osgi). Это делает невозможным использование относительного пути каталога установки без исправления Eclipse.

1 голос
/ 10 февраля 2011

Из org.eclipse.core.runtime.adaptor.LocationManager вот специальные токены:

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