Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何分发Clojure GUI应用程序?Clojure在这方面与Vala相比如何?_Clojure_Release_Vala - Fatal编程技术网

如何分发Clojure GUI应用程序?Clojure在这方面与Vala相比如何?

如何分发Clojure GUI应用程序?Clojure在这方面与Vala相比如何?,clojure,release,vala,Clojure,Release,Vala,这里有两个问题 因此,我用Clojure(使用)在几分钟内构建了一个简单的GUI应用程序,这真的很有趣!但现在我不知道如何真正释放它。我想它作为一个独立的应用程序运行。我应该如何“编译”和分发Clojure GUI应用程序 我也对Vala感兴趣,想知道两种语言的发布过程有多不同。从发布/分发的角度来看,双方的优缺点是什么?将Clojure项目发布为应用程序的最佳方法是使用lein uberjar创建一个包含所有依赖项的独立jar。任何具有兼容jvm的用户都可以运行uberjar.jar来运行应用

这里有两个问题

因此,我用Clojure(使用)在几分钟内构建了一个简单的GUI应用程序,这真的很有趣!但现在我不知道如何真正释放它。我想它作为一个独立的应用程序运行。我应该如何“编译”和分发Clojure GUI应用程序


我也对Vala感兴趣,想知道两种语言的发布过程有多不同。从发布/分发的角度来看,双方的优缺点是什么?

将Clojure项目发布为应用程序的最佳方法是使用
lein uberjar
创建一个包含所有依赖项的独立jar。任何具有兼容jvm的用户都可以运行uberjar.jar来运行应用程序


如果应用程序的编写方式要求项目目录的内容在运行时存在,则会出现一些复杂情况
clojure.java.io/resource
允许使用资源,无论这些资源是否存在于当前目录树中,或者打包到包含应用程序的uberjar中。

Vala项目通常由项目作为源tarball分发。大多数Vala项目使用自动工具作为其构建系统;设置自动工具后,只需键入
make dist
to即可为您创建一个


如果对您的软件有需求,那么该tarball将由其打包人员打包用于各种发行版,以便人们可以通过发行版使用的任何软件包管理器安装它(即,在Debian/Ubuntu上安装您的pkg,
yum在Fedora、Red Hat、OpenSUSE上安装您的pkg
)或者一个GUI,例如。

通过使用:main指定核心名称空间(即app.core)作为jar文件调用的主类,将项目设置为作为独立Java应用程序运行。此外,为AOT编译添加uberjar配置文件

project.clj:

(defproject app "1.0.0-SNAPSHOT"
  :description "app Example."
  :dependencies
    [[org.clojure/clojure "1.8.0"]]
  :profiles {:uberjar {:aot :all}}
  :main app.core)
确保在程序的名称空间中指定了:gen类。还定义一个-main函数作为主入口点

src/app/core.clj:

(ns app.core
  (:gen-class))

(defn -main [& args]
  (dostuff ""))
然后使用Packr(),这是一个小型应用程序,用于打包JAR、资产和JVM,以便在Windows、Linux和macosx上分发

创建Packr配置文件

config.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"
}
然后跑

$ lein uberjar
$ java -jar packr.jar config.json

现在,您将拥有一个可以作为本机应用程序分发的包。这个过程适用于GUI应用程序。很抱歉,我对Vala一无所知。

我非常喜欢您的答案,也很愿意接受,但它与Vala GUI应用程序部署没有任何可比性。很抱歉,我没有资格评论Vala部署的最新技术、Vala的库版本问题、Vala的跨平台兼容性问题,等等。我从经验中确实知道,lein制作的uberjar将在任何足够版本的jvm上运行(1.6+通常就足够了,取决于代码使用的类)。很棒的asnwer,所以对于Vala,我基本上必须依赖自动工具并维护构建脚本,而对于Close,我只需执行lein uberjar:)您不必,但这正是大多数人(开发者和用户)所喜欢的。您可以使用不同的构建系统(CMake、waf等),也可以直接使用valac编译程序并分发可执行文件(尽管它的可移植性不高)。大多数Vala软件都是针对Linux的,Linux用户希望特定于发行版的软件包能够动态链接到系统库,而不是大量二进制数据。这不是一个真正的Vala的东西,它是Linux的东西--看答案是好的,但我仍然在等待一个更详细的回答,有点包罗万象:)我接受这一点,因为它是迄今为止最详细的答案。