От новичка до гуру: Курсы программирования на CyberDuff

Исправить / объединить файл plugin.properties в плагине с помощью фрагмента

В моем плагине de.support.help находятся файлы plugin.properties. Эти файлы свойств включают строки для страницы настроек.

Я хочу использовать этот плагин для разных клиентов, но имя клиента находится в файлах свойств.

Я хочу исправить файлы свойств, используя механизм фрагмента eclipse. Насколько я знаю, плагин фрагмента может исправлять соответствующий плагин во время выполнения.

У меня есть файл plugin.properties в плагине de.support.help, который включает строку

plugin.name = Copyright XYZ

И у меня есть fragemt de.support.help.fragment, который включает файл plugin.properties со строкой

plugin.name = Copyright ABC

Я ожидаю, что во время выполнения будет показана строка «Copyright ABC», но это не так. Я уже давно тестировал то же самое с java-классами, и я помню, что он работал. Код Java из фрагмента был помещен в исходный плагин.

У вас есть идея как с этим справиться? Или я неправильно понимаю механизм фрагментации?

Спасибо

РЕДАКТИРОВАТЬ:

Когда я удаляю файл plugin.properties из подключаемого модуля de.support.help, он работает должным образом. Файл фрагмента копируется в каталог плагина и используется во время выполнения.

Или мне нужно исправить класс somce eclipse Can_fragments_be_used_to_patch_a_plug


Ответы:


1

Согласно Как интернационализировать ваш подключаемый модуль Eclipse < / a> статья

Фрагмент подключаемого модуля обеспечивает дополнительные функциональные возможности для своего целевого подключаемого модуля.
Во время выполнения эти подключаемые модули объединяются вместе со всеми зависимыми фрагментами.

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

Другими словами, подключаемый модуль имеет доступ к содержимому фрагмента через загрузчик классов подключаемого модуля.

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

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


Я подозреваю, что classLoader обнаруживает plugin.name в de.support.help плагине перед фрагментом de.support.help.fragment.

На данный момент я не уверен, что это можно сделать, поскольку это уже предпринималось ранее (для плагин Eclipse CheckStyle), но без особого успеха.

18.03.2009
  • Похоже, это невозможно с файлами ресурсов. Но с классами Java это работает. Может быть, я смогу исправить загрузчик пакетов eclipse, чтобы сначала смотреть во фрагмент, а затем в плагин. 18.03.2009

  • 2

    Реализованное мной решение похоже на

    Сначала найдите специальный файл свойств фрагмента, а затем файл свойств по умолчанию.

    Код (названия пакетов были изменены)

    public final class FrameworkMessages {
        private static final String BUNDLE_NAME = "de.rts.messages"; //$NON-NLS-1$
    
        private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
    
        private static final String BUNDLE_FRAGMENT_NAME = "de.rts.fragment"; //$NON-NLS-1$
    
    
        private FrameworkMessages() {
        }
    
        public static String getString(String key) {
            try {
                return ResourceBundle.getBundle(BUNDLE_FRAGMENT_NAME).getString(key);
            } catch (MissingResourceException e) {
                // Use messages in this plugin when no external fragment files can found
            }
    
            try {
                return RESOURCE_BUNDLE.getString(key);
            } catch (MissingResourceException e) {
                return '!' + key + '!';
            }
        }
    
        public static String getString(String pKey, Object[] pArgument) {
            try {
                return MessageFormat.format(RESOURCE_BUNDLE.getString(pKey), pArgument);
            } catch (MissingResourceException e) {
                return '!' + pKey + '!';
            }
        }
    }
    
    28.06.2011

    3

    Вы не можете заменить содержимое файла фрагментом - только добавьте дополнительные файлы. Это верно как для классов, так и для файлов свойств, изображений и т. Д.

    Есть несколько стандартных методов решения этой проблемы:

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

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

    28.06.2011
    Новые материалы

    Прогрессивная транспиляция
    В последние годы программисты JavaScript (он же EcmaScript) часто используют компиляторы исходного кода , также известные как транспиляторы , для преобразования более усовершенствованной или..

    Алиса в стране машинного обучения — инициатива «100 дней кода машинного обучения»
    Covnets, регрессия, классификация, ReLU, предвзятость… — все это интригующие жаргоны, которые я слышал от своих сверстников, выбравших курс машинного обучения, по касательной во время обычного..

    Иногда учитель, всегда ученик
    Учение Йоды в применении к развитию разработчиков «Делай или не делай. Нет никакой попытки.” Обучение программированию превратилось в современное «создание группы» или «написание книги»...

    Как создать файл конфигурации сборки в Xcode | Серия настроек проекта Xcode
    Эта статья шаг за шагом расскажет вам, как создать новый файл конфигурации сборки в вашем проекте Xcode. Что такое файл конфигурации сборки? Файл конфигурации сборки — это обычный..

    Venv против Virtualenv в Python  — что использовать?
    Когда дело доходит до создания виртуальных сред в Python, есть два популярных варианта: venv и virtualenv. Оба инструмента служат одной цели — созданию изолированных сред для ваших проектов..

    Реализация персептрона на Python (для абсолютных новичков)
    Введение За последние пару десятилетий было довольно много шумихи вокруг искусственного интеллекта и его приложений. В этой статье мы обсудим, что такое искусственный интеллект и его основное..

    С помощью javascript мы можем сделать это в одну строку.
    С помощью javascript мы можем сделать это в одну строку. let x = 5; let y = 7; y = [x, x = y][0]; Но то, что мы можем , не обязательно означает, что мы должны это делать.