如何从clojure代码构build可执行的jar? 在一个程序中具有java的主要function

我如何从clojure代码构build一个可执行的jar文件?

我希望它有一个主要的function,以便java -jar jarfile.jar运行该程序。

正如Erhan Bagdemir回答,你应该使用Leiningen。 以下是我在Windows上的操作方法:

在Windows上安装Leiningen

您将要下载Leiningen脚本,并把它放在PATH某处。 如果您的路径上已有用于执行脚本的文件夹,请执行以下操作:

  1. 从Github下载Leiningen软件包 。
  2. 将其解压到您的主文件夹(例如/Users/vikbehal
  3. 将通过解压缩创建的文件夹添加到您的PATH 。 为此,请打开“控制面板”,然后转至“系统”区域,您可以在其中编辑环境变量。 通过向PATH添加/Users/vikbehal/lein (或任何文件夹被调用)编辑系统或用户的PATH值,确保通过分号( ; )将其与其他分隔开。
  4. Ok保存您的更改。

您可以通过打开命令提示符并运行lein help来验证您是否成功安装了Leiningen。 您应该看到Leiningen安装一些初始文件。 如果出现错误,请确保已将Leiningen所在的文件夹正确添加到PATH

使用Leiningen开发

Leiningen为您提供了一个良好的默认目录结构,处理依赖关系管理,并确保在运行REPL时Java的类路径已经正确设置,或者在这种情况下,使您的应用程序震动。

这里是Leiningen标准命令的破解:

 # Start a blank project lein new my-project # Pull down dependencies defined in your project.clj file lein deps # Create a "library" jar of your project lein jar # Create an executable jar of your project lein uberjar 

看起来上一个命令是你想要的,对吗? 首先,你需要配置一些东西,这样Leiningen可以正确地构建你的可执行文件。

配置可执行/独立Jar

你需要做三件事情,使lein uberjar正常工作:

  1. 编写一个-main函数,作为执行你的jar文件的“入口点”。 (注意-这表示这个函数比普通的Clojure函数更像是一个“Java方法”。)
  2. 确保在包含-main函数的文件顶部的ns名称空间声明中添加(:gen-class :main true)声明。
  3. 在你的project.clj添加一个:main my.main.namespace条目

现在跑lein uberjar 。 在开发过程中,如果要测试应用程序的行为如同一个可执行的jar,但是不想在每次更改时都显式地重新使用jar,那么也可以使用lein run

只是为了变化我,虽然我会提到那些谁想要保持他们的Java根源的Maven clojure插件 。