Leiningen无法使用新生成的项目

时间:2014-08-12 08:15:21

标签: windows clojure leiningen

我在Windows上运行Leiningen时遇到问题(在Cygwin和CMD中都有)。

一开始我生成了项目:

$ lein new app leintest
Generating a project called leintest based on the 'app' template.

然后我试着运行它:

$ cd leintest/
$ lein run
$

没有显示结果。 -main函数有println

$ cat src/leintest/core.clj
(ns leintest.core
  (:gen-class))

(defn -main
  "I don't do a whole lot ... yet."
  [& args]
  (println "Hello, World!"))

并由project.clj指出:

$ cat project.clj
(defproject leintest "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.6.0"]]
  :main ^:skip-aot leintest.core
  :target-path "target/%s"
  :profiles {:uberjar {:aot :all}})

所以基本上我无法run模板项目。更有甚者,我也无法建立uberjar

$ lein uberjar
Warning: The Main-Class specified does not exist within the jar. It may not be executable as expected. A gen-class directive may be missing in the namespace which contains the main method.
Created E:\Workspaces\leintest\target\uberjar\leintest-0.1.0-SNAPSHOT.jar
Created E:\Workspaces\leintest\target\uberjar\leintest-0.1.0-SNAPSHOT-standalone.jar

据我了解,它甚至找不到主要课程。当我尝试使用repl进行调试时,我了解到REPL server launch timed out.

我的Leningen版本是Leiningen 2.4.3 on Java 1.7.0_51 Java HotSpot(TM) 64-Bit Server VM。无论我使用lein脚本(Cygwin)还是lein.bat(CMD),我都会看到相同的行为。

我该怎样做才能弄明白事情的发生?

2 个答案:

答案 0 :(得分:2)

问题是由JAVA_PATH系统变量引起的。

我有2个Java安装 - 标准安装和便携安装。标准版本添加到PATH变量,以便java执行C:\Program Files\Java\jre7\bin\java.exe

在Cygwin中,我添加JAVA_PATH指向便携式安装,并将其目录添加到路径(SET PATH=%PATH%;%JAVA_PATH%\bin)。但是,由于该目录发生在由非便携式安装添加的目录之后,因此被忽略。 JAVA_PATH变量与PATH lein脚本调用目录之间的不匹配失败。与此同时,在CMD中,我根本没有设置JAVA_PATH

当我确保JAVA_PATH设置正确并且在标准安装(PATH)之前添加到SET PATH=%JAVA_PATH%\bin;PATH时,一切都开始有效。

答案 1 :(得分:2)

顺便说一下,我遇到了同样的问题但我的环境变量设置正确。在我的例子中,与提问者不同,我没有使用main方法在文件中的命名空间声明中添加:gen-class指令。通过将下面的第二行附加到命名空间声明来解决它:

(ns async-test.core
  (:gen-class :main true)
  (:require [clojure.core.async :as async]))