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

欢迎!请查看 关于 页面以了解更多有关如何工作的信息。

+7
Clojure CLI

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

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

我认为这是一个好主意。write-pom 已经有添加 SCM 信息选项。对于许多项目来说,pom.xml 只是一个模板,这不仅多余,而且增加了复杂性,也可能被 Clojure 新手或自动化工具错误解释,除非将其置于多余的子目录(例如模板)中。
供参考,这是(这个项目的一个)原始动力之一:https://github.com/pmonks/tools-pom

2 个答案

+1
by
selected by
 
最佳回答

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

文档: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"]]]]) 
by
我已经将我的开源项目切换为使用这个功能,它工作得很好!谢谢!

我还更新了 deps-new,所以它生成的项目也使用这个功能,而不是“模板”pom.xml 文件。这样更方便!
+1
by
编辑 by

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 文件中有很多其他“应该”存在的字段,而 :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` ,因为文件中的许多部分都被替换了。

我仍然青睐对于构建 pom 的程序化访问,尽管我并不认同模板,但我理解支持它的论据。
提交者:
我认为在 write-pom 文档字符串和 tools.build 指南中添加关于这一点(具体是许可证)的说明也会很有帮助。
提交者:

编辑
如果你编程式地使用b/write-pom,那么依赖模板确实有点麻烦。这也要求Clojars上的每个库都这样做。

t.build的增加对此的支持似乎也非常有限(我们的分支是这样做的:[链接](https://github.com/clojure/tools.build/commit/df75a6c3f9d2297f27da572836d004fd66b8d894))。
这听起来有点像“下滑坡效应”:一开始我们得到了:scm作为哈希表,然后可能添加:licenses作为一个哈希表的向量,然后是一些其他大家认为重要的XML片段的选项...这将为整个选项创建一个完整的DSL!

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

inline模板作为单个hiccup-like结构怎么样?只有一个选项,它是数据,它可以支持人们想要生成XML文件的任何部分...
...