代码之家  ›  专栏  ›  技术社区  ›  Timothy Pratley

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

  •  4
  • Timothy Pratley  · 技术社区  · 15 年前

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

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

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

    我想这对他们是否已经安装了Java有很大的不同。

    4 回复  |  直到 15 年前
        1
  •  5
  •   Hamza Yerlikaya    15 年前

    对于Mac OS X,默认情况下安装了Java,Apple提供JARBANKER,允许您将JAR转换为本地OS X应用程序。OS X应用程序不使用安装程序。

    对于Windows Launch4j 这是一个很好的选择,它将把你的jar包放在.exe中,并带有一个图标,如果没有下载它,它会检查是否安装了Java。对于Windows安装程序,我推荐 NSIS (Winamp的安装程序)。

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

        2
  •  3
  •   Michael Lloyd Lee mlk    15 年前

    Compile it to byte code 然后使用 Java Web Start (或者每一个Java安装程序都会漂浮在你的船上)?

    对于没有Java安装的人来说,有些安装可以检测并启动JRE安装程序。Web JWS就是这样做的,这是页面上的一些javascript,带有到JNLP文件的链接。如果没有检测到Java,那么这将为JRE安装链接切换链接。

        3
  •  3
  •   Yogthos    15 年前

    最简单的方法是使用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)))
    

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

    Project/POM.XML

    项目/src/clojure/examples/hello.clj

    如果您转到项目文件夹并运行mvn install,它应该创建project/target/hello-world-1.0.jar,它将有一个主方法,您应该能够使用

    Java-CP HelLoWorl 1.0JAR:Culjur.jar Culjur.ExpulsHelp

    你可能还想调查一下 One-Jar 项目,它允许您将应用程序和Clojure库捆绑在同一个JAR中。

        4
  •  2
  •   Vanya    15 年前
    1. 考虑 Excelsior JET 如果你需要完全独立的应用程序。

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

    这些建议通常是针对Java平台的,而不是专门用于Culjure的…