Java 在Eclipse插件中查询jar条目

Java 在Eclipse插件中查询jar条目,java,eclipse,eclipse-plugin,osgi,Java,Eclipse,Eclipse Plugin,Osgi,在我的OSGi包(一个eclipse插件)中,我可以使用以下方法在某些路径上查询类条目: bundle.findEntries("<class_directory>/<package_name_as_url>/", "*.class", true) 然而,当类被打包在我的包中的一个jar中时,我还没有做到这一点。例如,如果jar是文件夹“lib”中的myJar.jar,我如何查询其中的所有类?我尝试了这些替代方案,但没有成功: bundle.findEntries("/

在我的OSGi包(一个eclipse插件)中,我可以使用以下方法在某些路径上查询类条目:

bundle.findEntries("<class_directory>/<package_name_as_url>/", "*.class", true)
然而,当类被打包在我的包中的一个jar中时,我还没有做到这一点。例如,如果jar是文件夹“lib”中的
myJar.jar
,我如何查询其中的所有类?我尝试了这些替代方案,但没有成功:

bundle.findEntries("/lib/myJar.jar!/", "*.class", true)
bundle.findEntries("/lib/myJar.jar/", "*.class", true)
如果使用字符串来编写路径对jar中的资源不起作用,那么我如何查询包中属于给定资源URL子项的条目,而不是像上面示例中所示的那样使用“/bin/mypackage/”或“/lib/myJar.jar!/”这样的普通字符串?(这样的URL指向我需要查询的JAR)

我知道我可以使用:

JarFile jarFile = (JarFile) resolvedURL.getContent();
然后

jarFile.entries()
获取Jar中的条目,但我对这个解决方案不满意,因为:1)我想找到一种通用的方法,如果捆绑资源在Jar中或不在Jar中,则独立请求捆绑资源(用if条件污染代码并不好笑)。2) 使用该解决方案,我无法使用诸如“*.class”之类的模式自动过滤资源

提前感谢您的帮助或反馈

更新:

显然,没有一个简单/有效的方法来做到这一点(!)——尽管我很想在这一点上犯错。我在这里找到了一个关于如何在IPath中转换URL的讨论:

(在讨论中,他们建议使用
Platform.asLocalURL().getPath()
,这一点到目前为止还不得人心,我尝试使用等效的
FileLocator.toFileURL().getPath

拥有
IPath
后,可以使用
FileLocator.findEntries(bundle,path)
从URL获取子条目。这种方法的问题在于,显然,如果您需要查询的资源在一个jar中(如我的例子),Eclipse会将其复制到您操作系统的某个地方。 此外,这也是应用程序的潜在瓶颈,
FileLocator.findEntries(bundle,path)
将失败,因为路径不再是bundle的真实路径,而是操作系统中某个缓存目录的路径


我很惊讶没有一个直接的方法来实现这一点。

更好的解决方案是使用新方法。此方法将在包含jar文件的包类路径中搜索
.class
文件等资源。

谢谢@BJ的回答。我试过了,但仍然需要在listResources方法中提供一个路径,我遇到的问题与我原来的问题相同:如何只查找特定Jar中包含的条目(资源)。到底为什么只需要查看捆绑包类路径中特定Jar中的条目?看起来你真的只想知道整个包类路径中所有的*.class资源,而不考虑它们来自哪个包类路径条目。嗨@BJ,我试图从Google扩展反射框架,以便在依赖外部jar库的Eclipse插件中使用它。长话短说:对于这个任务,我需要为符合我的包的不同jar创建一种目录结构。
jarFile.entries()