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。

这里是一个添加支持的补丁

自: Ecc6d48bf828ccdd076be248738155d97fa04477 Mon Sep 17 00:00:00 2001
由: Thomas Spellman <[email protected]>
日期: Sat, 22 Feb 2020 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 "Skipping coordinate:" coord)))
 
 (defn- gen-deps
--
2.21.0 (Apple Git-122.2)
感谢这个补丁,但我们故意不支持这个特性并且不想添加它。clj 方法是使用别名来允许构建类路径变体。如果你想在你的 pom 中包含这个特性,你需要自己维护 pom 文件。
哦,我现在明白了。这是符合逻辑的。谢谢!
@alexmiller 感谢你对这个问题的澄清。一般来说,这些都很好,但我很难让cljdoc与这个配合工作,因为cljdoc需要包含在别名的依赖项中,这些依赖项应该包含在pom中,并标记为`<scope>provided</scope>`。

支持`:scope "provided"`的一个替代方案是让 `tools.deps` 在`<dependencies>`列表上执行upsert操作。你会考虑这个方案吗?可用的唯一替代方案似乎是,我写一个脚本来手动修改`<scope>provided</scope>`依赖项,这感觉很像是黑客行为。

一如既往,感谢你的时间!
@alexmiller 感谢你对这个问题的澄清。一般来说,这些都很好,但我很难让cljdoc与这个配合工作,因为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,那时可能会有空间对这一过程有更多的影响。
...