在Eclipse中为REPL和应用程序部署设置Clojure代码

时间:2012-02-19 02:05:59

标签: java eclipse deployment maven clojure

我正在使用REPL开发一些多语言Java + Clojure代码(在Eclipse中使用CounterClockwise和Maven)。在这种情况下,只需在REPL中加载源并开始与代码交互即可。

但是,我最终希望能够在.jar文件或类似文件中分发和部署代码,以便它可以作为独立应用程序运行。在此上下文中,代码需要作为具有适当main(...)函数的Java应用程序执行。我希望从Maven pom.xml文件中完全构建它。

到目前为止,我已经有了代码工作,所以我有一个-main函数,当我在REPL上使用Clojure时不会被调用,但是当打包/部署为jar时应该调用它。这似乎有效,但我不确定这是否代表最佳方法。

理想情况下,我希望一切顺利进行:

  • 逆时针REPL
  • 标准Maven构建过程,该过程产生完全打包/部署的jar文件

设置Clojure代码库的最佳做法是什么,以便可以在REPL中轻松使用并构建独立应用程序?

1 个答案:

答案 0 :(得分:3)

唯一可能干扰REPL体验的是一个顶级的副作用语句,当REPL需要名称空间并且发生在一个人们可能希望拥有的命名空间(可能是间接的)时,它不应该运行REPL要求。显然,这只是一个坏主意(如果似乎在某种程度上是一种有用的安排 - 例如,对于Leiningen的复杂钩子 - 命名空间应该被分成包含定义的命名空间和命名空间副作用代码)。

运行应用程序的自然模式取决于它属于以下哪个类:

  1. Clojure的主要切入点
    1. 不介意AOT编译Clojure代码
    2. 更愿意避免AOT
  2. Java中的主要入口点(通过clojure.lang.RT调用Clojure的东西)
  3. 1.1。自然的方法是在应用程序的jar :gen-class中使用Main-Class'd命名空间作为manifest.mf。然后你可以使用java -jar(如果它是一个überjar/独立jar)/ java -cp <app's cp> app.main来启动它。如果您在:main中指定project.clj属性,Leiningen会对此有所帮助;看看它是最受欢迎的构建工具,它支持这种方法的选择(据我所知)不会引起任何批评,人们可能会称它为惯用语。 Maven可以使用通常的pom.xml咒语指定主类。

    对于1.2。,你可以做Leiningen所做的事情:提供一个包含clojure.main -e "(use 'app.core)(-main)"的包装器作为参数。

    对于2.,没有任何关于发布的特定Clojure。