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

欢迎!请参阅 关于页面 了解更多有关该页面如何工作的信息。

+7
Clojure CLI

由于 Clojars 需要许可证,需要上传到那里的项目需要在它们的 jars 的 pom 文件中添加一个许可证块。使用 build.tools 可以创建一个 pom.xml,手动编辑它以包含一个许可证部分,然后使用该 pom 创建 jar。但这却是手动操作。

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

我认为这是个好主意。write-pom 已经有了添加版本控制信息选项。对于许多项目而言,pom.xml 仅作为模板使用会增加复杂性,并可能被 Clojure 新用户或自动化工具错误解析,除非将其放在一个冗余子目录(如 template)下。
关于这个项目(之一)的原动力是: https://github.com/pmonks/tools-pom

2 答案

+1

已选择
 
最佳回答

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"]]]]) 
我已经将我的开源项目切换到使用这个功能,并且效果很好!谢谢!

我还更新了 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 文件中出现的字段,而 :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 指南中添加关于这个(特别是许可证)的说明将会非常有帮助。
by
编辑 by
如果你以编程方式使用b/write-pom,那么就必须依赖于模板,这真是非常繁琐。这还要求Clojars上的每个库都这样做。

t.build的添加看起来也仅仅是为了支持这一点(我们的分支就是这样做的:[https://github.com/clojure/tools.build/commit/df75a6c3f9d2297f27da572836d004fd66b8d894](https://github.com/clojure/tools.build/commit/df75a6c3f9d2297f27da572836d004fd66b8d894))。
by
这似乎有点“滑雪坡”的味道:首先我们得到了:scm作为哈希映射,然后可能是添加:licenses作为哈希映射的向量,然后是一些其他的人认为重要的XML片段选项...这将会为选项做一个完整的DSL!

必须有一种更好的方法。老实说,我认为添加:scm是个错误。

用一个内联模板作为单个hiccup结构怎么样?只有一个选项,它是数据,它可以支持任何人们想要的XML文件片段...
...