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 新手或自动工具误解,除非将其放在一个多余的子目录下(例如 template)。
对这个项目的(其中一个)原始推动力是:https://github.com/pmonks/tools-pom

2 个回答

+1

选中
 
最佳答案

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"]]]]) 
我已经将我的 OSS 项目转换为使用这个功能,并且它工作得很好!谢谢!

我还更新了 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

这就是我在我的 FOSS 项目中处理这个问题的方法,例如 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菜谱以反映这一点)。

by
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
by
我说“……然后使用该pom创建一个jar文件”时,我指的是模板。

(我多年没有手动运行`jar cf`,并计划继续保持这种方式)

我觉得我只需要一个非常小的pom.xml文件,而不是用'-Spom'生成整个文件,因为大部分文件内容都会被替换。

我还是更倾向于程序化方式访问构建pom,但我可以看出使用模板的论据,尽管我不同意。
by
我觉得在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文件的片段...
...