将Clojure项目作为应用程序发布的最佳方法是使用lein uberjar创建包含所有依赖项的独立jar.任何具有兼容jvm的用户都可以运行java -jar your-uberjar.jar以运行您的应用程序.
如果您的应用程序以期望项目目录的内容在运行时存在的方式编写,则会出现一些复杂情况.clojure.java.io/resource允许使用资源,无论它们是否存在于当前目录树中,还是打包到包含您的应用程序的uberjar中.
通过使用 :main 指定核心名称空间(即 app.core)作为为 jar 文件调用的主类,将项目设置为作为独立 Java 应用程序运行。另外,添加用于AOT编译的uberjar配置文件。
项目.clj:
(defproject app "1.0.0-SNAPSHOT"
:description "app Example."
:dependencies
[[org.clojure/clojure "1.8.0"]]
:profiles {:uberjar {:aot :all}}
:main app.core)
Run Code Online (Sandbox Code Playgroud)
确保您在程序的名称空间中指定了 :gen-class 。还定义一个 -main 函数作为主入口点。
src/app/core.clj:
(ns app.core
(:gen-class))
(defn -main [& args]
(dostuff ""))
Run Code Online (Sandbox Code Playgroud)
然后使用 Packr ( https://github.com/libgdx/packr ),这是一个用于打包 JAR、资产和 JVM 的小应用程序,以便在 Windows、Linux 和 Mac OS X 上分发。
创建 Packr 配置文件。
配置.json
{
"platform": "mac",
"jdk": "/Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home/",
"executable": "My App",
"classpath": [
"target/app-1.0.0-SNAPSHOT-standalone.jar"
],
"mainclass": "app.core",
"icon": "resources/icon.icns",
"minimizejre": "soft",
"output": "myapp.app"
}
Run Code Online (Sandbox Code Playgroud)
然后运行
$ lein uberjar
$ java -jar packr.jar config.json
Run Code Online (Sandbox Code Playgroud)
您现在将拥有一个可以作为本机应用程序分发的包。此过程非常适合 GUI 应用程序。抱歉我对瓦拉一无所知。
| 归档时间: |
|
| 查看次数: |
319 次 |
| 最近记录: |