我试图从Programming Clojure (3rd ed) book examples运行snake.clj
。所述文件以此声明开头:
(ns examples.snake
(:import (java.awt Color Dimension)
(javax.swing JPanel JFrame Timer JOptionPane)
(java.awt.event ActionListener KeyListener))
(:require [examples.import-static :refer :all]))
(import-static java.awt.event.KeyEvent VK_LEFT VK_RIGHT VK_UP VK_DOWN)
; actual program omitted, see above link
因为我试图在Windows上运行此功能,并且Clojure CLI Getting Started(本书推荐)在Windows上尚未提供,所以我使用的是leinigen代替。我已经使用these instructions来运行:
lein repl
文件的examples
文件夹中的snake.clj
=> (load-file "snake.clj")
但这给了我一个错误:
CompilerException java.io.FileNotFoundException:无法在类路径上找到examples / import_static__init.class或examples / import_static.clj ...
不知怎的,我通过leinigen进行repl的设置无法让我像这样使用import-static
。
作为一种解决方法,我使用WSL Ubuntu安装Clojure CLI并在本书的源代码文件夹的根目录中运行它,使用书中建议的代码直接加载snake文件( (require '[examples.snake :refer :all])
)。加载得很好,我甚至可以从加载的文件中运行(game)
,但当然崩溃是因为WSL Ubuntu没有GUI选项(它在" No X11 DISPLAY ..."误差)。
我认为我使用的基于leinigen的设置失败了,因为我必须先做(load-file "import_static.clj")
。事实上,这样做是一个很好的解决方法,因为它一切正常(在执行(use examples.snake)
之后),但这对于多个/递归导入来说并不能很好地扩展。
使用leinigen(在Windows上)运行此类脚本的正确方法是什么?我应该创建一个leinigen项目文件吗?或者有一个repl-trick来做到这一点?
答案 0 :(得分:2)
这不是直接您问题的答案,但它会帮助您启动并运行。 问题是文件不在类路径上,因为作者似乎决定完全忽略使用项目,所以leiningen无法帮助你。 / A解决方案是创建一个新项目,并将所有内容都粘贴在那里。
如何让它发挥作用:
转到目录,在那里启动命令提示符,然后运行lein new snake
。这将创建一个“snake”文件夹,其中包含项目的准系统结构,并带有“project.clj”。
从您下载的文件中,复制整个“src”文件夹(包含examples
文件夹),然后将其粘贴到新的“snake”文件夹中,以便覆盖生成的“src”。你现在应该有一个路径“snake / src / examples /".
既然“snake / src”在类路径上,它可以按预期引用。转到root“snake”文件夹,启动命令提示符,然后运行
lein repl
(require '[examples.snake :as s])
(s/game)
游戏窗口应按预期弹出。