15.9. 置备

Apache Karaf 支持使用 Karaf Features 的概念来调配应用程序和模块。

15.9.1. Application

通过配置应用程序,它意味着安装所有模块、配置和传输的应用程序。

15.9.2. OSGi

它原生支持部署 OSGi 应用程序。

OSGi 应用程序是一组 OSGi 捆绑包。OSGi 捆绑包是一个常规 jar 文件,它带有 jar MANIFEST 中的附加元数据。

在 OSGi 中,捆绑包可以依赖于其他捆绑包。因此,这意味着,在大多数时候部署 OSGi 应用程序,您首先需要部署应用程序所需的大量其他捆绑包。

因此,您必须首先找到这些捆绑包,安装捆绑包。同样,这些"独立"捆绑包可能需要其他捆绑包来满足自己的依赖项。

更深入,应用程序还需要配置(请参阅用户指南的 [Configuration section|configuration])。因此,在启动应用程序之前,除了依赖项捆绑包外,您必须创建或部署配置。

正如我们所见,应用程序的调配可能非常长且快速。

15.9.3. 功能和解析器

Apache Karaf 为调配应用提供了简单而灵活的方式。

在 Apache Karaf 中,应用调配是 Apache Karaf "功能"。

功能将应用程序描述为:

  • 名称
  • 版本
  • 可选的描述(通常带有长描述)
  • 一组捆绑包
  • (可选)设置配置或配置文件
  • (可选)依赖项功能

安装功能时,Apache Karaf 将安装功能中描述的所有资源。这意味着,它将自动解析和安装功能中描述的所有捆绑包、配置和依赖项功能。

功能解析器检查服务要求,并安装提供符合要求的服务的捆绑包。默认模式只对"新风格"功能启用此行为(基本来说,带有等于或大于 1.3.0 的架构仓库 XML)。它不适用于"旧的"功能存储库(从 Karaf 2 或 3 开始)。

您可以使用 serviceRequirements 属性更改 etc/org.apache.karaf.features.cfg 文件中的服务要求强制模式。

serviceRequirements=default

可能的值有:

  • Disable:完全忽略服务要求,对于"旧样式"和"新样式"功能存储库
  • 默认:对于"旧风格"功能存储库,会忽略服务要求,并为"新风格"功能存储库启用。
  • enforce:始终验证服务要求,了解"旧样式"和"新样式"功能存储库。

此外,功能也可以定义要求。在这种情况下,2019 年可以自动额外的捆绑包或功能,提供满足要求的功能。

功能具有完整的生命周期:install、start、stop、update、uninstall。

15.9.4. 功能软件仓库

该功能在 XML 描述符中描述。此 XML 文件包含一组功能的描述。

功能 XML 描述符被命名为 "features repository"。在能够安装功能前,您必须注册提供该功能的功能存储库(使用 feature:repo-add 命令或 FeatureMBean ),如稍后所述。

例如,以下 XML 文件(或"features 存储库")描述了 feature1feature2 功能:

<features xmlns="http://karaf.apache.org/xmlns/features/v1.3.0">
  <feature name="feature1" version="1.0.0">
    <bundle>...</bundle>
    <bundle>...</bundle>
  </feature>
  <feature name="feature2" version="1.1.0">
    <feature>feature1</feature>
    <bundle>...</bundle>
  </feature>
</features>

我们可以注意到,功能 XML 具有模式。详情请参阅 用户指南的 [Features XML Schema 部分|provisioning-schema]。feature1 功能在 1.0.0 版本中可用,包含两个捆绑包。& lt;bundle/& gt; 元素包含捆绑包工件的 URL (请参阅 [Artifacts repositories 和 URL 部分|urls] 部分)。如果您安装 feature1 功能(使用 feature:install 或 FeatureMBean),则 Apache Karaf 将自动安装上述两个捆绑包。feature2 功能在 1.1.0 版本中提供,包含对 feature1 功能和捆绑包的引用。& lt;feature/& gt; 元素包含功能的名称。可以使用 version 属性到 <feature/&gt ; 元素(& lt;feature version="1.0.0">feature1</feature>)来定义特定的功能版本。如果没有指定 version 属性,则 Apache Karaf 将安装最新的可用版本。如果您安装 feature2 功能(使用 feature:install 或 FeatureMBean),则 Apache Karaf 将自动安装 feature1 (如果尚未安装)和捆绑包。

