【问题标题】:What is the most elegant solution to managing various Java external libraries?管理各种 Java 外部库的最优雅的解决方案是什么?
【发布时间】:2010-11-28 14:50:47
【问题描述】:

也许我直到现在才停止学习 Java 的原因是因为我讨厌 Java 如何处理外部库。我被困在一个地方,单独添加它们,修复版本控制问题以及每次移动/重命名它们,以及每次发布 Java 应用程序时一遍又一遍地复制和编写类路径。

必须有一个优雅的解决方案来解决所有这些问题。我将所有库(无论任务、平台或其他)都保存在我的开发文件夹中的“lib”文件夹中自己的小文件夹中,有点像这样:

Dev
  -lib
    +JS-jQuery
    +Flex-Degrafa
    -Java-Xerces
      +Xerces-1.2.3
    +More libraries

我可以将 Netbeans 或 Eclipse 用于 Java 开发,但它们都没有提供一种非常精简(更不用说防白痴)的方式来管理所有这些。

非常感谢您朝正确方向轻推或提供有关此内容的在线文章/教程。

【问题讨论】:

    标签: java eclipse netbeans jar libraries


    【解决方案1】:

    您可以使用Ant + IvyMaven 来管理您的库依赖项。

    【讨论】:

    • +1 for maven than can generate IDE specific files (so you get IDE Independent) like Eclipse's .classpath and .project.
    • @Pascal T:Netbeans 直接读取 Maven 文件并将它们用于项目配置,而不是转换为特定于 IDE 的文件。
    • 这很好,但老实说,生成 IDE 特定文件并不是我每天要做 10 次的事情,所以这对我来说没什么大不了的。此外,我不太喜欢使用向导来管理我的 pom.xml 文件,我更喜欢手动操作,因此我不关心内置支持或插件。换句话说,这只是我的观点,我认为我们可以没有它。
    • maven 插件不需要你使用 pom.xml 向导。内置编辑器包括一个“源”选项卡,可让您直接编辑 xml。 IAM 甚至允许您将源选项卡设置为默认选项卡。
    【解决方案2】:

    如果您只追求依赖管理并且您对构建过程的其余部分感到满意​​,我会使用Ivy,因为它可以不显眼地管理您的依赖关系,而使您现有的构建过程保持不变。 Eclipse 有一个名为 IvyIDE 的插件,它通过类路径容器贡献您的依赖项。

    Maven 2 的学习曲线更陡峭,但通过m2eclipseIAM 为构建项目和Eclipse 集成提供了更丰富的功能。

    我个人使用 Maven,因为我要处理大量项目,而 Maven 特别适合跨大量项目进行高效开发。

    查看介绍性文档,了解适合您的方法。

    【讨论】:

      【解决方案3】:

      Netbeans 6.7.1 的 Maven 支持非常好,并且与 IDE 一起开箱即用。

      Eclipse 插件非常令人沮丧,我再次尝试了 Netbeans。

      除了 ChssPly76 的选项之外,第三个选择是将 Ant 与 Maven Ant Tasks 一起使用。我不知道我是否会将这些解决方案中的任何一个称为特别“优雅”,但它们确实让您无需管理自己的 lib/ 目录和类路径变量。

      【讨论】:

        【解决方案4】:

        如果您在 Linux 上工作,则可以使用 APT 或 RPM 安装 Java 库。

        否则,我通常会将预编译的 JAR 检入项目版本控制存储库中的 lib 目录中,并确保 JAR 文件的名称包含完整的版本信息。例如。 lib/foo-1.5.6.jar,而不是 lib/foo.jar。

        为避免在运行应用程序之前手动设置类路径,您可以在 JAR 本身的清单中设置类路径来定义每个 JAR 文件的依赖关系。 JVM在加载类的时候会遵循所有的依赖。

        【讨论】:

          【解决方案5】:

          Maven 通常麻烦多于其价值,但是直接在 IntelliJ 等 IDE 中打开 maven 项目的能力非常出色。例如,IntelliJ 将下载所有依赖项并使它们可用,而无需先运行构建或 mvn 命令然后刷新项目。每次添加依赖项时也不必重新生成项目。我与许多 Eclipse 开发人员一起工作,他们仅为此而转向 IntelliJ。

          然而,Maven 的一个不足之处是许多库(或库的版本)在公共存储库中不可用。因此,通常需要设置一个本地存储库,例如archiva。在 ant 中,只需将其添加到存储库中的 lib 目录即可。

          当你需要做一些 Maven 不通过插件直接支持的事情时,Maven 也可以攻击。通常几行蚂蚁的工作通常会变成一个上午的工作。

          最后,buildr 是使用 Maven 的依赖管理和插件的绝佳方式,同时还支持临时任务。

          【讨论】:

          • “关于 Maven 附加值的主观观点” - 完全不是主观的,它基于在多个项目上维护 maven 构建的真实世界经验。 “关于 IDE 优势的坏/不相关的论点” - 不相关?我建议如果您使用 maven 而不是 ant,则使用某些类型的 IDE 会帮助您。再一次,这是基于观察人们与 Maven 斗争的真实经验。 “过时的建议(选择 Nexus,而不是 Archiva)” - 过时了吗?不,只是主观的。此外,这不是建议。
          猜你喜欢
          • 2011-03-31
          • 2021-10-18
          • 2021-11-02
          • 2012-12-20
          • 2022-01-03
          • 1970-01-01
          • 2011-01-29
          • 2010-10-04
          • 2016-09-09
          相关资源
          最近更新 更多