Jar CompilerException java.lang.IllegalArgumentException:无法解析类名:Carro,正在编译:(Carro/car.clj:6)

Jar CompilerException java.lang.IllegalArgumentException:无法解析类名:Carro,正在编译:(Carro/car.clj:6),jar,clojure,compiler-errors,illegalargumentexception,Jar,Clojure,Compiler Errors,Illegalargumentexception,所以。。我有这个问题(标题中的那个)。我只是想介绍一下我的工作背景: 创建一个名为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 因此,我创建了一个新的l

所以。。我有这个问题(标题中的那个)。我只是想介绍一下我的工作背景: 创建一个名为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项目: 莱因新测验

创建了一个/lib目录并将Carro.jar粘贴到其中

test/src/
目录中创建一个名为carro的文件夹,并创建一个.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) 

有没有解决这个问题的办法。。。问题?

我怀疑可能有多种原因:

  • Clojure在没有包的情况下加载类时遇到问题,这会导致此问题
  • 如果您使用的是Leiningen,那么这不是测试类的典型位置
  • 如果您没有从repl运行
    (import'Classname)
    ,您也需要这样做
Leiningen 2依靠maven来管理依赖关系。版本1用于将JAR复制到lib目录,但此行为已被删除(请参阅)。如果您的项目需要一个特定的jar,最简单的方法是在本地maven repo上安装该jar,然后让leiningen完成其余的工作

Maven(以及leiningen)需要一个版本、一个组和一个用于您正在使用的jar的工件(请参阅)。因此,我们的第一步是将Carro.jar重命名为Carro-0.1.0.jar。为了让事情变得简单一点,让我们使用leiningen插件来完成其余的工作。将
lein localrepo
插件添加到您的project.clj,类似于:

(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 repo所需的信息:

$ 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"]])
然后从repl:

$ lein repl
user=> (new Carro)
#<Carro Carro@7c04703c>
$lein repl
用户=>(新卡罗)
#
或可能有帮助。