18

私は clojure の初心者で、昨日始めたばかりです。

スタンドアロン アプリを作成する簡単な方法は leiningen を使用することであることがわかりましlein new fooた。

leiningen で hello world テスト プロジェクトを作成してみました。project.clj に :main および :aot ディレクティブを追加し、core.clj ファイルに :gen-class を追加して試しましlein runたが、クラス定義が見つからないというエラーが発生します。

Exception in thread "main" java.lang.NoClassDefFoundError: 
Caused by: java.lang.ClassNotFoundException: 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)

core.clj ファイル

(ns test.core
  (:gen-class))
(defn -main [& args] (println "Hello main"))

そして project.clj ファイル

(defproject test "1.0.0-SNAPSHOT"
  :description "FIXME: write description"
  :main test.core
  :aot [test.core]
  :dependencies [[org.clojure/clojure "1.2.1"]])

編集:さらにテストした後、プロジェクトをデスクトップにコピーしてもそのまま動作するようです。これは、ラップトップの環境が何らかの形で壊れていることを示していると思いますが、方法がわかりません。

デスクトップの環境は、リポジトリの clojure と AUR の leiningen です。ラップトップでは、clojure は clojure.org から、leining は github から入手できます。

4

4 に答える 4

35

[2013 年 4 月更新]

しばらくの間正式にリリースされた Leiningen 2 には、プロジェクト テンプレートの概念が含まれています。Leiningen はデフォルトappで、すぐに必要なものを提供するテンプレートを提供します。試す:

lein new app my-project

Leiningen が使い慣れたプロジェクト テンプレートを作成していることがわかりますが、以下も含まれています。

  • ファイルのエントリmy-project.coreとしてのデフォルトの名前空間:mainproject.clj
  • :gen-class名前空間宣言のフォームmy-project.core
  • 名前空間のデフォルト-main関数my-project.core

Leiningen 2 をまだ使用できない場合は、lein-newnewプラグインを使用すると、Leiningen 1 で同等のエクスペリエンスが提供されます。

[/アップデート]

実行時に「Hello World!」を出力するプロジェクトをビルドするには、次のようにします (上記のプロセスの修正)。

設定

lein new my-project
cd my-project
lein deps

libこれで、基本的な構造が整っており、Clojure jar がフォルダーに配置されているはずです。

関数を書く

選択したエディターで編集し、フォームsrc/my_project/core.cljの下に次を追加します。(ns ...)

(defn -main []
  (println "Hello World!"))

この関数はmy-project.core名前空間内にあります。これが確実にメインとして実行されるように、gen-classパラメータを名前空間定義の上部に追加して、 の上部が次のようになるようにしますcore.clj

(ns my-project.core
  (:gen-class :main true))

まとめると、core.cljファイルは次のようになります。

(ns my-project.core
  (:gen-class :main true))

(defn -main []
  (println "Hello World!"))

メイン関数として構成します

上記のように編集したらsrc/my_project/core.clj、Leiningen (ビルド ツール) にプロジェクトの「メイン」関数が存在する場所を伝える必要があります。defprojectこれを行うフォームの例を次に示します。

(defproject my-project "1.0.0-SNAPSHOT"
  :description "My Project"
  :dependencies [[org.clojure/clojure "1.2.1"]]
  :main my-project.core)

これで、-main内部の関数がmy-project.coreプログラムのエントリ ポイントになります。

それを実行します

このプロジェクトを実行するには、次の 2 つのオプションがあります。

  • プロジェクトlein runのルートでコマンドラインで使用するmy-project
  • を実行して、スタンドアロンの jar ファイルを作成しますlein uberjar。その後、次のコマンドを実行して、結果の jar ファイルを実行できます。java -jar my-project-1.0.0-SNAPSHOT-standalone.jar
于 2011-07-29T19:05:24.300 に答える
1

理解した。私はgitから最新のleiningenを持っていましたが、どういうわけか壊れていました。1.6.1 タグをチェックアウトして自己インストールを実行したところ、動作するようになりました。

于 2011-08-01T14:09:46.350 に答える
0

私はそれを逃しました。あなたはプロジェクトのテストに名前を付けました。名前を別の名前に変更することはできません。

于 2011-07-29T19:15:36.673 に答える
-1

あなたは上で言います

lein new foo

あなたが意味するのは

lein new test
于 2011-07-29T18:36:04.943 に答える