Документация Apache Karaf в основном расширяет терминологию спецификаций OSGi, что означает, что предполагается, что вы немного знакомы с OSGi.
Говоря о том, что упомянутые вами разные термины могут быть четко найдены вOSGi или Karaf.
Термины " Bundle ", " Dependency " и " Requirement " относятся к спецификации OSGi Core.Принимая во внимание, что «Feature» и «Prerequisite» являются специфическими терминами Apache Karaf.
Теперь к вашему списку:
Q: «prerequisite» не разрешает моему пакету «special-server»запускаться, когда другие пакеты (я бы назвал зависимости) недоступны в контейнере OSGi.
A: Прежде всего, обратите внимание, что «предварительное условие» не применяетсядля объединения зависимостей, только для создания зависимостей (кстати, ваш XSD устарел, взгляните на текущий XSD ), и да, это просто специализация зависимости.Для этого документация является довольно явной:
Если вы добавите обязательный атрибут к тегу зависимой функции, то это приведет к установке и активации пакетов в зависимой функции до установкиАктуальная функция.
Q: зависимости одинаковы
A: Да и нет.Поскольку «обязательные» зависимости по-прежнему являются просто зависимостями с другим поведением для жизненного цикла установки / активации функции, они по-прежнему просто описывают зависимости, но ведут себя немного по-другому.
Если вместо этого вы ссылаетесь на специальный атрибут взависимость пакета, например, <bundle dependency="true">...
, то это означает, что если пакет (с учетом допустимой версии, если он указан) уже доступен в системе, он не будет установлен снова.
Q: оба изэто не заставляет Karaf автоматически выбирать и запускать эти зависимости
A: В обоих случаях Karaf устанавливает зависимые функции и пакеты по мере необходимости.Запуск происходит либо раньше (с «обязательными» функциями), либо при установке функций (если вы не отключили это).
В: требования, в соответствии с документацией, заставят Karaf автоматически получить и запустить эти зависимости/prerequisites/requirements.
A: Если вы имеете в виду функцию " требования ", тогда да и нет.Да, потому что распознаватель попытается найти какую-то другую функцию или комплект, который соответствует требованию (это называется " Capability "), и установить его, если он найден.Если текущее состояние системы уже соответствует требованию, ничего не происходит, и функция может быть установлена сразу.Если для этого не найден пакет или функция, установка функции завершится неудачно.Нет, потому что они не будут немедленно начаты.Запуск происходит при запуске самой функции.
В: репозитории находятся в моем файле functions.xml, чтобы разработчики знали, где можно найти зависимости / предварительные требования / требования, но не добавляются автоматически в Karaf.
A: Очевидно, нет.Вы добавляете репозитории, чтобы дать возможность распознавателю Karaf знать, где найти определение зависимых функций, а не пакетов.Если в вашем определении нет зависимостей от других функций, нет смысла добавлять репозиторий. документация предоставляет более подробную информацию.
TL; DR
Вы жалуетесь на документацию, но вы путаете терминологию самостоятельно и тем самымВы можете оказаться в ложных предположениях или ожиданиях.Но я согласен, что в некоторых деталях терминология Карафа могла бы быть лучше и более интуитивно понятна.
Относительно вашего features.xml
:
- Пожалуйста, обновите схему до
v1.3.0
<features xmlns="http://karaf.apache.org/xmlns/features/v1.3.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://karaf.apache.org/xmlns/features/v1.3.0
http://karaf.apache.org/xmlns/features/v1.3.0"
name="special-server-features">
Если вы хотите установить Apache Camel и CXF, вы просто устанавливаете функции, а не пакеты, например:
<feature name="special-server" version="1.0.0" install="auto" resolver="(obr)">
<feature>camel-blueprint</feature>
...
</feature>
Ваше объявление
<bundle>
зависимостей просто неверно. Вы указали функции, а не комплекты.
Нет атрибута
prerequisite
для тега
<bundle>
и никогда не было (пожалуйста, придерживайтесь XSD)
<repository>
может быть объявлено только на верхнем уровне, но не внутри функции (также нарушает XSD)
Пример функций репозитория
На основе вашего примера я скомпилировал пример репозитория функций, включающий комментарии, чтобы попытаться прояснить вопросы немного более практично:
<?xml version="1.0" encoding="UTF-8"?>
<features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.4.0 http://karaf.apache.org/xmlns/features/v1.4.0"
name="special-server-features">
<!-- Required feature repositories -->
<!-- We don't need to define this since Apache Camel already does it
<repository>mvn:org.apache.cxf.karaf/apache-cxf/3.3.1/xml/features</repository>
-->
<repository>mvn:org.apache.camel.karaf/apache-camel/3.0.0.M2/xml/features</repository>
<!-- Special Server -->
<feature name="special-server" version="1.0.0" install="auto">
<!--
Require Java 8 at least.
-->
<requirement>osgi.ee;filter:="(&(osgi.ee=JavaSE)(version>=1.8))"</requirement>
<!--
Every <feature> declares a dependency to another feature declaration
(either available in this <features> repository or an external one.
The dependency is bascially made up by referencing the "name" of
another <feature> declaration.
dependency="true"
the feature will not be installed if already available
prerequisite="true"
the feature will be installed before ours and all bundles will
be started
-->
<feature dependency="true" prerequisite="true">cxf</feature>
<feature prerequisite="true">camel-core</feature>
<feature prerequisite="true">camel-cxf</feature>
<!--
These features will just be installed as part of installing the
current feature.
-->
<feature>camel-blueprint</feature>
<feature>camel-jackson</feature>
<feature>camel-http4</feature>
<feature>camel-jaxb</feature>
<feature>camel-jsch</feature>
<feature>camel-stream</feature>
<!--
Every <bundle> declares a dependency to a standard OSGi Bundle using
a URL including a protocol to uniquely identify the artifact.
For Apache Karaf the most common protocol is to rely on Maven:
https://ops4j1.jira.com/wiki/spaces/paxurl/pages/3833866/Mvn+Protocol
Here, you also need to know that Apache Karaf also provides an
internal Maven repository which is asked first and contains all
Bundles that are already installed. This Maven repository usually
exists at the Karaf installation sub-directory "system".
-->
<!--
This bundle needs to be available, but we certainly don't want to
"wrap" it again if it is already there.
See also: https://ops4j1.jira.com/wiki/spaces/paxurl/pages/3833898/Wrap+Protocol
-->
<bundle dependency="true">wrap:mvn:org.minidns/minidns-core/0.3.3</bundle>
<!--
Now this is our own bundle which requires all of the above to do
it's work properly.
-->
<bundle>mvn:com.mycorp.servers/special-server/1.0.0</bundle>
</feature>
</features>