【问题标题】:Is it OK for a jar file to appear twice in the classpath?jar 文件可以在类路径中出现两次吗?
【发布时间】:2012-05-09 22:27:21
【问题描述】:

我在一个文件夹中有一堆 jar,为了简化类路径设置,我使用了新的(在 Java 6 中)类路径通配符语法:

CLASSPATH=":/$JARS/*"

这将获取 $JARS 目录中的所有 jars。到目前为止一切顺利。

但是,该目录中有一个 jar,我需要首先出现在类路径中,通配符语法的文档指出 jar 的顺序取决于实现,不能依赖。

我想做的是在通配符前面添加我需要首先明确出现的一个 jar:

CLASSPATH=":/$JARS/first.jar:/$JARS/*"

现在这意味着first.jar 将在类路径中出现两次,首先是显式引用,然后是通配符。这会给我带来什么问题吗?

是的,我知道我可以将 first.jar 放入不同的目录以避免该问题,但可以说这样做会涉及很多我不想处理的麻烦(我正在处理使用第 3 方产品)。

编辑: 我需要首先出现 jar,因为它包含一些 XML 配置文件(作为资源加载),这些文件需要覆盖另一个 jar 中具有相同名称的 XML 文件(由第 3 方供应商提供)。澄清一下,first.jar 是我控制的唯一罐子。目录中的所有其他 jar 均由第 3 方供应商提供。

【问题讨论】:

  • 为什么要先出现?
  • @GuillaumePolet 我编辑了我的问题以回复您的评论。
  • 然后,更简洁的解决方案是将您的资源放在专用文件夹 /com/mycompany/README.txt (只是一个示例)中,这样您就可以确定加载的是您的资源.

标签: java jar classpath


【解决方案1】:

是的,相同的 jars/类可以在类路径中出现多次。 jvm 按顺序搜索它们。

关于这个问题的更多信息:How does JVM deal with duplicate JARs of different versions

【讨论】:

    【解决方案2】:

    会有一些问题。有时 JVM 可能工作正常,但有时它可能无法识别任何 jars。 最好在类路径中有一个 jar。

    【讨论】:

    • 这会导致问题。我亲身经历过。如果您的路径中有两次相同的依赖项,您可能会遇到问题。这些问题是断断续续的,很难找到根本原因。有时,一个 jar 的两个版本可能看起来相同,但一个类可能是用不同的 jdk 重新构建的,或者可能有代码更改。最好不要碰运气,只放一次。
    • 拥有同一个 jar 的 2 个版本与拥有相同版本两次不同(这是这里的问题)。如果您对版本有疑问,我建议您使用模块化系统,例如 OSGi。
    猜你喜欢
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 2012-02-15
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多