Проблемы с начальными уровнями для комплектов консолей gogo
Я только что перенес старый проект OSGi в текущую версию равноденствия (Kepler SR1). При использовании консоли gogo я столкнулся с проблемой при запуске комплектов gogo с начальным уровнем 1 (это я обычно делаю со всеми соответствующими комплектами фреймворков). Консоль gogo не запускается, хотя все четыре пакета активны и работают. Ввод справки приведет к исключению NullPointerException. Решение состоит в том, чтобы запустить все пакеты gogo с начальным уровнем по умолчанию. Я что-то пропустил или это просто случай плохого дизайна жизненного цикла комплекта? Связки не должны зависеть от начальных уровней, чтобы работать.
Майк
2 ответа
Я нашел причину исключения:
Мы используем несколько старых командных провайдеров. Кажется, есть ошибка в пакете equinox.console при печати справки для устаревших команд. Кажется, что набор legacyCommandProviders в классе org.eclipse.equinox.console.commands.HelpCommand содержит нулевые записи (по любым причинам), которые приводят к исключению. Это происходит только иногда. Кажется, нам нужно преобразовать наши устаревшие команды...:-(
Можно запустить Equinox и запустить все комплекты с начальным уровнем 1. Использование следующей конфигурации запуска работает, как и ожидалось:
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -console -clean"/>
<stringAttribute key="target_bundles" value="org.apache.felix.gogo.command@1:true,org.apache.felix.gogo.runtime@1:true,org.apache.felix.gogo.shell@1:true,org.eclipse.equinox.console@1:true,org.eclipse.osgi@-1:true"/>
Имейте в виду, что Eclipse кеширует много вещей с запусками своего продукта, и очень часто могут появляться ошибки в силу того факта, что он не избавляется от рабочего пространства между запусками. Иногда это может вызвать ошибки, подобные той, что вы видели выше. Вы можете удалить конфигурацию запуска, которая также очистит связанные папки, а затем снова добавить ее обратно.
Чтобы убедиться, что это работает должным образом, создайте новую конфигурацию времени выполнения в качестве OSGi Framework и добавьте четыре пакета с начальным уровнем 1 и автоматическим запуском true.
Обратите внимание, что org.eclipse.osgi
bundle является пакетом фреймворка и должен иметь начальный уровень -1, чтобы указывать значение по умолчанию; возможно, это проблема, которую вы видите.