【问题标题】:Best Practice for including 3rd party jars in a core library?在核心库中包含 3rd 方 jar 的最佳实践?
【发布时间】:2010-10-07 23:12:23
【问题描述】:

我们有一个核心库,我们将其作为 JAR 包含在我们所有的 Web 应用程序中,以最大限度地重复使用代码。现在我们想通过第 3 方库 (iText) 通过这个核心库包含一些功能。

将 iText JAR 添加到核心库不起作用,因为类加载器找不到嵌套的 JAR。我们不想将 iText JAR 添加到每个 Web 应用程序,因为 Web 应用程序不使用 iText,它们使用的是使用 iText 的库。语义?也许吧,但是将第三方 JAR 添加到 Web 应用程序以便它使用的库可以访问 JAR 中的类似乎很麻烦。

我是否缺少解决此问题的简单做法,还是 jar 合并和自定义类加载器是最佳方法?

【问题讨论】:

    标签: java jar


    【解决方案1】:

    EAR 可能是合适的选择。没有什么比另一层间接更重要了。

    【讨论】:

      【解决方案2】:

      欢迎来到 JAR 地狱,这是 Java 开发中一个持续存在的问题,也是 OSGi 获得成功的主要原因之一。直到最近,“凌乱”的方法才成为行业的标准,清洁方法的成本可能远远超过快速而肮脏的方法的成本。

      但要回答您的问题,大多数应用服务器都有一个地方可以放置可跨所有 Web 应用访问的 JARS。例如,Tomcat 有 common/lib 目录。你可能想把你的 JAR 放在那里。

      【讨论】:

        【解决方案3】:

        如果您分发战争,则必须将 iText jar 放入战争中。
        如果你分配耳朵,你可以将多个战争共有的所有罐子放在耳根内。
        如果 jar 对许多人来说是通用的,则可以选择将其放置在 Web 服务器库目录中。在我看来,最后一个选项是不推荐的,因为您可能在每个耳朵中使用不同版本的 jar,从而产生冲突,并且将 jar 放在服务器根目录中通常不是标准的分发机制。
        有一些工具可以重新打包您的所有库并将它们嵌入到单个 jar 中,例如 Jar Jar Links.
        最后,我推荐使用Maven 或类似的工具来管理你的依赖和自动化你的构建。随着依赖项的数量开始增长,它会很有帮助。

        【讨论】:

          猜你喜欢
          • 2017-11-02
          • 2011-06-07
          • 1970-01-01
          • 2017-03-05
          • 1970-01-01
          • 1970-01-01
          • 2014-04-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多