功能存储库使用到功能 XML 文件的 URL 注册。

features 状态存储在 Apache Karaf 缓存中(在 KARAF_DATA 文件夹中)。您可以重新启动 Apache Karaf,之前安装的功能仍然保持安装并在重新启动后可用。如果您进行干净的重启,或者删除 Apache Karaf 缓存(删除 KARAF_DATA 文件夹),则之前注册的软件仓库和功能都将丢失:您必须注册功能并再次安装功能。要防止这种情况,您可以将功能指定为引导功能。

15.9.5. 引导特性

您可以将一些功能描述为引导功能。Apache Karaf 将自动安装引导功能,即使之前还没有使用 feature:install 或 FeatureMBean 安装。

Apache Karaf 功能配置位于 etc/org.apache.karaf.features.cfg 配置文件中。

此配置文件包含用于定义引导功能的两个属性:

  • featuresRepositories 包含功能存储库(功能 XML)URL 的列表(任意列表)。
  • featuresBoot 包含要在启动时安装的功能列表(用逗号分开)。

15.9.6. 升级功能

您可以通过安装相同的功能(具有相同的 SNAPSHOT 版本或不同的版本)来更新发行版本。

由于功能生命周期,您可以控制功能的状态(启动、停止等)。

您还可以使用模拟来查看更新的作用。

15.9.7. overrides

功能中定义的捆绑包可以使用文件 etc/overrides.properties 覆盖。文件中的每一行都定义一个覆盖。语法为:<bundle-uri>[;range="[min,max)"],如果覆盖的版本大于覆盖捆绑包的版本,则给定的捆绑包将使用相同的符号名称覆盖所有捆绑包定义中。如果未指定范围,则假定为微版本级别的兼容性。

例如,覆盖 mvn:org.ops4j.pax.logging/pax-logging-service/1.8.5 会过度使用 pax-logging-service 1.8.3,而不是 1.8.6 或 1.7.0。

15.9.8. 功能捆绑包

15.9.8.1. 开始级别

默认情况下,功能部署的捆绑包将具有与 karaf.startlevel.bundle 属性中 etc/config.properties 配置文件中定义的值的开始级别。

这个值可以被 < bundle /> 元素的 start-level 属性 "overrided",在 features XML 中被 "overrided"。

  <feature name="my-project" version="1.0.0">
    <bundle start-level="80">mvn:com.mycompany.myproject/myproject-dao</bundle>
    <bundle start-level="85">mvn:com.mycompany.myproject/myproject-service</bundle>
  </feature>

start-level 属性确保在使用该捆绑包的捆绑包之前启动 myproject-dao 捆绑包。

更好的解决方法是,使用 start-level 只是通过定义您需要的软件包或服务来了解您的依赖项。它比设置启动级别更强大。

15.9.8.2. 模拟、启动和停止

您可以使用 -t 选项在 feature:install 命令模拟安装功能。

您可以在不启动捆绑包的情况下安装捆绑包。默认情况下,功能中的捆绑包会自动启动。

功能可以指定捆绑包不应自动启动(捆绑包处于解析状态)。要做到这一点,功能可以在 < bundle /> 项中将 start 属性指定为 false :

  <feature name="my-project" version="1.0.0">
    <bundle start-level="80" start="false">mvn:com.mycompany.myproject/myproject-dao</bundle>
    <bundle start-level="85" start="false">mvn:com.mycompany.myproject/myproject-service</bundle>
  </feature>

15.9.8.3. 依赖项

