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

欢迎!请参阅 关于 页面了解有关如何工作的更多信息。

0
tools.deps
增强描述

将主选项添加到 {{-Sdescribe}} 输出。这可以是一个新的 {{:main-opts}} 键,它包含一个字符串值,表示主选项缓存文件的内容(如果存在的话),或者一个空字符串。

理由

下游执行环境可以使用主选项信息在下载依赖项、构建类路径和通过别名选择主选项时使用 Clojure。另一种看待方式是,与 {{-Spath}} 在与其他可消费类路径的执行环境组合 Clojure 时提供有用信息一样,主选项的访问在组合时也有类似的用途。可能这个需求不够强烈,以至于不值得用新的 {{-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 别名字符串结果的 .main 文件;2) 在命令行指定的任何附加选项。似乎这些都应该组合成单个统一的主选项集,或者应作为单独的键包含。我的第一直觉是前者,但需要稍微思考一下。

建议的方法也没有对数据进行 "clojure-ify",而是只将其作为一个字符串对待。我们已经有关于转义的问题,我想用最正确的方式解决这个问题,也许在针对 .main 文件中的引用需要的其他更改方面。

0
参考:[https://clojure.atlassian.net/browse/TDEPS-72](https://clojure.atlassian.net/browse/TDEPS-72)(由 mfikes 报告)
...