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

Java 在Eclipse中为REPL和应用程序部署设置Clojure代码,java,eclipse,deployment,maven,clojure,Java,Eclipse,Deployment,Maven,Clojure,我大部分时间都在使用REPL开发一些多语言Java+Clojure代码(在Eclipse中使用逆时针和Maven)。在这种情况下,只需在REPL中加载源代码并开始与代码交互就可以了 但是,我最终希望能够在.jar文件或类似文件中分发和部署代码,以便它可以作为独立的应用程序运行。在这种情况下,代码需要作为Java应用程序执行,并具有相应的main(…)函数。我希望所有这些都能从Maven pom.xml文件干净地构建 到目前为止,我已经让代码正常工作了,因此我有一个-main函数,当我在REPL中

我大部分时间都在使用REPL开发一些多语言Java+Clojure代码(在Eclipse中使用逆时针和Maven)。在这种情况下,只需在REPL中加载源代码并开始与代码交互就可以了

但是,我最终希望能够在.jar文件或类似文件中分发和部署代码,以便它可以作为独立的应用程序运行。在这种情况下,代码需要作为Java应用程序执行,并具有相应的
main(…)
函数。我希望所有这些都能从Maven pom.xml文件干净地构建

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

理想情况下,我希望在以下两个方面都能顺利进行:

  • 逆时针方向的REPL
  • 一个标准的Maven构建过程,它生成一个完全打包/部署的jar文件

设置Clojure代码库的最佳实践是什么,以便在REPL和构建独立应用程序时都可以轻松使用它?

唯一可能影响REPL体验的是顶级副作用语句,当REPL需要名称空间时,该语句不应运行,而应出现在名称空间中在REPL中可能需要(可能间接地)哪一个。显然,这只是一个坏主意(如果它在某种程度上看起来是一种有用的安排——例如,使用Leiningen的复杂挂钩——那么名称空间可能应该被拆分为包含定义的名称空间和包含副作用代码的名称空间)

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

  • Clojure的主要入口点
  • 不要介意Clojure代码的AOT编译
  • 宁愿避免AOT
  • Java中的主要入口点(通过
    Clojure.lang.RT
    调用Clojure stuff)

  • 对于1.1。自然的方法是使用
    :gen class
    'd名称空间作为应用程序jar的
    manifest.mf
    中的
    主类。然后您可以使用
    java-jar
    (如果它是一个überjar/独立jar)/
    java-cp谢谢Michal-非常有用,很高兴看到所有可行选项的枚举!别担心。祝贺[clojure]徽章!:-)谢谢虽然还不确定我是否值得,但似乎还有很多东西要学!!