捆绑包可以在 <bundle/> 元素上使用 dependency 属性设置为 true。

此信息可供解析器用于计算要安装的捆绑包的完整列表。

15.9.9. 依赖功能

功能可以依赖于一组其他功能:

  <feature name="my-project" version="1.0.0">
    <feature>other</feature>
    <bundle start-level="80" start="false">mvn:com.mycompany.myproject/myproject-dao</bundle>
    <bundle start-level="85" start="false">mvn:com.mycompany.myproject/myproject-service</bundle>
  </feature>

将安装 my-project 功能时,也会自动安装 其他功能

可以为依赖功能定义版本范围:

<feature name="spring-dm">
  <feature version="[2.5.6,4)">spring</feature>
  ...
</feature>

将安装范围内最高版本的功能。

如果指定了单个版本,则范围将被视为开放。

如果未指定,将安装可用最高的可用。

要指定准确的版本,请使用关闭的范围,如 [3.1,3.1]

15.9.9.1. 功能先决条件

先决条件功能是特殊的依赖项。如果您要向依赖功能标签添加 prerequisites 属性,那么它将在安装实际功能前强制安装,并在依赖功能中激活捆绑包。如果给定功能中的捆绑包没有使用预安装的 URL (如 wrapwar )时,这可能很方便。

15.9.10. 功能配置

功能 XML 中的 <config /> 元素允许功能创建和/或填充配置(由配置 PID 识别)。

<config name="com.foo.bar">
  myProperty = myValue
</config>

< config/> 元素的 name 属性对应于配置 PID (详情请参阅 [Configuration section|configuration] )。

功能的安装效果与在 etc 文件夹中丢弃名为 com.foo.bar.cfg 的文件具有相同的效果。

< config/&gt; 元素的内容是一组属性,遵循 key=value 标准。

15.9.11. 功能配置文件

功能可以指定 &lt ;config file/& gt; 元素,而不使用 <config/> 元素。

<configfile finalname="/etc/myfile.cfg" override="false">URL</configfile>

< config/> 元素不直接操作 Apache Karaf 配置层(如使用 &lt; config/&gt; 元素时),<configfile/> 元素直接取一个由 URL 指定的文件,并将该文件复制到 finalname 属性指定的位置。

如果没有指定,则位置来自 KARAF_BASE 变量。也可以使用诸如 ${karaf.home}、${karaf.base}、${karaf.etc} 或系统属性等变量。

例如:

<configfile finalname="${karaf.etc}/myfile.cfg" override="false">URL</configfile>

如果该文件已存在于所需的位置,并且跳过了配置文件部署,因为已存在的文件可能包含自定义。此行为可以通过覆盖设置为 true 来覆盖

文件 URL 是 Apache Karaf 支持的 URL (有关详细信息,请参阅用户指南的 [Artifacts 存储库和 URL|urls])。

15.9.11.1. 要求

功能也可以指定预期的要求。功能解析器将尝试满足要求。为此,它会检查功能和捆绑包功能,并自动安装捆绑包来满足要求。

例如,功能可以包含:

<requirement>osgi.ee;filter:=&quot;(&amp;(osgi.ee=JavaSE)(!(version&gt;=1.8)))&quot;</requirement>

要求指定只有在 JDK 版本不是 1.8 时,该功能才能正常工作(因此基本上为 1.7)。

功能解析器也可以在满足可选依赖项时刷新捆绑包,从而重写可选的导入。

15.9.12. 命令

15.9.12.1. feature:repo-list

feature:repo-list 命令列出所有注册的功能存储库:

karaf@root()> feature:repo-list
Repository               | URL
--------------------------------------------------------------------------------------
org.ops4j.pax.cdi-0.12.0 | mvn:org.ops4j.pax.cdi/pax-cdi-features/0.12.0/xml/features
org.ops4j.pax.web-4.1.4  | mvn:org.ops4j.pax.web/pax-web-features/4.1.4/xml/features
standard-4.0.0           | mvn:org.apache.karaf.features/standard/4.0.0/xml/features
enterprise-4.0.0         | mvn:org.apache.karaf.features/enterprise/4.0.0/xml/features
spring-4.0.0             | mvn:org.apache.karaf.features/spring/4.0.0/xml/features

