在JVM上,Clojure是否必须使用Maven?

13

对于提到 Maven 的 Clojure 文章/博客/问题/答案的数量,我有些惊讶。

作为一名 Java 开发人员,在桌面应用程序和 Web 应用程序上工作约十年时间,我从未使用过 Maven(通常情况下——这是我的个人观点,但我知道有些人持相同看法——我见过的使用 Maven 的项目都包含了“厨房水槽”,而使用更加“控制”的构建过程构建的项目则更加“干净”,生成的 JAR 包更小、构建速度更快等等)。

在构建 Clojure 应用程序时,Maven 是必需的吗?

当你想要使用 Leiningen 时,Maven 是必需的吗?例如,我能否手动将外部 JAR 包添加为 Leiningen 项目的依赖项,而不需要使用 Maven?

我认为我的问题归结为这个:在 Clojure/JVM 的世界中,你是否可以像构建、测试、打包和发布 Java 桌面应用程序、Web 应用程序和 Android 应用程序一样,完全不需要使用 Maven?

4个回答

15
简短回答:不需要。Clojure只是一个jar文件,你可以像使用其他Java库一样"原始"地使用它。
详细回答:虽然Maven不是必需的,但与Clojure相关的工具特别是Leiningen高度依赖于Maven,因此如果您遵循Maven的规则,您的生活会更加轻松。但是,稍作努力,没有Maven也不难入门。在工作中,我使用Leiningen和我们现有的Ant/Ivy构建基础设施的混合方式。我使用Ant来解决依赖关系(从我们策划好的内部仓库),然后使用Leiningen的:resource-paths来获取它挑选出的非Maven jar文件。我会在某个时候制作一个真正的插件来处理这些内容,但到目前为止,这对我来说已经运行得很好了。
另外,如果你是Eclipse用户并且使用CounterClockwise,你可以像管理其他Java项目那样手动管理classpath,并在其中添加Clojure代码。
当然,无论采用哪种方法,缺点是如果您想获取Maven Central或Clojars上可用的内容,您将必须设置某种镜像,或手动下载传递依赖项并将它们添加到您的项目中。

3
Leiningen在底层使用Maven,大部分时间你不需要知道或者关心它的存在。 - BillRobertson42
是的,但它假设构件在Maven仓库中。 - Dave Ray
这就是为什么我说大多数情况下。 :-) 另外,顺便点个赞。 - BillRobertson42

6

Maven并非Clojure开发必备工具,正如其他人所指出的。

但是,我希望鼓励您采用Maven(可以直接使用或通过leiningen使用)。在Clojure世界中,它有一些很大的优势:

  • 长期来看,您将更加高效——设置完毕后,一个复杂的构建、测试和部署执行只需一个命令即可。你真的想手动设置类路径、下载依赖项、递增版本号、上传FTP站点等吗?
  • 使用JVM上的Clojure最大的好处之一是可以访问Java库生态系统。 Maven是自动管理Java库依赖项的首选工具。几乎所有你需要的东西都可以在Maven Central或Clojars存储库中找到。
  • Clojure倾向于有小而专注的库——这很好,因为它们是“简单的”,你可以选择你喜欢的功能。同时,这也意味着你可能会有更多的库依赖。因此,一个构建管理系统会更有用。
  • 你可以使Maven构建尽量精简。显然,如果你愿意,你可以拉取每个依赖关系,但是你也可以通过排除不必要的内容创建非常精简的jar。这取决于你的选择。
  • 在Clojure世界中,Maven是事实上的标准。即使没有其他原因,使用它也意味着您将能够更轻松地与其他人合作

P.S. 像您一样,5年前我真的看不出Maven的意义。然后我尝试了一下,并看到了它对我的工作流程有多么强大。现在我成为了它的拥护者 :-)


5

您不必使用Maven或Leiningen。您可以使用Clojure REPL运行。

 java -jar clojure-1.3.0.jar

它会正常工作。我知道你的想法,因为一年前,我和你一样。从未使用过maven,看到了一些不太好的项目,这些项目使用它很差,通常不信任maven。Ant+ivy很好用,谁需要maven呢?

由于使用leiningen,并开始一份新工作,我们有一个非常好的设置的maven配置,我已经完全改变了我的想法;我现在认为maven很棒,而且远远优于ant,我已经使用它很长时间了。

具体来说,对于clojure,leiningen的一些优点是:

  • 自动创建项目脚手架:"lein new"为您设置新项目。约定很重要,它可以帮助其他开发人员理解您的项目并快速上手。
  • 依赖项和插件管理。添加依赖项很简单,并且我不知道有什么很好的方法可以进行与clojure紧密集成的非maven依赖项管理。
  • "lein repl"正确设置类路径和所有内容,因此您无需费力处理它,只需启动和运行REPL。
  • 构建artifact:构建fat jar(lein uberjar)很简单,而且已经为您设置好了。

因此,虽然在没有leiningen的情况下使用clojure肯定是可能的,但我真的不明白为什么你要这样做。在我的看法中,日常开发有太多的好处不使用它。


5

关于“想使用Leiningen时是否必须使用Maven?”

Leiningen使用并包装了Maven,因此您无法完全避免它,但您不需要接触任何XML。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接