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

欢迎!请参阅 关于 页面以获取更多关于此功能的信息。

+7
Clojure CLI

由于 Clojars 需要许可证,需要上传的项目需要在它们的 jar 项目的 pom 文件中添加许可证块。使用 build.tools,可以创建 pom.xml 文件,手动修改它以包括许可证部分,然后使用该 pom 创建 jar,但这需要手动操作。

是否有计划为 write-pom(和 gen-pom)添加选项,以允许程序性地插入许可证?

我认为这是一个好主意。write-pom 已经有了添加 SCM 信息的选项。对于许多项目来说,pom.xml 仅用作模板,它是 a)多余的 b)增加了复杂性,c)可能会被 Clojure 新手或自动工具错误解释,除非将其放置在多余的子目录(例如模板)中。
顺便一提,这(之一)是该项目最初的动力之一:[https://github.com/pmonks/tools-pom](https://github.com/pmonks/tools-pom)

2 个回答

+1

selected
 
最佳答案

tools.build v0.9.6 现在包含一个额外的 :pom-data 属性,可以用来以 hiccup 风格提供许可证(以及任何其他 pom 数据),并将其放入生成的 pom 文件中。

文档: https://clojure.github.io/tools.build/clojure.tools.build.api.html#var-write-pom

示例

(b/write-pom
  ...
  :pom-data 
    [[:licenses
      [:license
        [:name "Eclipse Public License 1.0"]
        [:url "https://opensource.org/license/epl-1-0/";]
        [:distribution "repo"]]]]) 
我已经将我的开源项目切换过来使用这个,效果非常好!谢谢!

我还更新了 deps-new,生成的所有项目现在都使用这个,而不是“模板”pom.xml 文件。太好了!
+1

编辑

write-pom 已经可以使用“模板” pom.xml 文件来生成最终的、上传的 pom.xml 文件。这就是 deps-newclj-new 生成的方式——参见该模板文件的源码

https://github.com/seancorfield/deps-new/blob/develop/resources/org/corfield/new/lib/root/template/pom.xml

这也是我在我的开源项目中处理此问题的方法,比如 next.jdbc

https://github.com/seancorfield/next-jdbc/blob/develop/template/pom.xml

https://github.com/seancorfield/next-jdbc/blob/develop/build.clj#L45

我认为不应当在 tools.build 中添加 :license 选项 -- 上传的 pom.xml 文件中“应该”包含许多其他字段,而 write-pom 同样省略了这些字段,:src-pom 选项允许您提供所有这些。

我认为更多的文档应该推荐使用一个“模板” pom.xml 文件(我将更新 clojure-doc.org 关于 tools.build 的说明以反映这一点)。

clojure-doc.org 问题: https://github.com/clojure-doc/clojure-doc.github.io/issues/59

deps-new 问题(将“模板”pom.xml从根目录移至模板文件夹):https://github.com/seancorfield/deps-new/issues/45
当我说“…然后使用那个 pom 创建 jar”时,我是指模板。

许多年来我都没有手动运行 `jar cf`,并计划保持这种状态)

我想我只是需要一个微小的 pom.xml,而不是使用 `-Spom` generate 整个文件,因为文件中有那么多内容会被替换。

我仍然更喜欢对构建 pom 的编程访问,但我可以理解模板的论点,尽管我不同意。
在 write-pom 文档字符串和 tools.build 指南中添加关于此(特别是许可证)的说明也会非常有帮助。

编辑了
如果你以编程方式使用b/write-pom,那么依赖于模板是非常繁琐的。这也要求Clojars上每个部署的库都这样做。

t.build的修改在支持这一点上似乎也很少(我们的分支这样做: https://github.com/clojure/tools.build/commit/df75a6c3f9d2297f27da572836d004fd66b8d894)。
这似乎有点“滑坡论”:首先我们得到了:scm作为散列表,然后可能是添加:licenses作为散列表的向量,然后根据其他人们认为重要的XML片段的其他选项...它将为整个选项集创建一个完整的DSL!

肯定有更好的方法。坦白说,我认为添加:scm是一个错误。

如何把一个内联模板作为单个hiccup-like结构?仅仅一个选项,它是数据,它可以支持人们想要生成XML文件之间的任何部分...
...