所以。。我有这个问题(题目里的那个(。只是想介绍一下我所做的事情:创建一个名为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新测试
创建了一个/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)
任何解决这个问题的想法。。。问题
Leiningen 2依赖maven来管理依赖关系。版本1用于将jar复制到lib目录,但此行为已被删除(请参阅https://github.com/technomancy/leiningen/blob/stable/doc/FAQ.md)。如果你的项目需要一个特定的jar,最简单的方法是在你的本地maven repo上安装这个jar,然后让leiningen来完成剩下的工作
Maven(以及leiningen(需要一个版本、一个组和一个工件来处理您正在使用的jar(请参见https://github.com/technomancy/leiningen/blob/master/doc/TUTORIAL.md#artifact-id组和版本(。因此,我们的第一步将是将Carro.jar重命名为Carro-1.0.jar。为了让事情变得更容易,让我们使用leiningen插件来完成其余的工作。将lein-localrepo
插件添加到您的项目.clj中,类似于:
(defproject foo "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.4.0"]]
:plugins [[lein-localrepo "0.4.1"]])
然后你可以向莱宁根询问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"]])
然后从回复:
$ lein repl
user=> (new Carro)
#<Carro Carro@7c04703c>
我怀疑可能有多种原因:
- Clojure在加载没有包的类时遇到问题,这导致了这种情况
- 如果您使用的是Leiningen,那么这不是测试类的典型位置
- 如果您没有从repl运行
(import 'Classname)
,那么您也需要这样做