对于JVM上的Clojure,Maven是强制性的吗?

Ced*_*tin 10 clojure maven leiningen

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

在作为Java开发人员工作大约十年的时间里,从事桌面应用程序和webapps工作,我从未使用Maven一次(通常 - 这是个人意见,但我知道有些人的想法是相同的 - 我的项目'已经看到使用Maven包括"厨房水槽",而那些建造了更"控制"的构建过程,其中"更清洁",生产更小的罐子,更快的构建时间等).

当你想要构建一个Clojure应用程序时Maven是一个要求吗?

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

我认为我的问题归结为:你可以在Clojure/JVM世界中逃脱而不使用Maven,就像你可以构建,测试,打包和发送Java桌面,webapps和Android应用程序而不需要Maven一样吗?

Dav*_*Ray 14

简短的回答:没有.Clojure只是一个jar,您可以像任何其他Java库一样使用它作为"原始".

更长的答案:Maven并不是一个要求,但Clojure周围的工具,特别是Leiningen,是高度Maven对齐的,所以如果你只是服从Maven的意愿,你的生活会更容易.但是,通过一点点工作,没有Maven就不那么难相处.在工作中,我使用了Leiningen和我们现有的基于Ant/Ivy的构建基础架构.我使用Ant来解决依赖关系(来自我们策划的内部仓库),然后使用Leiningen的hack :resource-paths来获取它来获取非Maven罐子.在某些时候我会做一个真正的插件来做这些事情,但到目前为止它一直对我很好.

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

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

  • Leiningen在引擎盖下使用maven,大多数时候你不必知道或关心它就在那里. (3认同)

Pau*_*ald 5

你不必使用maven或leiningen.你可以运行clojure REPL

 java -jar clojure-1.3.0.jar
Run Code Online (Sandbox Code Playgroud)

它会工作得很好.我知道你来自哪里,因为一年前,我和你在同一条船上.从未使用过maven,看过几个不太好的项目,使用它很差,而且一般不信任maven.Ant + ivy很棒,谁需要maven?

由于使用了leiningen,并开始了我们有一个非常好的设置maven配置的新工作,我完全改变了我的调子; 我现在认为maven是伟大的,而且我更喜欢蚂蚁,我已经使用了很长时间.

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

  • 自动化项目脚手架:"lein new"为您设立了一个新项目.惯例很重要,它可以帮助其他开发人员了解您的项目并快速提升它.
  • 依赖和插件管理.添加一个依赖是微不足道的,并且我没有很好的方法来做与clojure紧密集成的非maven依赖管理.
  • "lein repl"正确设置你的类路径和一切,所以你不必愚弄它,你可以启动并运行一个REPL.
  • 神器创造:建造一个胖罐(lein uberjar)很简单,已经为你设置了.

所以,虽然没有leiningen肯定可以使用clojure,但老实说,我不明白为什么你会这么想.在我看来,在日常开发中有太多的好处,不使用它.


Art*_*ldt 5

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

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


mik*_*era 5

正如其他人正确指出的那样,Maven 不是 Clojure 的强制性要求。

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

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

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