You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Lein run和Clojure -M运行脚本挂起,REPL中可正常执行

Clojure执行脚本与Lein运行的问题排查

环境信息

$ lein --version
Leiningen 2.9.10 on Java 17.0.4.1 OpenJDK 64-Bit Server VM
$ clojure -version
Clojure CLI version 1.11.1.1155
$ java -version
openjdk version "17.0.4.1" 2022-08-12
OpenJDK Runtime Environment (build 17.0.4.1+1)
OpenJDK 64-Bit Server VM (build 17.0.4.1+1, mixed mode)

问题1:clojure.java.shell/sh执行挂起

初始代码:

(use '[clojure.java.shell :only [sh]])
(defn -main [] (sh "echo" "Hello, World!"))
(-main)
  • REPL中执行正常,返回结果:
    {:exit 0, :out "Hello, World!\n", :err ""}
    
  • 但用clojure -M作为脚本执行时挂起;添加命名空间后用lein run执行同样挂起。
  • 尝试过的写法:require+:refer引入命名空间、显式打印标准输出(如(print (:out (sh "echo" "stuff"))))。

项目配置project.clj:

(defproject findbad "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :dependencies [[org.clojure/clojure "1.11.1"]]
  :source-paths ["."]
  :repl-options {:init-ns findbad}
  :main findbad)

.lein/profile.clj配置:

{:user {:plugins [
                  [lein-try "0.4.3"]
                  [flat-layout/lein-template "1.6.0"]
                  [simple-layout/lein-template "0.1.0"]]}}

问题2:Lein运行时-main函数参数错误

修改后的代码:

(ns findbad
  (:gen-class))

(use '[clojure.java.shell :only [sh]])

(defn -main [] (print "Hello, World"))

(-main)
  • clojure -M执行正常;
  • lein run -main抛出参数数量错误:
    {:clojure.main/message
     "Execution error (ArityException) at user/eval140 (form-init17641850740462455309.clj:1).\nWrong number of args (1) passed to: findbad/-main\n",
     :clojure.main/triage
     {:clojure.error/class clojure.lang.ArityException,
      :clojure.error/line 1,
      :clojure.error/cause
      "Wrong number of args (1) passed to: findbad/-main",
      :clojure.error/symbol user/eval140,
      :clojure.error/source "form-init17641850740462455309.clj",
      :clojure.error/phase :execution},
     :clojure.main/trace
     {:via
      [{:type clojure.lang.Compiler$CompilerException,
        :message
        "Syntax error macroexpanding at (/tmp/form-init17641850740462455309.clj:1:74).",
        :data
        {:clojure.error/phase :execution,
         :clojure.error/line 1,
         :clojure.error/column 74,
         :clojure.error/source "/tmp/form-init17641850740462455309.clj"},
        :at [clojure.lang.Compiler load "Compiler.java" 7665]}
       {:type clojure.lang.ArityException,
        :message "Wrong number of args (1) passed to: findbad/-main",
        :at [clojure.lang.AFn throwArity "AFn.java" 429]}],
       :trace
       [[clojure.lang.AFn throwArity "AFn.java" 429]
        [clojure.lang.AFn invoke "AFn.java" 32]
        [clojure.lang.Var invoke "Var.java" 384]
        [user$eval140 invokeStatic "form-init17641850740462455309.clj" 1]
        [user$eval140 invoke "form-init17641850740462455309.clj" 1]
        [clojure.lang.Compiler eval "Compiler.java" 7194]
        [clojure.lang.Compiler eval "Compiler.java" 7184]
        [clojure.lang.Compiler load "Compiler.java" 7653]
        [clojure.lang.Compiler loadFile "Compiler.java" 7591]
        [clojure.main$load_script invokeStatic "main.clj" 475]
        [clojure.main$init_opt invokeStatic "main.clj" 477]
        [clojure.main$init_opt invoke "main.clj" 477]
        [clojure.main$initialize invokeStatic "main.clj" 508]
        [clojure.main$null_opt invokeStatic "main.clj" 542]
        [clojure.main$null_opt invoke "main.clj" 539]
        [clojure.main$main invokeStatic "main.clj" 664]
        [clojure.main$main doInvoke "main.clj" 616]
        [clojure.lang.RestFn applyTo "RestFn.java" 137]
        [clojure.lang.Var applyTo "Var.java" 705]
        [clojure.main main "main.java" 40]],
       :cause "Wrong number of args (1) passed to: findbad/-main",
       :phase :execution}}
    

疑问:未给无参的-main传参,为何提示参数数量错误?

已解决的方案

通过以下方式解决了挂起问题:

  1. 显式打印sh的输出:(print (:out (sh "echo" "stuff")))
  2. 在代码末尾调用(shutdown-agents)

内容的提问来源于stack exchange,提问作者Nero gris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 05:05:31