Java 源代码的IDE独立性-例如Eclipse之外

Java 源代码的IDE独立性-例如Eclipse之外,java,ide,Java,Ide,最近,我在这里发布了一个关于堆栈溢出的问题,希望获得一些关于如何在中创建具有依赖项的文件的说明 当我提出这个问题时,很快就发现我的问题措词不当,让回答问题的人感到困惑,但那次事故引发了一个我想解释一下的兴趣点。因此,当我在Eclipse中发布关于如何实现这一点的问题时,我几乎立即得到了回答“切换到,不要依赖IDE来完成构建工具的工作”。这对我来说似乎有点避而不谈,而不是有所帮助,特别是考虑到我提到我已经在使用它为我的项目生成JAR文件。当我问为什么时,我得到了回复:“因为您的代码应该能够独立于编

最近,我在这里发布了一个关于堆栈溢出的问题,希望获得一些关于如何在中创建具有依赖项的文件的说明

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

那么,首先,如何才能创建一个JAR文件,它的依赖项要么在JAR文件中,要么在库文件夹中,使我的代码依赖于IDE

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

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

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

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

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

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


我不是想开玩笑,也不是想刺伤我之前帖子中涉及的人,我对他们的推理有着正当的兴趣。考虑到他们的答案所获得的投票数,似乎大多数社区都同意,为了不成为一只羊,请帮助我理解。

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

例如,如果您在构建服务器上运行代码,则没有ide,因此需要有一种自动构建代码的方法。当然,您可以使用自己的脚本,但是有一些工具专门用于简化这一过程,即gradle、maven和ant(无论如何,在java世界中)

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

像maven这样的工具不仅仅用于构建,还可以帮助管理依赖关系。使用存储库管理器来存储项目所需的工件,这样您就不必担心有一个lib文件夹和手动管理依赖项。你只需说出你想要的,构建工具就会知道如何得到它

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


希望这能让我们了解为什么其他人推荐使用构建工具。这是一个好主意,任何严肃的项目都需要它们。

这里面有什么问题吗?在独立的build/CI服务器上构建项目可以带来巨大的好处。这通常是使您的项目独立于IDE的充分理由。鉴于您的最后一个问题是关于您有多讨厌Eclipse的长时间抱怨,如果您在代码结构中没有看到IDE独立性的价值,我会感到惊讶。Paul同意,但正如我提到的,我正在使用Ant。我为IDE编写的ant构建脚本可以很容易地部署到构建服务器上。我仍然不明白这是如何使我的代码依赖于IDE的。@Perception,这没有帮助,也不是抱怨。我只是在前面提到我不喜欢eclipse