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。

下面是一个增加支持的补丁

冲突解决方案:版本 From aec6d48bf828ccdd076be248738155d97fa04477 Mon Sep 17 00:00:00 2001
发件人:Thomas Spellman <[email protected]>
日期:2020年2月22日 Saturday 下午10:09:49 -0800
主题:[PATCH] 在生成pom.xml时支持:scope在deps映射中

---
 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。
哦,我现在明白了。这很有道理。谢谢!
by
@alexmiller 感谢你对此事的澄清。总的来说,这都很好,但我遇到了在使用cljdoc时的问题,因为它需要包含在别名中的依赖项存在于pom中,并标记为`<scope>provided</scope>`。

支持`:scope "provided"`的另一个替代方案是让`tools.deps`对`<dependencies>`列表执行upsert操作。你会考虑这样做吗?似乎唯一可用的替代方案是让我编写一个脚本来手动添加`<scope>provided</scope>`依赖项,这感觉有点 hacky。

一如既往,感谢你的时间!
by
@alexmiller 感谢你对此事的澄清。总的来说,这都很好,但我遇到了在使用cljdoc时的问题,因为它需要包含在别名中的依赖项存在于pom中,并标记为`<scope>provided</scope>`。

支持`:scope "provided"`的另一个替代方案是让`tools.deps`对`<dependencies>`列表执行upsert操作。你会考虑这样做吗?似乎唯一可用的替代方案是让我编写一个脚本来手动添加`<scope>provided</scope>`依赖项,这感觉有点 hacky。

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

一如既往,感谢你的时间!
by
我们正在努力开发一个更可配置的方式来利用pom gen,这可能在将来有更多的空间来影响此过程。
...