每个存储库都有一个名称和功能 XML 的 URL。

当您注册功能存储库 URL (使用 feature:repo-add 命令或 FeatureMBean )时,Apache Karaf 会解析功能 XML。如果要强制 Apache Karaf 重新加载功能存储库 URL (以及更新功能定义),您可以使用 -r 选项:

karaf@root()> feature:repo-list -r
Reloading all repositories from their urls

Repository               | URL
--------------------------------------------------------------------------------------
org.ops4j.pax.cdi-0.12.0 | mvn:org.ops4j.pax.cdi/pax-cdi-features/0.12.0/xml/features
org.ops4j.pax.web-4.1.4  | mvn:org.ops4j.pax.web/pax-web-features/4.1.4/xml/features
standard-4.0.0           | mvn:org.apache.karaf.features/standard/4.0.0/xml/features
enterprise-4.0.0         | mvn:org.apache.karaf.features/enterprise/4.0.0/xml/features
spring-4.0.0             | mvn:org.apache.karaf.features/spring/4.0.0/xml/features

15.9.12.2. feature:repo-add

要注册功能存储库(因此有 Apache Karaf 中的新功能),您必须使用 feature:repo-add 命令。

feature:repo-add 命令需要 name/url 参数。这个参数接受:

  • 功能存储库 URL。它是功能 XML 文件的 URL。支持用户指南的 [Artifacts 仓库和 URL 部分|urls] 中描述的 URL。
  • etc/org.apache.karaf.features.repos.cfg 配置文件中定义的功能存储库名称。

etc/org.apache.karaf.features.repos.cfg 定义"pre-installed/available"功能存储库的列表:

################################################################################
#
#    Licensed to the Apache Software Foundation (ASF) under one or more
#    contributor license agreements.  See the NOTICE file distributed with
#    this work for additional information regarding copyright ownership.
#    The ASF licenses this file to You under the Apache License, Version 2.0
#    (the "License"); you may not use this file except in compliance with
#    the License.  You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS,
#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#    See the License for the specific language governing permissions and
#    limitations under the License.
#
################################################################################

#
# This file describes the features repository URL
# It could be directly installed using feature:repo-add command
#
enterprise=mvn:org.apache.karaf.features/enterprise/LATEST/xml/features
spring=mvn:org.apache.karaf.features/spring/LATEST/xml/features
cellar=mvn:org.apache.karaf.cellar/apache-karaf-cellar/LATEST/xml/features
cave=mvn:org.apache.karaf.cave/apache-karaf-cave/LATEST/xml/features
camel=mvn:org.apache.camel.karaf/apache-camel/LATEST/xml/features
camel-extras=mvn:org.apache-extras.camel-extra.karaf/camel-extra/LATEST/xml/features
cxf=mvn:org.apache.cxf.karaf/apache-cxf/LATEST/xml/features
cxf-dosgi=mvn:org.apache.cxf.dosgi/cxf-dosgi/LATEST/xml/features
cxf-xkms=mvn:org.apache.cxf.services.xkms/cxf-services-xkms-features/LATEST/xml
activemq=mvn:org.apache.activemq/activemq-karaf/LATEST/xml/features
jclouds=mvn:org.apache.jclouds.karaf/jclouds-karaf/LATEST/xml/features
openejb=mvn:org.apache.openejb/openejb-feature/LATEST/xml/features
wicket=mvn:org.ops4j.pax.wicket/features/LATEST/xml/features
hawtio=mvn:io.hawt/hawtio-karaf/LATEST/xml/features
pax-cdi=mvn:org.ops4j.pax.cdi/pax-cdi-features/LATEST/xml/features
pax-jdbc=mvn:org.ops4j.pax.jdbc/pax-jdbc-features/LATEST/xml/features
pax-jpa=mvn:org.ops4j.pax.jpa/pax-jpa-features/LATEST/xml/features
pax-web=mvn:org.ops4j.pax.web/pax-web-features/LATEST/xml/features
pax-wicket=mvn:org.ops4j.pax.wicket/pax-wicket-features/LATEST/xml/features
ecf=http://download.eclipse.org/rt/ecf/latest/site.p2/karaf-features.xml
decanter=mvn:org.apache.karaf.decanter/apache-karaf-decanter/LATEST/xml/features

