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

欢迎!请查看关于页面以了解该系统的更多信息。

+1 投票
tools.build
重新分类

为了正确地在 Java 生态系统中运行,库的可选依赖项可以在 pom.xml 文件中以 'provided' 范围包含。

deps.edn 明确不支持包含具有 'provided' 范围的依赖项,而是推荐使用别名。

为了在更广泛的 Java 生态系统中作为库良好运行,能够输出一个库 JAR 文件,该文件包含一个 pom.xml 文件以及包含但不包括在 deps.edn 中的额外依赖项(对于 Java 构建工具,范围为 'provided'),将非常有帮助。

例如,cljdoc 无法在库构建时包括所有依赖项而构建文档。

'write-pom' 已经有一个选项来包含一个模板 'source' pom.xml,但是依赖项将被 deps.edn 文件中的信息覆盖。

有一些解决方案 - 例如,请参见线程 https://clojurians.slack.com/archives/C8V0BQ0M6/p1680090647156119,其中修补过程以包含具有 'provided' 范围的依赖项 - 但它们并不是理想的。

选项。

  1. 不采取任何行动 - 按照 Slack 线程示例对 tools.build 进行 monkey patch,或更改生成的 pom.xml 以包括额外的 'provided' 范围依赖项。

  2. 合并(源)pom.xml 中的现有依赖项而不是覆盖(但可能是一个破坏性的更改)

  3. 为 'write-pom' 提供一个额外的参数以包含任意依赖项,这是一个映射的序列,它被转换为 XML,包括 :scope,对于这些可选依赖项将是 :provided。

  4. 与 cljdoc 协作以支持别名,这样可以由库作者自定义文档构建,如此类构建不会失败。

1 个回答

+2
第一印象中,我倾向于选择 #3。
遵循#3,是否可以拥有类似Leiningen的`:pom-plugins`,生成`<plugins><plugin>...</plugin></plugins>`块呢?

或者有更好的方法来添加自定义Maven块?一些Maven插件可以添加新的元素和属性。
对于除了`:dependencies`、`:repositories`和我们所设置的少数几个其他部分,最好将这些信息放入模板`pom.xml`中。
...