1

だから..私はこの問題を抱えています(タイトルの問題)。私が行ったことの背景を説明するために、Carro という名前の Java クラスを作成します。

public class Carro{
  public Carro(){}
  public void turnon(String sound){
     System.out.println(sound);
  }
}

私はそれをコンパイルしました:

javac Carro.java

そして.jarを作成しました:

jar -cf Carro.jar Carro.class

そこで、新しい lein プロジェクトを作成しました: lein new test

/lib ディレクトリを作成し、そこに Carro.jar を貼り付けました。

ディレクトリにcarro というフォルダーtest/src/を作成し、.clj ファイルを作成しますcar.clj

(ns carro.car
  (:import [Carro] )
)

(defn callCarro [] 
  (let [car (new Carro)]
     (.turnon "vruuum!" car)
  )
)

その後、project.clj ファイルを編集し、最後の括弧の後に :import [Carro] を追加しました。

そのため、 を使用してプロジェクトを実行すると、次のlein replエラーが発生します。

    $ lein repl
    user=> (require 'carr.car :reload)
    CompilerException java.lang.IllegalArgumentException: 
Unable to resolve classname: Carro, compiling:(carro/car.clj:6) 

これを解決するためのアイデアはありますか? 問題はありますか?

4

2 に答える 2

2

Leiningen 2は、依存関係を管理するためにMavenに依存しています。バージョン1はjarをlibディレクトリにコピーするために使用されていましたが、この動作は削除されました(https://github.com/technomancy/leiningen/blob/stable/doc/FAQ.mdを参照)。プロジェクトに特定のjarが必要な場合、最も簡単な方法は、そのjarをローカルのMavenリポジトリにインストールし、残りをleiningenに任せることです。

Maven(およびleiningen)には、使用しているjarのバージョン、グループ、およびアーティファクトが必要です(https://github.com/technomancy/leiningen/blob/master/doc/tokyo.md#artifact-ids-を参照)。 groups-and-versions)。したがって、最初のステップは、Carro.jarの名前をCarro-0.1.0.jarに変更することです。少し簡単にするために、leiningenプラグインを使用して残りを実行しましょう。次のようなプラグインをproject.cljに追加しlein-localrepoます。

(defproject foo "0.1.0-SNAPSHOT"
  :dependencies [[org.clojure/clojure "1.4.0"]]
  :plugins [[lein-localrepo "0.4.1"]])

次に、LeiningenにCarro依存関係の座標を尋ねることができます。

$ lein localrepo coords Carro-0.1.0.jar
Carro-0.1.0.jar Carro/Carro 0.1.0

その最後の部分は、mvnリポジトリにインストールするために必要な情報です。

$ lein localrepo install Carro-0.1.0.jar Carro/Carro 0.1.0

その後、jarはmvnリポジトリにインストールされます~/.m2/repository/Carro/Carro/0.1.0/Carro-0.1.0.jar。最後に、新しくインストールした依存関係をproject.cljに追加します。

(defproject foo "0.1.0-SNAPSHOT"
  :dependencies [[org.clojure/clojure "1.4.0"]
                 [Carro/Carro "0.1.0"]]
  :plugins [[lein-localrepo "0.4.1"]])

そして、担当者から:

$ lein repl
user=> (new Carro)
#<Carro Carro@7c04703c>
于 2013-03-05T02:44:59.197 に答える
0

複数の原因が考えられます。

  • Clojure では、これを引き起こすパッケージなしでクラスをロードする際に問題が発生します。
  • Leiningen を使用している場合、これはテスト クラスの一般的な場所ではありません
  • repl から実行しなかった場合は、それも実行(import 'Classname)する必要があります。
于 2013-03-05T02:03:37.543 に答える