您可以直接向 feature:repo-add 命令提供一个 features 存储库名称。要安装 PAX JDBC,您可以:

karaf@root()> feature:repo-add pax-jdbc
Adding feature url mvn:org.ops4j.pax.jdbc/pax-jdbc-features/LATEST/xml/features

当您不提供可选 版本 参数时,Apache Karaf 将安装最新版本的功能存储库。您可以使用 version 参数指定 目标版本

karaf@root()> feature:repo-add pax-jdbc 1.3.0
Adding feature url mvn:org.ops4j.pax.jdbc/pax-jdbc-features/1.3.0/xml/features

除了提供 etc/org.apache.karaf.features.repos.cfg 配置文件中定义的功能存储库名称外,您可以直接向 feature:repo-add 命令提供功能存储库 URL:

karaf@root()> feature:repo-add mvn:org.ops4j.pax.jdbc/pax-jdbc-features/1.3.0/xml/features
Adding feature url mvn:org.ops4j.pax.jdbc/pax-jdbc-features/1.3.0/xml/features

默认情况下,feature:repo-add 命令只注册 features 存储库,它不会安装任何功能。如果您指定了 -i 选项,feature:repo-add 命令会注册 features 存储库并安装此功能存储库中描述的所有功能:

karaf@root()> feature:repo-add -i pax-jdbc

15.9.12.3. feature:repo-refresh

当您注册时,Apache Karaf 会解析功能存储库 XML (使用 feature:repo-add 命令或 FeatureMBean)。如果 features 存储库 XML 发生变化,您必须指示 Apache Karaf 刷新 features 存储库以加载更改。

feature:repo-refresh 命令刷新 features 存储库。

如果没有参数,命令会刷新所有功能存储库:

karaf@root()> feature:repo-refresh
Refreshing feature url mvn:org.ops4j.pax.cdi/pax-cdi-features/0.12.0/xml/features
Refreshing feature url mvn:org.ops4j.pax.web/pax-web-features/4.1.4/xml/features
Refreshing feature url mvn:org.apache.karaf.features/standard/4.0.0/xml/features
Refreshing feature url mvn:org.apache.karaf.features/enterprise/4.0.0/xml/features
Refreshing feature url mvn:org.apache.karaf.features/spring/4.0.0/xml/features

您可以通过提供 URL 或 features 存储库名称(以及可选版本)来指定要刷新的所有功能存储库,而不是刷新所有功能存储库:

karaf@root()> feature:repo-refresh mvn:org.apache.karaf.features/standard/4.0.0/xml/features
Refreshing feature url mvn:org.apache.karaf.features/standard/4.0.0/xml/features
karaf@root()> feature:repo-refresh pax-jdbc
Refreshing feature url mvn:org.ops4j.pax.jdbc/pax-jdbc-features/LATEST/xml/features

15.9.12.4. feature:repo-remove

feature:repo-remove 命令从注册的功能存储库中删除。

feature:repo-remove 命令需要一个参数:

  • features 存储库名称(如 feature:repo-list 命令的输出的仓库列中显示)
  • features 存储库 URL (如 feature:repo-list 命令的输出的 URL 列中显示)
karaf@root()> feature:repo-remove org.ops4j.pax.jdbc-1.3.0
karaf@root()> feature:repo-remove mvn:org.ops4j.pax.jdbc/pax-jdbc-features/1.3.0/xml/features

