如何使用 bnd 指定 class 个文件
How to specify class files with bnd
我已经成功地使用独立的 bnd 工具从 jar 文件创建了一个 OSGi 包。
现在我想从 .class 个文件开始创建一个包。
通过查看一些官方 bnd 文档,我找不到任何东西可以做到这一点。
我想我正在寻找类似 -classpath: output.jar
的东西,它可以用于 .class 文件。
如果我理解您正在尝试做什么,一种选择可能是设置 Maven 项目并利用 bnd-maven-plugin
所描述的 here。基本上,在 pom 的 build/plugins 部分添加以下代码片段就足够了:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>biz.aQute.bnd</groupId>
<artifactId>bnd-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>bnd-process</goal>
</goals>
</execution>
</executions>
</plugin>
有关基于 maven 的方法的完整示例,您可以参考 OSGi enRoute 网站:https://enroute.osgi.org/Tutorial/
有不同的选项:Workspace bndtools(包括 Gradle build)、Standalone Gradle、Maven 和 bnd standalone。我非常喜欢 Bndtools 工作区模型,因为它对用户最友好。大量支持,完全保真 gradle,无需任何额外工作,交互式调试,远程调试,打包和活跃的社区。它基于 Eclipse。
以下链接应该可以帮助您入门:
- 这里的工作区:https://bndtools.org/
- Bnd 手册:https://bnd.bndtools.org/
- v2Archive enRoute(OSGi 不再直接支持它,但有大量关于如何使用 Bndtools Workspace 模型的信息)https://v2archive.enroute.osgi.org/book/210-doc.html
更新
如果您只想使用 bnd 命令行,您可以简化很多事情,但您还必须处理更多事情。而你怀念bndtools
的美好世界:-(
即便如此,您仍然可以做出选择。 bnd 可用于构建工作区模型设置。在这种情况下,您遵循 bndtools 工作区教程等的规则。在该模型中,您可以在工作区或项目目录中使用 bnd 构建、编译和许多其他命令。
如果你也想跳过这些,你最终会得到一个 bnd,它只从 bnd 属性 文件生成一个 JAR。在这种情况下,您必须指定所有依赖项:
-classpath bin/,jar/a.jar, jar/b.jar
然后您可以使用所有 Builder 指令。
-includeresource
Private-Package
Export-Package
-exportcontents
...
所有包头等。大多数验证和构建应该与 Bndtools 工作区示例类似。当然,您会错过启动和许多其他功能。但是,我听说有人用这种方式构建了一个大型代码库...
下面的 URL 展示了一些如何使用它的例子:https://bnd.bndtools.org/chapters/160-jars.html
我已经成功地使用独立的 bnd 工具从 jar 文件创建了一个 OSGi 包。
现在我想从 .class 个文件开始创建一个包。
通过查看一些官方 bnd 文档,我找不到任何东西可以做到这一点。
我想我正在寻找类似 -classpath: output.jar
的东西,它可以用于 .class 文件。
如果我理解您正在尝试做什么,一种选择可能是设置 Maven 项目并利用 bnd-maven-plugin
所描述的 here。基本上,在 pom 的 build/plugins 部分添加以下代码片段就足够了:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>biz.aQute.bnd</groupId>
<artifactId>bnd-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>bnd-process</goal>
</goals>
</execution>
</executions>
</plugin>
有关基于 maven 的方法的完整示例,您可以参考 OSGi enRoute 网站:https://enroute.osgi.org/Tutorial/
有不同的选项:Workspace bndtools(包括 Gradle build)、Standalone Gradle、Maven 和 bnd standalone。我非常喜欢 Bndtools 工作区模型,因为它对用户最友好。大量支持,完全保真 gradle,无需任何额外工作,交互式调试,远程调试,打包和活跃的社区。它基于 Eclipse。
以下链接应该可以帮助您入门:
- 这里的工作区:https://bndtools.org/
- Bnd 手册:https://bnd.bndtools.org/
- v2Archive enRoute(OSGi 不再直接支持它,但有大量关于如何使用 Bndtools Workspace 模型的信息)https://v2archive.enroute.osgi.org/book/210-doc.html
更新
如果您只想使用 bnd 命令行,您可以简化很多事情,但您还必须处理更多事情。而你怀念bndtools
的美好世界:-(
即便如此,您仍然可以做出选择。 bnd 可用于构建工作区模型设置。在这种情况下,您遵循 bndtools 工作区教程等的规则。在该模型中,您可以在工作区或项目目录中使用 bnd 构建、编译和许多其他命令。
如果你也想跳过这些,你最终会得到一个 bnd,它只从 bnd 属性 文件生成一个 JAR。在这种情况下,您必须指定所有依赖项:
-classpath bin/,jar/a.jar, jar/b.jar
然后您可以使用所有 Builder 指令。
-includeresource
Private-Package
Export-Package
-exportcontents
...
所有包头等。大多数验证和构建应该与 Bndtools 工作区示例类似。当然,您会错过启动和许多其他功能。但是,我听说有人用这种方式构建了一个大型代码库...
下面的 URL 展示了一些如何使用它的例子:https://bnd.bndtools.org/chapters/160-jars.html