我在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),我都会看到相同的行为。
我该怎样做才能弄明白事情的发生?
答案 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]))