Clojure 通过基于leinigen的repl加载clj文件
我正在尝试从中运行Clojure 通过基于leinigen的repl加载clj文件,clojure,leiningen,Clojure,Leiningen,我正在尝试从中运行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]))
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上运行此功能,而(本书推荐的)在Windows上尚不可用,所以我改用。我曾经跑过:
lein repl
来自包含我的snake.clj
文件的examples
文件夹=>(加载文件“snake.clj”)
import static
作为一种解决方法,我使用WSL Ubuntu安装Clojure CLI并在书的源代码文件夹的根目录下运行它,使用书中建议的代码直接加载snake文件((要求“[examples.snake:refere:all])
)。加载很好,我甚至可以从加载的文件中运行(游戏)
,但当然会崩溃,因为WSL Ubuntu没有GUI选项(它在出现“no X11 DISPLAY…”错误时崩溃)
我假设我使用的基于leinigen的设置失败了,因为我必须先执行(加载文件“import\u static.clj”)
。事实上,这样做是一个很好的解决方法,因为这样做之后一切都可以工作(在执行(使用examples.snake)
)之后),但对于多个/递归导入,这并不能很好地扩展
使用leinigen(在Windows上)运行此类脚本的正确方法是什么?我应该创建一个leinigen项目文件吗?还是有一个repl技巧可以做到这一点?这不是对你问题的直接回答,但它会帮助你站起来并开始跑步。
问题是这些文件不在类路径上,因为作者似乎决定完全忽略使用项目,所以leiningen帮不了你。/A解决方案是创建一个新项目,并将所有内容都放在其中
如何使其工作:
- 转到一个目录,在那里启动命令提示符,然后运行
。这将创建一个“snake”文件夹,其中包含项目的基本结构,并包含一个“project.clj”leinnewsnake
- 从下载的文件中,复制整个“src”文件夹(其中包含
文件夹),并将其粘贴到新的“snake”文件夹中,以便覆盖生成的“src”。现在应该有一个路径“snake/src/examples/”examples
- 既然“snake/src”位于类路径上,就可以按预期引用它了。转到根“snake”文件夹,启动命令提示符,然后运行
lein repl
(需要“[examples.snake:as s])
(s/game)
游戏窗口应按预期弹出。感谢您的回复。我稍后会检查它是否适合我。(对作者公平地说,它在代码库的根目录中有一个
.edn
文件或类似的文件,用于clj
cli工具。使用leiningen是我自己的选择(因为W10的缘故),Jeroen我实际上没有任何其他构建工具的经验;我以前从未见过deps.edn
文件。也许有一种不用leiningen就能让它工作的方法,但我不能为它辩护。