分享您的想法,参加 2024 年 Clojure 状态调查!

欢迎!请查看 关于 页面获取更多如何使用本平台的信息。

+3
tools.deps

存在这样一个假设,当运行 Spom 时,tools.deps 会将 :scope "provided" 传递到 pom.xml 中。然而,这不仅没有完成,而且如果它已在 pom.xml 中存在,就会被删除...

例如

{:deps {com.datomic/datomic-free {:mvn/version "0.9.5697" :scope "provided"}}}

变为

<dependency>
  <groupId>com.datomic</groupId>
  <artifactId>datomic-free</artifactId>
  <version>0.9.5697</version>
</dependency>

但应该是

<dependency>
  <groupId>com.datomic</groupId>
  <artifactId>datomic-free</artifactId>
  <version>0.9.5697</version>
  <scope>provided</scope>
</dependency>

1 个答案

+2

被选中
 
最佳答案

tools.deps 不支持 :scope。

这是一个添加支持的补丁。

来自 aec6d48bf828ccdd076be248738155d97fa04477 Mon Sep 17 00:00:00 2001
作者:Thomas Spellman <[email protected]>
日期:Sat, 22 Feb 2020 22:09:49 -0800
主题:[PATCH] support :scope in deps map when generating pom.xml

---
 src/main/clojure/clojure/tools/deps/alpha/gen/pom.clj | 7 +++++--
 1 文件更改,5 个插入 (+),2 个删除 (-)

diff --git a/src/main/clojure/clojure/tools/deps/alpha/gen/pom.clj b/src/main/clojure/clojure/tools/deps/alpha/gen/pom.clj
 index 303ae93..1f24d31 100644
--- a/src/main/clojure/clojure/tools/deps/alpha/gen/pom.clj
+++ b/src/main/clojure/clojure/tools/deps/alpha/gen/pom.clj
@@ -21,7 +21,7 @@
 (xml/alias-uri 'pom "http://maven.apache.org/POM/4.0.0")
 
 (defn- to-dep
-  [[lib {:keys [mvn/version classifier exclusions] :as coord}]]
+  [[lib {:keys [mvn/version classifier exclusions scope] :as coord}]]
   (if version
     (cond->
       [::pom/dependency
@@ -38,7 +38,10 @@
              [::pom/exclusion
                     [::pom/groupId (namespace excl)]
                     [::pom/artifactId (name excl)]])
-              exclusions)]))
+              exclusions)])
+
+      scope
+      (conj [::pom/scope scope]))
     (printerrln "Skipping coordinate:" coord)))
 
 (defn- gen-deps
--
2.21.0 (Apple Git-122.2)
by
感谢这个补丁,但我们故意不支持它,也不打算添加它。clj 的做法是使用别名来允许构建类路径变体。如果您要在您的 pom 中使用此功能,您需要维护自己的 pom 文件。
by
Ah,我现在明白了。这很有道理。谢谢!
by
@alexmiller 关于这一点,感谢你的解释。总的来说,情况都还好,但我遇到的问题是 cljdoc 无法正常工作,因为它需要将可能在别名中包含的依赖项放入 pom 并将其标记为 `<scope>provided</scope>`。

支持 `:scope "provided"` 的另一种选择是让 `tools.deps` 对 `` 列表执行插入和更新操作。这个方案你考虑过吗?似乎唯一可行的替代方案只能是通过编写一个小脚本,手动修改 `provided` 依赖,这感觉有点像“搔痒之术”。

一如既往地感谢你的时间!
@alexmiller 关于这一点,感谢你的解释。总的来说,情况都还好,但我遇到的问题是 cljdoc 无法正常工作,因为它需要将可能在别名中包含的依赖项放入 pom 并将其标记为 `<scope>provided</scope>`。

支持 `:scope "provided"` 的另一种选择是让 `tools.deps` 对 `` 列表执行插入和更新操作。这个方案你考虑过吗?似乎唯一可行的替代方案只能是通过编写一个小脚本,手动修改 `provided` 依赖,这感觉有点像“搔痒之术”。

查看 https://github.com/cljdoc/cljdoc/issues/404#issuecomment-730549210

一如既往地感谢你的时间!
我们正在努力为未来提供一种更可配置的方式来利用 pom gen,到那时可能会有更多的影响力来优化这个过程。
...