2024 Clojure 状态调查! 中分享你的想法。

欢迎!请查看 关于 页面以获取更多关于此如何工作的信息。

+3
tools.deps

存在一个假设 rằng当运行-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
作者:Thomas Spellman <[email protected]>
日期:周六,2020年2月22日 22:09:49 -0800
主题:[PATCH] 在生成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 "跳过坐标:" coord)))
 
 ( defn- gen-deps
--
2.21.0 (Apple Git-122.2)
感谢补丁,但我们是故意不支持的,也不打算添加。clj的方法是使用别名来允许构造类路径变体。如果你想在pom中使用它,你需要维护自己的pom。
我明白了。这样做是有道理的。谢谢!
by
@alexmiller 感谢您对此问题的澄清。总的来说,这都没问题,但我遇到麻烦,无法让 cljdoc 与此一起工作,因为它需要 dependencies,这些 dependencies 可能包含在 aliases 中的依赖,需要在 pom 中标记 `` 为 `provided`。

支持 `:scope "provided"` 的另一种方法是让 `tools.deps` 对 `` 列表执行 upsert 操作。您考虑过这个提议吗?目前似乎没有其他解决方案,我只能写一个简单的脚本来手动添加 `provided` 方面的依赖,这感觉非常像是一种简陋的解决方案。

一如既往,感谢您抽出时间!
by
@alexmiller 感谢您对此问题的澄清。总的来说,这都没问题,但我遇到麻烦,无法让 cljdoc 与此一起工作,因为它需要 dependencies,这些 dependencies 可能包含在 aliases 中的依赖,需要在 pom 中标记 `` 为 `provided`。

支持 `:scope "provided"` 的另一种方法是让 `tools.deps` 对 `` 列表执行 upsert 操作。您考虑过这个提议吗?目前似乎没有其他解决方案,我只能写一个简单的脚本来手动添加 `provided` 方面的依赖,这感觉非常像是一种简陋的解决方案。

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

一如既往,感谢您抽出时间!
by
我们正在努力实现一种更可配置的方法来利用 pom gen,这样在未来可能有机会对此过程施加更多影响。
...