Необязательная зависимость хоста не доступна во фрагменте
Мой плагин хоста объявляет необязательную зависимость от другого плагина. При сборке фрагмента к моему плагину хоста необязательный плагин не может быть найден Tycho. Это означает, что я получаю ошибки компиляции, так как классы из необязательной зависимости не могут быть разрешены.
Если я уберу необязательный флаг в плагине хоста, сборка Tycho будет работать нормально. Я использую Maven 3.0.4 и Tycho 0.15.0.
2 ответа
Я не знаю, действительно ли это ошибка в Tycho, или, скорее, из-за дизайна.
Это фон наблюдаемого поведения: Tycho стремится выполнять разрешение зависимостей так же, как это делает p2 при установке вашего пакета. Когда вы объявляете необязательную зависимость для комплекта, этот комплект не будет установлен p2 (если какой-либо другой комплект или функция не имеет необязательной зависимости от этого комплекта). Таким образом, следуя этому правилу, Tycho также не будет учитывать эту необязательную зависимость во время разрешения зависимостей и вычисления пути к классам.
Тем не менее, есть переключатель, чтобы отклониться от поведения по умолчанию p2 (в target-platform-configuration
вариант конфигурации dependency-resolution/optionalDependencies
):
- Со значением
require
все необязательные зависимости текущего пакета обрабатываются как требуется во время компиляции. Так как это то, что вы обычно хотите, это по умолчанию. - Со значением
ignore
все необязательные зависимости текущего пакета игнорируются во время компиляции.
Обратите внимание, что эта специальная обработка применяется только к необязательным зависимостям текущего пакета, а не к другим пакетам в цепочке зависимостей. Пакеты хостов в настоящее время обрабатываются как любая другая зависимость, мы можем рассмотреть их обработку специально при создании фрагмента.
У вас есть следующие варианты для обхода проблемы:
- Также добавьте необязательную зависимость в манифест фрагмента. Самый простой способ сделать это - использовать текстовый редактор. Строго говоря, это правильно: фрагмент действительно должен объявлять свои собственные зависимости, а не полагаться на объявления в другом месте. Но так как PDE не требует от вас этого, сомнительно, если Tycho должен.
- Добавьте явную зависимость только во время компиляции во фрагмент через опцию jars.extra.classpath в build.properties.
Я нашел обходной путь. Я удалил необязательный плагин в плагине хоста и добавил его к фрагменту через Manifest-Editor. После этого я перечитал его в плагин хоста и снова объявил его необязательным. (Если плагин уже объявлен в плагине хоста, вы не можете увидеть его во фрагменте через кнопку добавления редактора манифестов) Но я думаю, что это ошибка в Tycho. Необязательные зависимости также должны быть доступны во фрагментах, как в затмении.