gpt4 book ai didi

path - Clojure:如何获取正在运行的JAR/根源目录的路径?

转载 作者:行者123 更新时间:2023-12-04 06:07:20 25 4
gpt4 key购买 nike

在Java中,有一个simple way可以获取正在运行的jar文件的路径:

MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath()

但是在Clojure中,我们 没有类名,只有 namespace 和函数。相同的情况适用于未编译的脚本/REPL。

所以我的问题是:
  • 我们如何找到正在运行的jar文件的路径?
  • 我们如何找到未编译的源文件路径?
  • 最佳答案

    默认情况下,类的名称是AOT编译的 namespace 的名称(这是gen-class的名称),因此您可以简单地使用 namespace 的类。

    (ns foo.core
    (:gen-class))

    (defn this-jar
    "utility function to get the name of jar in which this function is invoked"
    [& [ns]]
    ;; The .toURI step is vital to avoid problems with special characters,
    ;; including spaces and pluses.
    ;; Source: https://stackoverflow.com/q/320542/7012#comment18478290_320595
    (-> (or ns (class *ns*))
    .getProtectionDomain .getCodeSource .getLocation .toURI .getPath))

    (defn -main [& _]
    (println (this-jar foo.core)))

    运行结果:
    $ java -cp foo-0.1.0-SNAPSHOT-standalone.jar foo.core
    /home/rlevy/prj/foo/target/foo-0.1.0-SNAPSHOT-standalone.jar

    关于path - Clojure:如何获取正在运行的JAR/根源目录的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9694754/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com