2009-09-08 40 views
4

发布Clojure应用程序的“最少工作”方法是什么?这是不同于'最好'的方法吗?如何在Clojure中创建可分发的应用程序?

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


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

我想象它使一个很大的区别的回答他们是否已经或没有安装Java。

回答

4

对于Mac OS X,Java是默认安装和苹果提供JarBundler,让你把罐子到本地os x应用程序。 OS X应用程序不使用安装程序。

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

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

+0

应该添加一些关于实际创建jar的细节。这里有一篇文章,使用Leiningen:http://zef.me/2470/building-clojure-projects-with-leiningen – semperos 2011-01-15 12:11:52

2
  1. 考虑Excelsior JET,如果你需要完全独立的应用程序。

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

这些建议是Java平台普遍,而不是专门用于Clojure的...

+0

该链接不起作用。 – Pinochle 2009-09-08 12:31:37

+0

@Pinochle对不起,更正了链接 – Vanya 2009-09-08 14:49:00

3

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

对于未安装Java的用户 - 某些已安装的用户可以检测到此情况并触发JRE安装程序。网络JWS确实是这个页面上的一些Javascript,并且链接到了JNLP文件。然后,如果未检测到Java,则会将链接切换为JRE安装链接。

+0

嗨,下调选民的头脑会留下一个说明解释为什么。谢谢。 – 2009-09-08 16:25:58

+0

+1,我看不出downvote的原因 – 2009-09-08 18:06:58

3

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

获取的安装Maven 2副本。

得到Clojure Maven Plugin的副本,请访问其文件夹,运行安装MVN

通过运行以下命令安装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它会告诉行家如何建立你的项目

<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的/例子/你好。CLJ

如果你去到项目文件夹,然后运行mvn安装,它应该创建项目/目标/你好世界-1.0.jar这将有一个主要方法,你应该能够与

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

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

相关问题