0

一般问题:在没有固定位置的 JAR 文件中查找/定位资源文件 (document.xml),甚至文件名也是未知的。

情况:两个 JavaSE 项目,都创建了自己的 JAR 文件。Jar-A在 jar 中的某处保存一个 xml 文档(位置未知)。Jar-B想要求JarA交出文件进行某项操作(例如设置信息)。调用者 Jar-B不知道资源/文件是如何被调用的,以及它的当前位置在哪里Jar-A

要求:Jar-B应该依赖于资源/文件的固定位置, Jar-A因为资源可以在Jar-A. Jar-B应该询问Jar-A文件在哪里以及它正在寻找的文件是如何被调用的。

可能的解决方向:该META-INF目录始终包含一个MANIFETS.MF带有键/值对的文件。因此,如果我存储一个名为“ResourceLocator”的键和一个类似“org.my.package.ResourceLocator.class”的值,那么Jar-B可以找到它可以加载的类来实例化一个定位器对象,该对象可以给出正确的名称和位置它正在寻找的文件,对吗?

资源定位器可用于以这种方式查找更多值。

在 中拥有一个资源定位器对象Jar-A,只需要记录引用“事物”的键,但实际实现与外部世界是分离的。

我想知道这是否是处理这种查找的好方法?我已经知道了Netbeans Lookup API,但是需要一个类/接口名称来进行查找。这不是我现在正在寻找的。

在搜索未知的资源时如何确保Jar-A和保持解耦的任何想法?Jar-B

注意:这不是一些服务加载器或扩展机制,因为那将是相反的方式:Jar-B需要由Jar-A. 这不是这里的情况。Jar-A不知道有任何存在Jar-B

希望有人已经遇到过这个“问题”。请分享您的想法...谢谢!

链接到 JAR 规范:这里

4

2 回答 2

1

JAR 是 ZIP。Java 有不错的原生支持——看起来足够稳固——可以打开 JAR-A 并浏览里面的文件(ZipFile.entries Enumeration。)

假设您可以在文件系统上找到 JAR-A,根据您的描述,我猜测 JAB-B 确切地知道 JAR-A 的位置。

于 2012-07-31T18:22:47.637 回答
0

Jar-A 在内部使用getClass().getResource()或访问资源文件getClass().getResourceAsStream(),以更合适的为准。

Jar-B 使用 Jar-A 公开定义的访问方法访问资源文件。换句话说,Jar-A 被添加到 Jar-B 的类路径中,并且 Jar-B 中的一个方法使用public Resource getMethod();访问资源文件。

于 2012-07-31T18:54:07.423 回答