如何在Clojure中创建可分发的应用程序?

时间:2009-09-08 09:28:33

标签: java clojure

分发Clojure应用程序的“最少工作”方法是什么?这与“最佳”方法不同吗?

例如,这里是一个简单的“应用程序”,我希望能够发送给某人:


(doto (javax.swing.JFrame. "Hello World")
  (.add (javax.swing.JLabel. "Clojure Distributable"))
  (.pack)
  (.show))

我认为无论是否已经安装了Java,它都会对答案产生重大影响。

4 个答案:

答案 0 :(得分:5)

对于Mac Os x,默认安装java,Apple提供JarBundler,允许您将jar转换为本机os x应用程序。 OS X应用程序不使用安装程序。

对于Windows Launch4j是一个很好的选择,它会将你的jar包装成带有图标的.exe,如果没有下载,它会检查是否安装了java。对于Windows安装程序,我建议NSIS(winamp的安装程序)。

对于Linux,jar文件+ bash脚本。

答案 1 :(得分:3)

Compile it to byte code然后使用Java Web Start(或者每个Java安装程序浮动你的船)?

对于没有安装Java的人 - 安装的某些人可以检测到这一点并启动JRE安装程序。 Web JWS执行此操作是页面上的一些Javascript,其中包含指向JNLP文件的链接。如果未检测到Java,则会将链接切换为JRE安装链接。

答案 2 :(得分:3)

最简单的方法是使用Maven,这是你需要做的事情:

获取Maven 2已安装的副本。

获取Clojure Maven Plugin的副本,转到其文件夹并运行mvn install

通过运行以下命令将clojure.jar安装到您的maven存储库中:

   mvn install:install-file -DgroupId=org.clojure -DartifactId=clojure -Dversion=1.1.0-alpha-SNAPSHOT -Dpackaging=jar 
   -Dfile=clojure.jar

现在你需要创建一个pom.xml,告诉maven如何构建你的项目

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.clojure</groupId>
    <artifactId>hello-world</artifactId>
    <packaging>jar</packaging>
    <version>1.0</version>

    <build>
        <plugins>
            <plugin>
                <groupId>com.theoryinpractise</groupId>
                    <artifactId>clojure-maven-plugin</artifactId>
                <version>1.1-SNAPSHOT</version>
                <configuration>
                    <sourceDirectories>
                        <sourceDirectory>src</sourceDirectory>
                    </sourceDirectories>
                </configuration>
                <executions>
                    <execution>
                        <id>compile</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.clojure</groupId>
               <artifactId>clojure</artifactId>
               <version>1.1.0-alpha-SNAPSHOT</version>
        </dependency>
    </dependencies>    
</project>

现在,假设你有一个看起来像的hello.clj:

(ns clojure.examples.hello
    (:gen-class))

(defn -main[args]
  (doto (javax.swing.JFrame. "Hello World")
    (.add (javax.swing.JLabel. "Clojure Distributable"))
    (.pack)
    (.show)))

您的项目结构应如下所示:

项目/ pom.xml中

项目/ SRC / Clojure的/示例/ hello.clj

如果你去项目文件夹并运行mvn install,它应该创建project / target / hello-world-1.0.jar,这将有一个main方法,你应该可以用

运行它

java -cp hello-world-1.0.jar:clojure.jar clojure.examples.hello

您可能还想查看One-Jar项目,它可以让您将应用程序和clojure库捆绑在同一个jar中。

答案 3 :(得分:2)

  1. 如果您需要完全独立的应用,请考虑Excelsior JET

  2. 考虑一些jar-to-exe包装器,如launch4j。

  3. 这些建议一般用于Java平台,而不是专门用于Clojure ......