-1

最近我在 Stack Overflow 上发布了一个问题,寻找一些关于如何在Eclipse中创建具有依赖关系的JAR文件的说明。

当我提出这个问题时,我很快就发现我的问题措辞很糟糕,这让回答的人感到困惑,但那次事故引起了我想稍微解释一下的兴趣点。因此,当我发布关于如何在 Eclipse 中执行此操作的问题时,我几乎立即得到了响应“切换到Maven,不要依赖您的 IDE 来完成构建工具的工作”。这对我来说似乎有点回避而不是帮助,特别是考虑到我已经提到我已经在使用Ant为我的项目生成 JAR 文件。当我问为什么,我得到了回复“因为你的代码应该能够独立于编写代码的 IDE 构建”。

所以首先,以什么方式能够创建一个 JAR 文件,它的依赖关系要么在 JAR 文件中,要么在库文件夹中,使我的代码依赖于 IDE?

我的代码,无论有没有 dist 目录,仍然包含一个src目录,具有典型的 Java 源目录结构。这似乎是不合逻辑的。我觉得如果我说使用类库,并进行一些小的更改并需要部署到开发机器进行测试,我应该能够在我的 IDE 中轻松构建一个包含所有依赖项的 JAR 文件以进行部署它在某个地方。

拥有这种能力是构建步骤,而不是设计步骤。它不会改变源代码目录的结构,也不会改变任何关于代码的东西。它不会创建任何部分类或其他专门为我正在使用的 IDE 设计的鬼鬼祟祟的 Visual Studio 类型的东西;它只是请求一个具有有效清单及其依赖项的 JAR 文件。对 IDE 的要求真的那么多,还是我有这个错误?

在我看来,从一个 IDE 到另一个 IDE 的任何更改都需要一些转换工作。我用 Java 编写的代码没有明确说明给定程序集的位置,并且假设它不是某个 API,其在磁盘上的位置在安装期间被添加到环境变量中,您将始终必须手动解析这些引用。

如果我错了,请纠正我,但 Java 编译器不会强制执行源代码的目录结构(如果不正确则抛出 NoClassDef 类型异常),因此 IDE(至少对于 Java)是围绕该要求构建的?

我也觉得 IDE 的变化是一个罕见的事件。人们对他们的工具感到满意,而不是随机决定开始使用全新的 IDE,用于相同的项目,使用相同的语言。其他情况需要迫使一个人做出改变(新技术或其他)。

我还认为,许多开发人员在同一个地方工作、使用同一种语言并使用多个 IDE 的可能性几乎是不存在的。我工作过的每个地方,整个开发团队都使用相同的工具集,而开发团队正在从事相同类型的项目。Android 开发人员正在使用 Eclipse,ASP.NET开发人员正在使用 Visual Studio 等。我知道会发生这种情况,但根据我的经验,IDE 的更改通常意味着转换到最近发布的同一 IDE 的任何新版本,并且通常会出现具有某种类型的向后兼容性或转换向导。

我不想开玩笑,也不想攻击我之前帖子中涉及的人,我对他们的推理很感兴趣。鉴于他们的答案获得的赞成票数量,似乎大多数社区都同意,并且为了不成为绵羊,请帮助我理解。

4

1 回答 1

3

您通常希望有一种方法可以通过自动化构建工具从 IDE 外部构建 jar,因为它可以实现可重复的自动化过程。假设您从 Eclipse 构建 jar,并通过包含源代码和 lib 目录来实现。然后其他人去构建它,他们忘记包含 lib 目录。随着您的构建变得越来越复杂,可能难以追踪问题。

例如,如果您在构建服务器上运行代码,则没有 ide,因此需要一种自动构建它的方法。您当然可以编写自己的脚本,但是有专门的工具可以让这变得更容易——即 gradle、maven 和 ant(无论如何在 java 世界中)。

您始终可以在 IDE 中使用该构建脚本,但需要有一种方法可以在没有 IDE 的情况下进行构建,并且所有构建都应该是一致的。

像 maven 这样的工具不仅可以构建,还可以帮助管理依赖关系。使用存储库管理器来存储您的项目需要的工件,因此您无需担心拥有 lib 文件夹并手动管理您的依赖项。您只需说出您想要什么,构建工具就会知道如何获得它。

能够快速构建也很重要。运行构建脚本比手动打包要快得多。

希望这可以让您深入了解为什么其他人建议使用构建工具。这是个好主意,任何严肃的项目都需要它们。

于 2013-04-11T18:59:23.033 回答