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

欢迎!请在 关于 页面了解有关如何使用本站的更多信息。

0
tools.deps
增强描述

将主选项添加到 {{-Sdescribe}} 输出。这可以简单地是一个新的 {{:main-opts}} 键,并带有表示主选项缓存文件内容的字符串值(如果存在的话),如果没有,则为空字符串。

合理性

下游执行环境可以在使用 {{clojure}} 进行依赖下载、类路径构建和通过别名选择主选项时使用主选项信息。另一种看待这个问题的方式是,与 {{-Spath}} 在与其他可消费类路径的可执行环境结合时提供有用信息一样,访问主选项在组合时也是非常有用的。这可能不足以证明在选项列表中添加新的 {{-Smain-opts}} 标志是合理的;将此放入 {{-Sdescribe}} 输出可能是足够的。

另一个可能的合理性可能是,这可能对人类在调试方面是有用的。

实施注意事项

这可以是脚本中的单个新行,可能放置在 {{-Sdescribe}} 输出中发射 {{:main-aliases}} 的行之后。

:main-opts "$(cat "$main_file")"

这将对大多数正常用例有效,但可能与 TDEPS-56 发生的事情有关,在那里可能会对包含有空格的主选项的适当处理进行一些平台特定的更改。(也许在这种情况下,{{clojure}} 可以采取这样的立场:{{:main-opts}} 不是保证是最终的;这与仍然处于 alpha 阶段是一致的,也许也与 {{-Sdescribe}} 不是真正的正式 API 有关。)

3 答案

0
评论者:mfikes

使用

{code:title=deps.edn}
{:aliases {:foo {:main-opts ["-m" "foo.core" 1 2 3]}}}


在此修改后的补丁中,{{clojure -Sdescribe -A:foo}} 将发射


{:version "1.9.0.358"
 :config-files ["/usr/local/lib/clojure/deps.edn" "/home/ubuntu/.clojure/deps.edn" "deps.edn" ]
 :install-dir "/usr/local/lib/clojure"
 :config-dir "/home/ubuntu/.clojure"
 :cache-dir ".cpcache"
 :force false
 :repro false
 :main-opts "-m foo.core 1 2 3"
 :resolve-aliases ""
 :classpath-aliases ""
 :jvm-aliases ""
 :main-aliases ""
 :all-aliases ":foo"}


在macOS和Ubuntu 16.04上,并且{{clojure -Sdescribe}}输出了


{:version "1.9.0.358"
 :config-files ["/usr/local/lib/clojure/deps.edn" "/home/ubuntu/.clojure/deps.edn" "deps.edn" ]
 :install-dir "/usr/local/lib/clojure"
 :config-dir "/home/ubuntu/.clojure"
 :cache-dir ".cpcache"
 :force false
 :repro false
 :main-opts ""
 :resolve-aliases ""
 :classpath-aliases ""
 :jvm-aliases ""
 :main-aliases ""
 :all-aliases ""}


该补丁将错误重定向到{{/dev/null}}以处理上述第二种情况,其中主缓存文件不存在。
0

评论由:alexmiller发表

实际上有两大类主选项来源需要考虑:1)包含主opts别名的.out文件;2)在命令行上指定的任何附加选项。看起来这些选项应该合并到单个统一的选项集中,或者应该作为单独的键进行包含。我的第一反应会是前者,但需要更多考虑。

建议的方法也没有“clojure-ify”数据,而是把整个东西当作字符串对待。我们已经在转义方面遇到了问题,我希望能以最正确的方式解决这些问题,可能还需要考虑.out文件中引用的其他必要更改。

0
...