15.4. 嵌套 URL 处理程序

15.4.1. 概述

如果您需要引用未打包为捆绑包的 JAR 文件,您可以使用 Wrap URL 处理程序进行动态转换。Wrap URL 处理程序的实施基于 Peter Krien 的开源 Bnd 工具。

15.4.2. 语法

Wrap URL 具有以下语法:

wrap:locationURL[,instructionsURL][$instructions]

locationURL 可以是找到 JAR 的任何 URL(引用的 JAR 不会 作为捆绑包的格式)。可选的 instructionsURL 引用了一个 Bnd 属性文件,用于指定如何执行捆绑包转换。可选的 指令是 符号、和,由 Bnd 属性列表指定如何执行捆绑包转换。

15.4.3. 默认说明

在大多数情况下,默认的 Bnd 指令可用于嵌套 API JAR 文件。默认情况下,Wrap 将清单标头添加到 JAR 的 META-INF/Manifest.mf 文件中,如 表 15.1 “Wrapping a JAR 的默认说明” 所示。

表 15.1. Wrapping a JAR 的默认说明

manifest Header默认值

import-Package

*;resolution:=optional

export-Package

来自已封装 JAR 的所有软件包。

Bundle-SymbolicName

JAR 文件的名称,其中任何不在集合 [a-zA-Z0-9_-] 中的字符替换为下划线 _

15.4.4. 例子

以下 Wrap URL 找到 Maven 存储库中的 commons-logging JAR 版本 1.1,并使用默认的 Bnd 属性将其转换为 OSGi 捆绑包:

wrap:mvn:commons-logging/commons-logging/1.1

以下 Wrap URL 使用来自文件的 Bnd 属性,E:\Data\Examples\commons-logging-1.1.bnd:

wrap:mvn:commons-logging/commons-logging/1.1,file:E:/Data/Examples/commons-logging-1.1.bnd

以下 Wrap URL 指定 Bundle-SymbolicName 属性和 Bundle-Version 属性:

wrap:mvn:commons-logging/commons-logging/1.1$Bundle-SymbolicName=apache-comm-log&Bundle-Version=1.1

如果前面的 URL 用作命令行参数,可能需要转义美元符号 \$ 以防止命令行处理它,如下所示:

wrap:mvn:commons-logging/commons-logging/1.1\$Bundle-SymbolicName=apache-comm-log&Bundle-Version=1.1

15.4.5. 参考

有关嵌套 URL 处理程序 的详情,请查看以下引用: