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
主题:[补丁] 在生成 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]))
             (coord)
 
 (&defn- gen-deps
--
2.21.0 (Apple Git-122.2)
by
感谢这个补丁,但我们故意不支持这个功能,并且不想添加它。clj 方法的做法是使用别名来允许构建类路径变体。如果你想在你的 pom 中添加它,你需要维护自己版本的 pom。
by
嗯,我现在明白了。这很有道理。谢谢!
by
@alexmiller 感谢你对这个问题的澄清。一般来说,这都没问题,但我现在在使用 cljdoc 时遇到了困难,因为 cljdoc 需要到在 pom 中包含某些依赖项,这些依赖项通常在别名中包括,但需要在 pom 中标记为 `provided`。

支持 `:scope "provided"` 的另一种方案是让 `tools.deps` 在 `` 列表上进行更新。这是否是你考虑的事情?目前似乎只有一种替代方法,那就是手动编写一个小脚本将 `provided` 依赖项添加到其中,这感觉相当混乱。

一如既往,感谢你的时间!
by
@alexmiller 感谢你对这个问题的澄清。一般来说,这都没问题,但我现在在使用 cljdoc 时遇到了困难,因为 cljdoc 需要到在 pom 中包含某些依赖项,这些依赖项通常在别名中包括,但需要在 pom 中标记为 `provided`。

支持 `:scope "provided"` 的另一种方案是让 `tools.deps` 在 `` 列表上进行更新。这是否是你考虑的事情?目前似乎只有一种替代方法,那就是手动编写一个小脚本将 `provided` 依赖项添加到其中,这感觉相当混乱。

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

一如既往,感谢你的时间!
by
我们正在努力使 pom gen 在未来具有更可配置的方式,届时可能会有空间对该过程产生更多影响。
...