gpt4 book ai didi

java - 如何获取 OSGi 使用的所有 jar 路径?

转载 作者:行者123 更新时间:2023-11-29 08:05:51 26 4
gpt4 key购买 nike

我想获取所有可以在这些 jar 中搜索 .class 文件的 jar 路径。我编写了一个函数来搜索 App 主文件夹下的所有 jar,但遇到了一个问题——一些 jar 包存在但已过时并且未被 OSGi 使用,例如。 xxxx_1.0.0.jar 和 xxxx_1.2.0.jar 都存在,但只有 1.2.0 被 OSGi 使用。如果我在主文件夹中搜索,它们中的一些将出现在结果列表中。

那么有没有办法获取OSGi使用的所有jar文件呢?然后我可以过滤掉没有使用的jar文件。谢谢

添加:我试图用这种方式获取所有Bundles的绝对URL,但是失败了:

StringBuffer sb = new StringBuffer();
Bundle[] bundles = com.ibm.director.services.storage.debugtool.Activator.context.getBundles();
for (Bundle bundle : bundles) {
java.net.URL url = bundle.getClass().getProtectionDomain().getCodeSource().getLocation();
sb.append("File:" + url.getFile() + ", Path:" + url.getPath() + "\n");
}

但以下输出重复了数百次:

File:/opt/ibm/director/lwi/runtime/core/eclipse/plugins/org.eclipse.osgi_3.4.3.R34x_v20081215-1030-RCP20120203-1500.jar
File:/opt/ibm/director/lwi/runtime/core/eclipse/plugins/org.eclipse.osgi_3.4.3.R34x_v20081215-1030-RCP20120203-1500.jar,
File:....

使用的bundle数量是:588,可能是正确的,我们可以从API获取Bundles的绝对路径,但为什么它们都是一样的?如何获取真实路径?

最佳答案

BundleContext#getBundles() 为您提供所有 bundle 。然后您可以比较符号名称和版本。但是,仅仅因为您同时拥有 xxxx_1.0.0.jar 和 xxxx_1.2.0.jar 并不意味着 xxx_1.0.0.jar 未被使用。可能存在一些其他需要 xxx_1.0.0.jar 的包。同样,仅仅因为一个 bundle 没有启动并不意味着它以后不会启动。您不想重新实现 OSGi 解析器。如果您想清理存储库,我建议您使用存储库供应商提供的应用程序,例如 p2 中的 GC 应用程序。

关于java - 如何获取 OSGi 使用的所有 jar 路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11303432/

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