默认情况下,feature:repo-remove 命令只从注册的功能仓库中删除 features 存储库:它不会卸载 features 存储库提供的功能。

如果使用 -u 选项,feature:repo-remove 命令会卸载 features 存储库描述的所有功能:

karaf@root()> feature:repo-remove -u org.ops4j.pax.jdbc-1.3.0

15.9.12.5. feature:list

feature:list 命令列出所有可用的功能(由不同的注册的功能存储库提供):

Name                          | Version                          | Required | State       | Repository               | Description
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
pax-cdi                       | 0.12.0                           |          | Uninstalled | org.ops4j.pax.cdi-0.12.0 | Provide CDI support
pax-cdi-1.1                   | 0.12.0                           |          | Uninstalled | org.ops4j.pax.cdi-0.12.0 | Provide CDI 1.1 support
pax-cdi-1.2                   | 0.12.0                           |          | Uninstalled | org.ops4j.pax.cdi-0.12.0 | Provide CDI 1.2 support
pax-cdi-weld                  | 0.12.0                           |          | Uninstalled | org.ops4j.pax.cdi-0.12.0 | Weld CDI support
pax-cdi-1.1-weld              | 0.12.0                           |          | Uninstalled | org.ops4j.pax.cdi-0.12.0 | Weld CDI 1.1 support
pax-cdi-1.2-weld              | 0.12.0                           |          | Uninstalled | org.ops4j.pax.cdi-0.12.0 | Weld CDI 1.2 support
pax-cdi-openwebbeans          | 0.12.0                           |          | Uninstalled | org.ops4j.pax.cdi-0.12.0 | OpenWebBeans CDI support
pax-cdi-web                   | 0.12.0                           |          | Uninstalled | org.ops4j.pax.cdi-0.12.0 | Web CDI support
pax-cdi-1.1-web               | 0.12.0                           |          | Uninstalled | org.ops4j.pax.cdi-0.12.0 | Web CDI 1.1 support
...

如果您希望按字母顺序对功能进行排序,您可以使用 -o 选项:

karaf@root()> feature:list -o
Name                          | Version                          | Required | State       | Repository               | Description
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
deltaspike-core               | 1.2.1                            |          | Uninstalled | org.ops4j.pax.cdi-0.12.0 | Apache Deltaspike core support
deltaspike-data               | 1.2.1                            |          | Uninstalled | org.ops4j.pax.cdi-0.12.0 | Apache Deltaspike data support
deltaspike-jpa                | 1.2.1                            |          | Uninstalled | org.ops4j.pax.cdi-0.12.0 | Apache Deltaspike jpa support
deltaspike-partial-bean       | 1.2.1                            |          | Uninstalled | org.ops4j.pax.cdi-0.12.0 | Apache Deltaspike partial bean support
pax-cdi                       | 0.12.0                           |          | Uninstalled | org.ops4j.pax.cdi-0.12.0 | Provide CDI support
pax-cdi-1.1                   | 0.12.0                           |          | Uninstalled | org.ops4j.pax.cdi-0.12.0 | Provide CDI 1.1 support
pax-cdi-1.1-web               | 0.12.0                           |          | Uninstalled | org.ops4j.pax.cdi-0.12.0 | Web CDI 1.1 support
pax-cdi-1.1-web-weld          | 0.12.0                           |          | Uninstalled | org.ops4j.pax.cdi-0.12.0 | Weld Web CDI 1.1 support
pax-cdi-1.1-weld              | 0.12.0                           |          | Uninstalled | org.ops4j.pax.cdi-0.12.0 | Weld CDI 1.1 support
pax-cdi-1.2                   | 0.12.0                           |          | Uninstalled | org.ops4j.pax.cdi-0.12.0 | Provide CDI 1.2 support
...

默认情况下,feature:list 命令显示所有功能,无论其当前状态(已安装或未安装)。

