2024年Clojure状态调查!中分享您的想法。

欢迎!请查看关于页面以了解有关如何操作的更多信息。

+1
文档
编辑

我有一个可能和Java互操作与反射有关的问题。研究这个问题让我查看了Clojure FAQ关于非法访问。它提到添加--illegal-access=debug。半小时后,我仍然无法解决这个问题。这真是个奇怪的问题,但是我在尝试运行添加参数的考验时确实有些困惑。我看了clj --help依赖和CLI指南,但这需要太大力气,我觉得肯定遗漏了某个指南或文档页面。

% clj -e "\*clojure-version\*"
{:major 1, :minor 10, :incremental 0, :qualifier nil}
% clj --illegal-access=debug
Exception in thread "main" java.io.FileNotFoundException: --illegal-access=debug (No such file or directory)
        at java.base/java.io.FileInputStream.open0(Native Method)
        at java.base/java.io.FileInputStream.open(FileInputStream.java:219)
        at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
        at java.base/java.io.FileInputStream.<init>(FileInputStream.java:112)
        at clojure.lang.Compiler.loadFile(Compiler.java:7570)
        at clojure.main$load_script.invokeStatic(main.clj:452)
        at clojure.main$script_opt.invokeStatic(main.clj:512)
        at clojure.main$script_opt.invoke(main.clj:507)
        at clojure.main$main.invokeStatic(main.clj:598)
        at clojure.main$main.doInvoke(main.clj:561)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.lang.Var.applyTo(Var.java:705)
        at clojure.main.main(main.java:37)

我还有一个运行在Docker镜像中的clojure(FROM clojure:openjdk-18-tools-deps-1.10.3.1040-bullseye)也不能用

root@dd07c7fedc67:/app# clojure -e "\*clojure-version\*"
WARNING: Implicit use of clojure.main with options is deprecated, use -M
{:major 1, :minor 10, :incremental 3, :qualifier nil}
root@dd07c7fedc67:/app# clojure -M --illegal-access=debug
Execution error (FileNotFoundException) at java.io.FileInputStream/open0 (FileInputStream.java:-2).
--illegal-access=debug (No such file or directory)
Full report at:
/tmp/clojure-7987604327110923419.edn
root@dd07c7fedc67:/app# clojure -M -m clojure.main --illegal-access=debug
Execution error (NullPointerException) at clojure.main/main (main.java:40).
Cannot invoke "clojure.lang.IFn.applyTo(clojure.lang.ISeq)" because "f" is null
Full report at:
/tmp/clojure-17703419873584290207.edn

1 个答案

+1

已选择
 
最佳答案
clojure -J--illegal-access=debug

clojure -J--illegal-access=debug -M -e '*clojure-version*'

Clojure CLI运行时,使用-J选项将参数传递给JVM。

by
在这个问题中,这可以解释为FAQ内容: https://clojure.org/guides/faq#illegal_access

顺便说一句,当使用Cider时,我不会收到这些警告。在REPL中是否有方法获得它们?
by
关于CIDER,我很抱歉,我不知道。

至于FAQ: https://github.com/clojure/clojure-site/pull/636
...