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

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

+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
主题: [补丁] 支持在生成 pom.xml 时在 deps map 中使用 :scope

---
 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
索引 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 "跳过坐标:" coord)))
 
 (defn- gen-deps
--
2.21.0 (Apple Git-122.2)
by
感谢补丁,但我们故意不支持它,并且不想添加它。clj 方法是使用别名来允许构建类路径变体。如果您想在您的 pom 中使用它,您将需要维护自己的 pom。
by
啊,我现在明白了。这很有道理。谢谢!
by
@alexmiller 谢谢你对这个问题的说明。一般来说,一切都很好,但我在尝试让 cljdoc 与此一起工作时遇到了麻烦,因为它需要将可能包含在别名中的依赖项在 pom 文件中定义,并标记为 `provided`。

支持 `:scope "provided"` 的另一种选择是让 `tools.deps` 对 `` 列表执行 upsert 操作。你会考虑这个吗?似乎唯一的替代方案是我编写一个小的脚本,手动在 `` 中添加 `provided` 依赖,这感觉有点像 hacking。

一如既往,感谢你的时间!
by
@alexmiller 谢谢你对这个问题的说明。一般来说,一切都很好,但我在尝试让 cljdoc 与此一起工作时遇到了麻烦,因为它需要将可能包含在别名中的依赖项在 pom 文件中定义,并标记为 `provided`。

支持 `:scope "provided"` 的另一种选择是让 `tools.deps` 对 `` 列表执行 upsert 操作。你会考虑这个吗?似乎唯一的替代方案是我编写一个小的脚本,手动在 `` 中添加 `provided` 依赖,这感觉有点像 hacking。

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

一如既往,感谢你的时间!
by
我们正在努力为将来使用 pom gen 提供更灵活的方法,到那时可能会有更多的空间来影响这一过程。
...