通过基于leinigen的repl加载clj文件

时间:2018-03-25 13:15:14

标签: clojure leiningen

我试图从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文件夹中的
  1. snake.clj
  2. => (load-file "snake.clj")
  3. 但这给了我一个错误:

      

    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来做到这一点?

1 个答案:

答案 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)

游戏窗口应按预期弹出。