gpt4 book ai didi

java - 在 OSGi 包中包含额外的资源

转载 作者:搜寻专家 更新时间:2023-10-31 19:59:03 26 4
gpt4 key购买 nike

我正在开发一个 OSGi 包,它将服务实现为 native 可执行文件的包装器。也就是说,该服务使用 ProcessBuilder 运行可执行文件,向其提供一些数据,然后检索结果。我的问题是关于打包这个包的最佳方式。 native 可执行文件包括许多相关数据文件,这些文件都必须存在于磁盘上,工具才能运行。我找到了很多关于在 OSGi 中处理 native DLL 的引用资料,但没有一个是解决与必须存在于磁盘上的包关联的文件,而不仅仅是通过类路径检索的文件。

我在想我可以将可执行文件和依赖文件直接包含在包存档中,然后在包启动时以编程方式提取到某个目录。我能想到的另一个选择是将可执行文件放在某个地方并设置一个指向它的系统属性或其他东西,但我想将配置保持在最低限度。

不特定于特定 OSGi 实现的解决方案会很好,但如果不是,我正在使用 Equinox。

谢谢!

最佳答案

这些附加文件是否需要由 native 代码写入?如果没有,也没有什么能阻止您将任何您喜欢的文件放入一个包中。

您在 OSGi 中遇到的常见问题是计算文件的路径,因为 OSGi 不假定文件系统可用(这并不像 OSGi 在嵌入式设备中开始时听起来那么奇怪)。

您如何控制 native 代码在何处查找其相关文件?你需要给它传递一个路径吗?

如果你想要一个目录来复制或解压东西,那么使用:

org.eclipse.core.runtime.Platform.getStateLocation()

它为您提供了包的工作目录。

如果你想在你的包中找到特定文件的路径,你可以这样做:

org.eclipse.core.runtime.FileLocator.toFileURL((context.getBundle().getEntry("/etc/readme.txt")))

在这种情况下,它会将文件 URL 返回到当前包中的 /etc/readme.txt

这两段代码都假定它们在激活器的 start() 方法中。

关于java - 在 OSGi 包中包含额外的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1411812/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com