使用 -i 选项仅显示安装的功能:

karaf@root()> feature:list -i
Name            | Version | Required | State   | Repository     | Description
-------------------------------------------------------------------------------------------------------------------
aries-proxy     | 4.0.0   |          | Started | standard-4.0.0 | Aries Proxy
aries-blueprint | 4.0.0   | x        | Started | standard-4.0.0 | Aries Blueprint
feature         | 4.0.0   | x        | Started | standard-4.0.0 | Features Support
shell           | 4.0.0   | x        | Started | standard-4.0.0 | Karaf Shell
shell-compat    | 4.0.0   | x        | Started | standard-4.0.0 | Karaf Shell Compatibility
deployer        | 4.0.0   | x        | Started | standard-4.0.0 | Karaf Deployer
bundle          | 4.0.0   | x        | Started | standard-4.0.0 | Provide Bundle support
config          | 4.0.0   | x        | Started | standard-4.0.0 | Provide OSGi ConfigAdmin support
diagnostic      | 4.0.0   | x        | Started | standard-4.0.0 | Provide Diagnostic support
instance        | 4.0.0   | x        | Started | standard-4.0.0 | Provide Instance support
jaas            | 4.0.0   | x        | Started | standard-4.0.0 | Provide JAAS support
log             | 4.0.0   | x        | Started | standard-4.0.0 | Provide Log support
package         | 4.0.0   | x        | Started | standard-4.0.0 | Package commands and mbeans
service         | 4.0.0   | x        | Started | standard-4.0.0 | Provide Service support
system          | 4.0.0   | x        | Started | standard-4.0.0 | Provide System support
kar             | 4.0.0   | x        | Started | standard-4.0.0 | Provide KAR (KARaf archive) support
ssh             | 4.0.0   | x        | Started | standard-4.0.0 | Provide a SSHd server on Karaf
management      | 4.0.0   | x        | Started | standard-4.0.0 | Provide a JMX MBeanServer and a set of MBeans in
wrap            | 0.0.0   | x        | Started | standard-4.0.0 | Wrap URL handler

15.9.12.6. feature:install

feature:install 命令安装一项功能。

它需要 feature 参数。feature 参数是功能的名称,或功能的名称/版本。如果只提供该功能的名称(不是版本),则会安装最新的可用版本。

karaf@root()> feature:install eventadmin

我们可以使用 -t--simulate 选项模拟安装:它只是显示它的作用,但它不做:

karaf@root()> feature:install -t -v eventadmin
Adding features: eventadmin/[4.0.0,4.0.0]
No deployment change.
  Managing bundle:
    org.apache.felix.metatype / 1.0.12

您可以指定要安装的功能版本:

karaf@root()> feature:install eventadmin/4.0.0

默认情况下,feature:install 命令没有详细。如果要对 feature:install 命令执行的操作有一些详情,您可以使用 -v 选项:

karaf@root()> feature:install -v eventadmin
Adding features: eventadmin/[4.0.0,4.0.0]
No deployment change.
Done.

如果功能包含已安装的捆绑包,默认情况下,Apache Karaf 将刷新此捆绑包。有时,这个刷新可能会导致其他正在运行的应用程序出现问题。如果要禁用已安装的捆绑包的自动刷新,您可以使用 -r 选项:

karaf@root()> feature:install -v -r eventadmin
Adding features: eventadmin/[4.0.0,4.0.0]
No deployment change.
Done.

您可以使用 -s--no-auto-start 选项决定不启动由功能安装的捆绑包:

karaf@root()> feature:install -s eventadmin

15.9.12.7. feature:start

默认情况下,当您安装某个功能时,它会自动安装。但是,您可以在 feature:install 命令中指定 -s 选项。

安装功能(启动或不启动)后,该功能中定义的所有软件包都将可用,并可用于其他捆绑包中的 wiring。

启动功能时,会启动所有捆绑包,因此该功能也会公开相关的服务。

