我不确定问题的标题是否正确,但请阅读问题。
在我的大部分工作生涯中(接近 11 年),我一直在研究 C/C++。我们只有 C/C++ 源/头文件,所有依赖项都由 Makefile 管理。事情很简单且易于管理。
在过去的 1.5 年里,我已经转移到 Java 领域。我感到非常恼火的是,使用任何新事物最困难的方面是依赖管理器。例如 maven、leiningen、builder、sbt 等等等。
每当我从开源世界下载任何新东西时,都会花费大量时间来设置编译、构建、运行环境。当我使用eclipse时也是如此。为什么不能将所有依赖项与要下载的软件一起放置?为什么像 maven、leiningen 等工具必须建立单独的 Internet 连接才能下载依赖项。我知道 maven 形成了一个本地存储库,并且应该能够在本地找到依赖项,因为它无论如何都会下载整个互联网,但是为什么要使用这个模型。我在防火墙后面,并非所有内容都可以访问,并且这些工具无法下载依赖项。我确信在大多数工作环境中都存在同样的情况。
最近我开始使用 clojure,而男孩为 clojure 配置 eclipse 一直很痛苦。leiningen 应该是某种魔法,必须与任何 clojure 开发一起使用。有时感觉学习 leiningen 比学习 clojure 的概念更重要。我为 leiningen 下载了所谓的“独立”jar 文件,因为“自行安装”对我不起作用。但它愚弄了我。一旦我运行“lein”命令,它就会建立互联网连接并尝试下载一些东西。为什么?它甚至不会在不连接互联网的情况下打印帮助菜单。为什么?我不知道,如果不绕过我的互联网防火墙,我就无法满足它的要求,也没有人能告诉我这个家伙想要什么。根本没有别的办法。
每个人似乎都在发明自己的东西。Java 有简单的 ant,然后去了 Maven,一些项目使用基于 Ruby 的 Builder,Clojure 有 leiningen,Scala 有 sbt。Go 还有别的东西。为什么?为什么我们在一个已经充满复杂性的世界中需要这种额外的复杂性。为什么不能只有一个工具。
所有Java技术专家请原谅我的咆哮。我相信这个问题会因为那些没有努力理解这些事情的人而被否决和关闭。但请相信我,我已经花了足够多的时间与这种不必要的复杂性作斗争。
我只是想知道其他人如何解决这个问题,或者我是唯一一个面临这些问题的不幸者。