当前位置: 首页 > 知识库问答 >
问题:

为什么在启动clojure repl时绝对类路径不起作用?

董奇思
2023-03-14

当我探索Clojure时,一个问题困扰了我很长一段时间。我尝试通过在Clojure脚本上调用REPL中的compile函数来生成一个类,如下所示:

(ns mylib.DirLister (:gen-class))
(defn -listDir [this path]
     (->> path java.io.File. .listFiles (map #(.getName %))))

我将此脚本保存到e:/temp/clj/src/mylib/DirLister。clj。当我为-cp选项指定相对路径时,下面的会话进行得很顺利,即在类路径中成功生成类:

e:\temp\clj>java -cp .\src;.\classes;d:/tools/clojure-1.4.0/clojure-1.4.0.jar clojure.main
Clojure 1.4.0
user=> (compile 'mylib.DirLister)
mylib.DirLister
user=>

但是当我使用绝对路径时,会提示“没有这样的文件或目录”错误:

e:\>java -cp e:/temp/clj/src;e:/temp/clj/classes;d:/tools/clojure-1.4.0/clojure-1.4.0.jar clojure.main
Clojure 1.4.0
user=> (compile 'mylib.DirLister)
CompilerException java.io.IOException: No such file or directory, compiling:(mylib/DirLister.clj:1)

user=>

怎么会呢?我的意思是为什么绝对路径不起作用,而相对路径起作用。

我知道我可以和莱宁根一起去。但是因为我在学习Clojure,所以在采用这个功能齐全的工具之前,我想先了解一下下面的内容。

共有2个答案

朱阳曜
2023-03-14

最后我得到了答案:

compile函数将始终使用内置变量*compile path*的值作为输出类的路径,如果您没有进行其他设置,则默认为当前目录下的“classes”。所以我遇到的问题实际上不是关于相对路径或绝对路径,而是关于当前目录和*编译路径*的值。

请参阅ClojureDoc。

仲孙疏珂
2023-03-14

在我看来,您在命令行上混合了正斜杠和后斜杠。我不确定你到底在使用什么外壳,这是否会有所不同。但是,带e:的路径通常需要反斜杠\。也许这会有帮助,或者至少消除一个潜在的问题来源?

您能否尝试将第二个示例更改为使用

e:\temp\clj\src;e:\temp\clj\classes;d:\tools\clojure-1.4。0\clojure-1.4。0.jar

看看这是否有帮助?

 类似资料:
  • 问题内容: 任何人都知道为什么该命令在Windows中可以正常工作,但是在Linux中,我得到了ClassNotFoundException game.ui.Main 我的文件夹结构如下:lib /-Jars游戏/-类文件 这是最新的Java 6。 问题答案: 类路径语法与操作系统有关。来自维基百科: 命令行Classpath语法与文件系统密切相关,取决于操作系统。例如: 在所有类似Unix的操作

  • 问题内容: 就像标题中所说的,绝对路径名和相对路径名有什么区别?我现在正在上一门计算机组织课程,而我正在上的讲座是Unix中的速成班。演讲幻灯片说: 作为参考,“上一张幻灯片”基本上显示了一个文件树,其根目录/为顶级节点。 幻灯片后显示: 我仍然对绝对路径名和相对路径名之间的区别感到困惑。例如,我在Mac上。我的根目录是/。要从/获得我的文档,我必须这样做。 进入文档后,我需要访问一个名为的文件夹

  • 问题内容: 我有文件A的绝对路径。 我有一个从文件A的目录到文件B的相对路径。此路径可以并且将使用“ ..”以任意复杂的方式向上移动目录结构。 范例A: 示例B: 我如何结合这两者以获得 最简单的 绝对路径到文件B? 问题答案: 如果我的问题正确,那么您可以执行以下操作:

  • 问题内容: 想知道不指定classpath选项时默认的classpath是什么吗? 问题答案: 当前的工作目录()。 从Java™教程中:PATH和CLASSPATH: 类路径 的 默认值为“。” ,表示仅搜索当前目录。指定CLASSPATH变量或-cp命令行开关将覆盖此值。 这包括子目录吗? 不,在类路径中没有条目是“递归的”。您必须明确列出每个子目录(或jar)。但是,如果您有一个表示clas

  • 问题内容: 我阅读并发现在 System类下有一些函数作为getproperties,我们可以在其中检索属性,然后也可以使用setProperties()对其进行设置。 但是我得到的答案是它不会工作。我自己还没有尝试过,但是,我正在接听电话。 只是为了澄清一下,如果这些setProperty()和getProperty()方法无法在运行时更改它们,为什么会存在它们。还是仅特定于classpath属

  • 在学习和使用spring-boot之后,我了解了spring-boot ConditionalOnClass的用法和逻辑,我的问题是: < li >为什么“因为这个注释是通过加载类字节码来解析的,所以在这里指定最终可能不在类路径上的类是安全的”。 < li >与此相关的JVM规范在哪里? https://github.com/spring-projects/spring-boot/blob/mas