【问题标题】:How do I choose which library a class will be imported from in Java?如何在 Java 中选择从哪个库导入类?
【发布时间】:2016-07-25 01:24:10
【问题描述】:

我有两个版本的 Java 库 model.jar,每个版本都有相同的类集(但实现不同)。我想编写一个 Java 类,它从一个版本导入一些类,并从另一个版本导入一些类。

我知道我可以通过给它们不同的名称将它们包含在编译中:

javac -cp model.jar;model2.jar MyClass.java

但是任何import 语句都会从我在类路径中指定的第一个.jar 文件中导入相应的类。

如果两个文件的库结构相同,我可以在我的 import 语句中指定从哪个库导入吗?

【问题讨论】:

  • 这是个好问题。另一方面:带有类名的文件的路径应该清楚它的含义和用途。为什么会有两个具有相同路径/类名的类?
  • 不是答案,但这看起来像是一种不好的做法。 (@Stultuske OP 有同一个库的两个不同版本)
  • AFAIK,这根本不可能。
  • 我使用的是同一库的旧版本,因此具有相同的路径/类名。
  • 您可以为每个模块尝试不同的类加载器并使用这些类加载器访问正确的版本,但这仍然是一种糟糕的设计和灾难的接收。尝试不同包中的通用接口和实现。

标签: java


【解决方案1】:

这是不可能的(实际上,至少不是那么简单)。

根据您要实现的目标,如果您确实必须使用两个版本的库,您可以尝试使用 OSGiJboss-Modules 或类似的模块系统。

【讨论】:

    【解决方案2】:

    如果类具有相同的名称(包括包),除非您使用不同的类加载器,否则没有机会。 Java 将始终使用它在类路径中找到的第一个匹配类。

    此外,如果您在不同版本中使用相同的库,可能会出现令人讨厌的问题。你真的应该尝试用另一种方式解决这个问题。

    【讨论】:

      【解决方案3】:

      你不能喜欢这样。

      您唯一能做的就是使用脚本从这两个 jar 中生成一个带有您想要的类的 jar,然后将该 jar 放入类路径中

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多