【问题标题】:Java - make a library and import optionalJava - 创建一个库并导入可选
【发布时间】:2013-05-25 05:52:52
【问题描述】:

我有一个在 Java 应用程序中使用的库 - 它对于某些功能很重要,但它是可选的。这意味着如果 JAR 文件不存在,程序将继续运行而不会出现问题。我想开源我的程序,但我不能包含这个库,这是编译源代码所必需的,因为我有许多导入语句来使用 API。我不想维护两个代码集。从开源版本中删除物理 jar 文件的最佳方法是什么,但仍保留代码以支持其他人仍可以编译它的地方?

【问题讨论】:

标签: java jar import code-organization


【解决方案1】:

采用的典型方法是定义包装 API(即接口)并将这些接口包含在开源代码中,然后提供配置选项,其中可以指定实现某些接口的类的类名。

您将导入 API 接口,而不是将类直接导入您的开源代码。这样,您将开源 API,而不是您不想开源或无法开源的部分的实现。

有很多示例,但请先了解一下 JDBC API(接口)和 JDBC 驱动程序(实现类)。

【讨论】:

    【解决方案2】:

    我几乎输入了与 smallworld 相同的内容,只是添加了一个内容。如果需要此 API,您可以使用 Maven 之类的项目构建工具来处理项目的依赖关系。如果有人使用 pom 从源代码控制中检查它,他们可以自己下载依赖项,而您不必将它们包含在源代码库中。

    【讨论】:

      【解决方案3】:

      可能有很多方法可以解决这个问题,我能想到以下几种:

      • 如果您只需要在 3rd 方库中调用几个方法,则可以使用反射来调用这些方法。它创建了非常冗长的代码,虽然很难阅读。

      • 如果您使用的第 3 方库中没有太多 API,您还可以创建一个单独的 JAR 文件,其中仅包含库中类的非功能外壳(只需键入具有相同的名称和具有相同签名的方法)。然后,您可以使用此 JAR 进行分发和编译。在运行时,如果可用,您可以将其替换为真正的 JAR。

      • 最常见的方法可能是在单独的模块/项目中为依赖于第三方库的代码创建一个包装 API,并可能分发一个预构建的 JAR。这可能违背您不维护两个代码集的意愿,但从长远来看可能会被证明是最好的且痛苦更少的解决方案。

      【讨论】:

        猜你喜欢
        • 2011-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-17
        • 2019-12-15
        • 1970-01-01
        • 2019-01-17
        相关资源
        最近更新 更多