12

关于 Clojure 提到 Maven 的文章/博客/问题/答案的数量之多,我有点惊讶。

作为一名 Java 开发人员,在桌面应用程序和 web 应用程序上工作了大约十年,我从来没有使用过一次 Maven(通常——这是个人意见,但我知道有些人确实有同样的想法——我的项目已经看到使用 Maven 包括“厨房水槽”,而那些使用更“受控”的构建过程构建的方式“更清洁”并产生更小的罐子,更快的构建时间等)。

当您想要构建 Clojure 应用程序时,是否需要 Maven?

当你想使用 Leiningen 时,Maven 是强制性的吗?例如,我可以“手动”将外部 jar 作为依赖项添加到 leiningen 项目,而不需要 Maven?

我认为我的问题可以归结为:在 Clojure/JVM 世界中,您是否可以在不使用 Maven 的情况下摆脱困境,就像您无需 Maven 就可以构建、测试、打包和发布 Java 桌面、Web 应用程序和 Android 应用程序一样?

4

4 回答 4

15

简短的回答:不。Clojure 只是一个 jar,您可以随意使用它作为“原始”,就像任何其他 Java 库一样。

更长的答案: Maven 不是必需的,但是围绕 Clojure 的工具,尤其是 Leiningen,是高度 Maven 对齐的,所以如果你服从 Maven 的意愿,你的生活会更轻松。但是,只要稍加努力,没有 Maven 也不会那么难相处。在工作中,我混合使用 Leiningen 和我们现有的基于 Ant/Ivy 的构建基础架构。我使用 Ant 来解决依赖关系(来自我们策划的内部 repo),然后使用 Leiningen 的 hack:resource-paths来获取非 Maven jar。在某个时候,我会制作一个真正的插件来做这些事情,但到目前为止它对我来说一直很好。

此外,如果您是 Eclipse 人员并使用 CounterClockwise,您可以像对待 Eclipse 中的任何其他 Java 项目一样对待您的项目,手动管理类路径。碰巧你也有一些 Clojure 代码。

当然,这两种方法的缺点是,如果你想从 Maven 中心或 Clojars 中获取可用的东西,你要么必须为你的基础设施设置某种镜像,要么手动拉下传递依赖并添加他们到你的项目。

于 2012-09-23T21:57:11.170 回答
5

就此而言,您不必使用 maven 或 leiningen。您可以运行 clojure REPL

 java -jar clojure-1.3.0.jar

它会工作得很好。我知道你来自哪里,因为一年前,我和你在同一条船上。从来没有使用过 maven,见过几个不太好的项目使用得不好,而且通常不信任 maven。Ant+ivy 效果很好,谁需要 maven?

由于使用了 leiningen,并开始了一项新工作,我们有一个很好的 maven 配置,我已经完全改变了我的风格;我现在认为 maven 很棒,并且更喜欢它而不是我已经使用了很长时间的 ant。

特别是 clojure,leiningen 的一些优点是:

  • automagic 项目脚手架:“lein new”为您设置一个新项目。约定很重要,它可以帮助其他开发人员了解您的项目并快速启动它。
  • 依赖和插件管理。添加依赖项是微不足道的,而且我知道没有一种很好的方法可以进行与 clojure 紧密集成的非 Maven 依赖项管理。
  • “lein repl” 正确设置了你的类路径和一切,所以你不必愚弄它,你可以启动并运行一个 REPL。
  • 工件创建:构建一个胖罐子 (lein uberjar) 很简单,并且已经为您设置好了。

因此,虽然在没有 leiningen 的情况下绝对可以使用 clojure,但老实说,我不明白您为什么要这样做。在我看来,日常开发有太多的好处不能使用它。

于 2012-09-23T22:09:09.513 回答
5

关于“当你想使用 Leiningen 时,Maven 是强制性的吗?”

leiningen 使用并包装了 Maven,因此您无法真正避免它,尽管您不需要接触任何 XML

于 2012-09-23T22:48:47.660 回答
5

正如其他人正确指出的那样,Clojure 并不强制使用 Maven。

但是,我想鼓励您接受 Maven(直接或通过 leiningen)。它在 Clojure 世界中具有一些很大的优势:

  • 从长远来看,您的工作效率会更高——一旦您完成了它的设置,看到一个复杂的构建、测试和部署在一个命令中执行是非常令人印象深刻的。您真的想要手动设置类路径、下载依赖项、增加版本号、上传到 FTP 站点等吗?
  • 在 JVM 上使用 Clojure 的最大优势之一是可以访问Java 库生态系统。Maven 是自动管理 Java 库依赖项的首选工具。您可能需要的几乎所有东西都在 Maven Central 或 Clojars 存储库中。
  • Clojure 往往有小型的集中库——这很好,因为它们“简单”,你可以选择你喜欢的功能。同时,这也意味着您可能在数字上拥有更多的库依赖项。因此,构建管理系统将更加有用。
  • 您可以根据需要使 Maven 构建变得“精益”。显然,如果您愿意,您可以在阳光下引入所有依赖项,但您也可以通过排除不必要的垃圾来创建非常精简的 jar。那是你的选择。
  • 它是Clojure 世界中的事实标准。如果不出意外,使用它意味着您将能够更轻松地与他人协作。

PS和你一样,5年前我并没有真正看到Maven的意义。然后我试了一下,看看它对我的工作流程有多么强大。现在我是一个皈依者:-)

于 2012-09-24T00:34:02.877 回答