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] 支持在生成pom.xml时添加而非从pom.xml中删除deps地图的: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
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)
感谢你的补丁,但我们故意不支持它,我们不希望添加它。clj的方法是使用别名来允许构建类路径的变体。如果你想在你的pom中使用这]],你需要维护自己的pom。
啊,我现在明白了。这很有道理。谢谢!
@alexmiller 谢谢对这个问题的澄清。一般来说,这都是好的,但我遇到了在与 التقارير generate pom.xml 文件时的问题,因为 cljdoc 需要依赖可能被包含在别名中的依赖,并在 pom 中将其标记为 `<scope>provided</scope>`。

支持 `:scope "provided"` 的一个替代方法是让 `tools.deps` 在 `<dependencies>` 列表上执行 upsert 操作。你认为这有可能吗?可用的唯一替代方案似乎是我写一个脚本来手动插入 `<scope>provided</scope>` 依赖,这感觉相当黑客式。

一如既往,感谢你的时间!
@alexmiller 谢谢对这个问题的澄清。一般来说,这都是好的,但我遇到了在与 التقارير generate pom.xml 文件时的问题,因为 cljdoc 需要依赖可能被包含在别名中的依赖,并在 pom 中将其标记为 `<scope>provided</scope>`。

支持 `:scope "provided"` 的一个替代方法是让 `tools.deps` 在 `<dependencies>` 列表上执行 upsert 操作。你认为这有可能吗?可用的唯一替代方案似乎是我写一个脚本来手动插入 `<scope>provided</scope>` 依赖,这感觉相当黑客式。

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

一如既往,感谢你的时间!
我们正在致力于为未来的 pom gen 利用提供更具可配置性的方法,那么在那个点上可能有机会对这一过程产生更多影响。
...