Eclipse Preference store персистентность - PullRequest
12 голосов
/ 08 октября 2009

У меня есть приложение RCP для нескольких пользователей / местоположений, которое в настоящее время использует несколько настраиваемых пользователем опций. Некоторые предпочтения относятся к конкретной станции, некоторые - к пользователю.

Опции из хранилища настроек, в котором файлы * .prefs сохраняются в "workspace.metadata.plugins \ org.eclipse.core.runtime.settings".

Это было бы хорошо, если бы мы использовали только одну машину / пользователя. Но если бы пользователь перешел на другую станцию, он использовал бы любые настройки, настроенные для этой станции.

Можно ли указать другую форму для сохранения (не файлы)?

Ответы [ 4 ]

9 голосов
/ 08 октября 2009

Согласно eclipse wiki , настройки основаны на файлах и хранятся:

  • для каждой установки (но это может отличаться для многопользовательских установок) в файлах, хранящихся в <eclipse_home>/eclipse/configuration/.settings/.
    На каждый плагин обычно есть один файл с расширением .prefs.
    Обратите внимание, что очень немногие плагины используют настройки всей установки.
  • для каждого рабочего пространства, в файлах, хранящихся в <workspace>/.metadata/.plugin/org.eclipse.core.runtime/.settings.
    Обычно для каждого плагина существует один файл с расширением .prefs.
  • для каждого проекта - для настроек уровня проекта - в файлах, хранящихся в подкаталоге .settings папки вашего проекта

Так что, если опция файла здесь, чтобы остаться, вам может понадобиться:

  • либо экспортировать / повторно импортировать настройки сеанса вручную в пользовательский каталог (утомительно)
  • или создайте какой-нибудь автоматизированный механизм:
    • для экспорта настроек в реестр пользователя (HKEY_CURRENT_USER/Software/MyRCP/...) при выходе из приложения и
    • чтобы импортировать их, прочитав эти ключи реестра и переопределив файлы .prefs в локальной директории workspace.metadata.plugins\org.eclipse.core.runtime.settings
  • или поделитесь этими настройками через какую-то пользовательскую ссылку (оболочка вокруг запуска RCP будет отвечать за создание правильной ссылки, даже в Windows с соединениями , например)
8 голосов
/ 27 ноября 2009

Похоже, вам нужно хранить ваши предпочтения в центральном месте, доступном для всех пользователей / машин. Это означает, что вы должны реализовать свой собственный IPersistentPreferencesStore. Затем вы можете переопределить org.eclipse.jface.preference.PreferencePage#doGetPreferenceStore(), чтобы использовать его.

Большой вопрос - как реализовать это центральное хранилище настроек, но это зависит от технологий, которые вы используете. В общем, если ваш проект использует центральный сервер, вы, вероятно, должны хранить свои настройки там. Например, если ваш проект уже использует реляционную базу данных, одним из решений будет создание соответствующих таблиц базы данных и реализация IPersistentPreferencesStore для доступа к этим таблицам через JDBC.

5 голосов
/ 26 ноября 2009

Вы должны прочитать о многопользовательских установках

В нашем случае мы отделили индивидуальные предпочтения от конфигурации приложения, установив в config.ini следующее:

osgi.instance.area=@user.home/Application Data/earthrise
osgi.configuration.area=@user.home/Local Settings/Application Data/earthrise/144/configuration
osgi.sharedConfiguration.area=c:/program files/earthrise/configuration
osgi.configuration.cascaded=true

Результатом этого является то, что любые настройки, заданные пользователем, сохраняются в его перемещаемом профиле, но данные конфигурации конкретного приложения хранятся в локальных настройках.

Это не решает проблему наличия пользовательских настроек, специфичных для конкретной рабочей станции, но позволяет каждому пользователю иметь свои собственные предпочтения.

Подвох в этом заключается в том, что файл журнала ошибок затмения будет храниться в области экземпляров и переноситься в их перемещаемом профиле - не совсем то, что вам нужно. Вы можете кодировать это в плагине. Смотрите обходной путь на Eclipse Bugzilla - поиск 256502

0 голосов
/ 04 мая 2011

Просто мысль!

Поскольку метод PreferenceStore load () выполняет следующие действия:

public void load() throws IOException {
    FileInputStream in = new FileInputStream(filename);
    load(in);
    in.close();
}

и вы можете создать PreferenceStore

PreferenceStore(String filename)

или задайте имя файла

public void setFilename(String name) {
    filename = name;
}

возможно, вы сможете "взломать" имя файла в каком-либо месте на общем сервере (или, возможно, в общей домашней папке пользователя) ...

...