15.9.12.8. feature:stop

您还可以停止某个功能:这意味着该功能提供的所有服务都将停止并从服务 registry 中删除。但是,软件包仍可用于 wiring (捆绑包处于解析状态)。

15.9.12.9. feature:uninstall

feature:uninstall 命令卸载功能。作为 feature:install 命令,feature:uninstall 命令需要 feature 参数。feature 参数是功能的名称,或功能的名称/版本。如果只提供该功能的名称(不是版本),则会安装最新的可用版本。

karaf@root()> feature:uninstall eventadmin

解析器在功能卸载过程中涉及:如果未由其他功能使用,可以卸载由卸载的功能安装的功能。

15.9.13. deployer

您可以通过在 deploy 文件夹中直接丢弃该文件来"热部署"功能 XML。

Apache Karaf 提供功能部署器。

当您丢弃 deploy 文件夹中的功能 XML 时,功能部署器将执行:* 将功能 XML 注册为功能存储库,并将 install 属性设置为 "auto" 的功能由部署器自动安装。

例如,丢弃部署文件夹中的以下 XML 将自动安装 feature1 和 feature2,而 feature3 不会被安装:

<?xml version="1.0" encoding="UTF-8"?>
<features name="my-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">

    <feature name="feature1" version="1.0" install="auto">
        ...
    </feature>

    <feature name="feature2" version="1.0" install="auto">
        ...
    </feature>

    <feature name="feature3" version="1.0">
        ...
    </feature>

</features>

15.9.14. JMX FeatureMBean

在 JMX 层上,您有一个 MBean 专用于管理功能和特性存储库: FeatureMBean。

FeatureMBean 对象名称是: org.apache.karaf:type=feature,name iwl.

15.9.14.1. 属性

FeatureMBean 提供两个属性:

  • 功能是 所有可用功能的表格式数据集。
  • 存储库 是所有注册的功能存储库的表格式数据集。

Repositories 属性提供以下信息:

  • name 是 features 存储库的名称。
  • URI 是此存储库功能 XML 的 URI。
  • 功能是 此功能存储库提供的所有功能(名称和版本)的表格式数据集。
  • 存储库 是此功能存储库中"导入"的功能集合。

Features 属性提供以下信息:

  • name 是功能的名称。
  • version 是功能的版本。
  • installed 是一个布尔值。如果为 true,这表示当前已安装该功能。
  • 捆绑包 是功能中描述的所有捆绑包(捆绑包 URL)的表格式数据集。
  • 配置 是功能中描述的所有配置的表格式数据集。
  • 配置文件是 功能中描述的所有配置文件的表格数据集。
  • 依赖项 是功能中描述的所有依赖功能的表格式数据集。

15.9.14.2. 操作

  • addRepository (url) 使用 url 添加 features 存储库。url 可以是 feature:repo-add 命令中的 名称
  • addRepository (url, install) 使用 url 添加 features 存储库,并在 install 为 true 时自动安装所有捆绑包。url 可以是 feature:repo-add 命令中的 名称
  • removeRepository (url) 使用 url 删除 features 存储库。url 可以是 feature:repo-remove 命令中的 名称
  • installFeature ( name ) 安装名为 的功能。
  • installFeature ( name, version ) 使用名称和版本 安装该功能。
  • installFeature ( name, noClean, noRefresh) 使用名称安装功能,而不在失败时清理捆绑包,而不刷新已安装的捆绑包。
  • installFeature (name, version, noClean, noRefresh) " install the feature with the 'name and version )' 在失败时没有清理捆绑包,且不会刷新已安装的捆绑包。
  • uninstallFeature ( name ) 使用名称 卸载功能。
  • uninstallFeature ( name, version ) 使用名称和版本 卸载该功能。

15.9.14.3. 通知

FeatureMBean 发送两种类型的通知(您可以订阅并响应这些通知):

  • 当功能存储库更改时(添加或删除)。
  • 当功能更改时(安装或卸载)。