A.3. 配置捆绑插件


概述

捆绑包插件需要很少的信息才能正常工作。所有必要属性均使用默认设置来生成有效的 OSGi 捆绑包。

虽然您可以使用仅使用默认值创建有效的捆绑包,但您可能想修改一些值。您可以在插件的 instructions 元素中指定大多数属性。

配置属性

以下是一些常用的配置属性:

设置捆绑包的符号链接名称

默认情况下,bundle 插件将 Bundle-SymbolicName 属性的值设置为 groupId + "." + artifactId,但有以下例外:

  • 如果 groupId 只有一个部分(没有点),则返回第一个带有类的软件包名称。

    例如,如果组 Id 是 commons-logging:commons-logging,则捆绑包的符号链接名称为 org.apache.commons.logging

  • 如果 artifactId 等于 groupId 的最后一个部分,则使用 groupId

    例如,如果 POM 将组 ID 和工件 ID 指定为 org.apache.maven:maven,则捆绑包的符号名称为 org.apache.maven

  • 如果 artifactIdgroupId 的最后一个部分开头,则删除该部分。

    例如,如果 POM 将组 ID 和工件 ID 指定为 org.apache.maven:maven-core,则捆绑包的符号名称为 org.apache.maven.core

要为捆绑包的符号名称指定您自己的值,请在插件的 instructions 元素中添加 Bundle-SymbolicName 子,如 例 A.2 “设置捆绑包的符号链接名称” 所示。

例 A.2. 设置捆绑包的符号链接名称

<plugin>
  <groupId>org.apache.felix</groupId>
  <artifactId>maven-bundle-plugin</artifactId>
  <configuration>
   <instructions>
     <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
     ...
    </instructions>
  </configuration>
</plugin>

设置捆绑包的名称

默认情况下,捆绑包的名称设置为 ${project.name}

要为捆绑包名称指定您自己的值,在插件的 instructions 元素中添加 Bundle-Name 子项,如 例 A.3 “设置捆绑包的名称” 所示。

例 A.3. 设置捆绑包的名称

<plugin>
  <groupId>org.apache.felix</groupId>
  <artifactId>maven-bundle-plugin</artifactId>
  <configuration>
   <instructions>
     <Bundle-Name>JoeFred</Bundle-Name>
     ...
    </instructions>
  </configuration>
</plugin>

设置捆绑包的版本

默认情况下,捆绑包的版本设置为 ${project.version}。任何短划线(-)都用点(.)替代,数字最多为四个数字。例如,4.2-SNAPSHOT 变为 4.2.0.SNAPSHOT

要为捆绑包版本指定您自己的值,在插件的 instructions 元素中添加 Bundle-Version 子,如 例 A.4 “设置捆绑包的版本” 所示。

例 A.4. 设置捆绑包的版本

<plugin>
  <groupId>org.apache.felix</groupId>
  <artifactId>maven-bundle-plugin</artifactId>
  <configuration>
   <instructions>
     <Bundle-Version>1.0.3.1</Bundle-Version>
     ...
    </instructions>
  </configuration>
</plugin>

指定导出的软件包

默认情况下,OSGi 清单的 Export-Package 列表由本地 Java 源代码中的所有软件包(在 src/main/java下)填充, 默认软件包 . . 以及包含 .impl.internal 的任何软件包。

重要

如果您在插件配置中使用 Private-Package 元素,且您没有指定要导出的软件包列表,则默认行为仅包括捆绑包中列出的 Private-Package 元素中列出的软件包。没有导出软件包。

默认行为可能会导致非常大的软件包,并导出应保持私有的软件包。要更改导出的软件包列表,您可以将 Export-Package 子级添加到插件的 instructions 元素中。

Export-Package 元素指定要包含在捆绑包中的软件包列表,以及要导出的软件包列表。可以使用 * 通配符符号指定软件包名称。例如,条目 com.fuse.demo.* 包含项目以 com.fuse.demo 开头的类路径上的所有软件包。

您可以指定要排除的软件包前缀为 ! 的条目。例如,条目 !com.fuse.demo.private 排除软件包 com.fuse.demo.private

当排除软件包时,列表中的条目顺序非常重要。该列表从开始的顺序处理,并忽略后续任何后续字典条目。

例如,要包含从 com.fuse.demo 开头的所有软件包,但 com.fuse.demo.private 除外,请使用以下内容列出软件包:

!com.fuse.demo.private,com.fuse.demo.*

但是,如果您使用 com.fuse.demo.*,!com.fuse.demo.private 列出了软件包,那么 com.fuse.demo.private 将包含在捆绑包中,因为它与第一个模式匹配。

指定私有软件包

如果要指定包括在捆绑包中的软件包列表 而不 导出它们,您可以在捆绑包插件配置中添加一个 Private-Package 指令。默认情况下,如果没有指定 Private-Package 指令,您的本地 Java 源中的所有软件包都包含在捆绑包中。

重要

如果软件包与 Private-Package 元素和 Export-Package 元素中的条目匹配,则 Export-Package 元素具有优先权。软件包会添加到捆绑包中并导出。

Private-Package 元素与 中的 Export-Package 元素的工作方式与您在捆绑包中包含的软件包列表类似。bundle 插件使用 list 来查找要包含在捆绑包中的项目类路径上的所有类。这些软件包打包在捆绑包中,但不导出(除非它们也由 Export-Package 指令选择)。

例 A.5 “在捆绑包中包含私有软件包” 显示在捆绑包中包含私有软件包的配置

例 A.5. 在捆绑包中包含私有软件包

<plugin>
  <groupId>org.apache.felix</groupId>
  <artifactId>maven-bundle-plugin</artifactId>
  <configuration>
   <instructions>
     <Private-Package>org.apache.cxf.wsdlFirst.impl</Private-Package>
     ...
    </instructions>
  </configuration>
</plugin>

指定导入的软件包

默认情况下,bundle 插件使用捆绑包内容引用的所有软件包列表填充 OSGi 清单的 Import-Package 属性。

虽然默认行为通常足以满足大多数项目,但您可能会发现您要导入没有自动添加到列表中的软件包的实例。默认行为也可以导致导入不需要的软件包。

要指定捆绑包要导入的软件包列表,请将 Import-Package 子添加到插件的 instructions 元素中。软件包列表的语法与 Export-Package 元素和 Private-Package 元素相同。

重要

当您使用 Import-Package 元素时,插件不会自动扫描捆绑包的内容,以确定是否需要导入。要确保捆绑包的内容被扫描,您必须将 * 作为软件包列表中的最后一个条目。

例 A.6 “指定捆绑包导入的软件包” 显示指定捆绑包导入的软件包的配置

例 A.6. 指定捆绑包导入的软件包

<plugin>
  <groupId>org.apache.felix</groupId>
  <artifactId>maven-bundle-plugin</artifactId>
  <configuration>
   <instructions>
     <Import-Package>javax.jws, javax.wsdl, org.apache.cxf.bus, org.apache.cxf.bus.spring, org.apache.cxf.bus.resource, org.apache.cxf.configuration.spring, org.apache.cxf.resource, org.springframework.beans.factory.config, * </Import-Package>
     ...
   </instructions>
  </configuration>
</plugin>

更多信息

有关配置捆绑包插件的更多信息,请参阅:

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.