请在 2024 年 Clojure 状态调查! 分享你的想法。

欢迎!请访问 关于 页面了解这项工作的更多信息。

+7
 Clojure CLI

由于 Clojars 要求提供许可证,需要进入那里的项目需要在它们的 jar 项目的 pom 文件中添加许可证块。使用 build.tools,你可以创建一个 pom.xml,手动编辑它以包含许可证部分,然后使用该 pom 创建 jar,但它需要手动操作。

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

我认为这是一个不错的想法。write-pom 已经有添加版本控制系统(SCM)信息的选项。对于许多项目,pom.xml 只用作模板,只会造成)冗余 b)增加复杂度,c)可能被 Clojure 新手或自动化工具误解,除非放到一个冗余的子目录(如 template)下。
此项目(之一)的原始动机如下: https://github.com/pmonks/tools-pom

2 个回答

+1

选择了
 
最佳回答

tools.build v0.9.6 现在包含了一个额外的 :pom-data 属性,可用于在生成的 pom 文件中以 hiccup 风格提供许可证(和其他 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

这也是我在我的免费开源软件(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
我之前提到“...然后创建一个jar,使用该pom文件。”时是指的模板。

(我已经很多年没有手动运行`jar cf`了,并计划继续保持这种状态)

我想可能只需要一个小的pom.xml,而不用使用`-Spom`生成整个文件,因为文件中的很多内容都会被替换。

我还是更倾向于程序化方式构建pom文件,尽管我不同意使用模板,但我可以看出模板的论据。
我想在write-pom文档字符串和tools.build指南中都添加关于这个(特别是许可证)的注释,这也会很有帮助。
 
编辑
如果您以编程方式使用b/write-pom,那么依赖于模板会很麻烦。这也要求Clojars上的每个库都这样做。

t.build的添加似乎是太少,以支持这一点(我们的分支是这样做的:[链接])。
 
这似乎是一条“滑梯路线”:一开始我们得到了:scm,然后也许添加:licenses作为哈希映射的向量,然后为其他被认为是重要的添加其他XML片段的各种选项...它将整个DSL都用于选项!

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

将内联模板作为一个单一体结构的hiccup如何?只是一个选项,它是数据,它可以支持人们想要生成的任何XML文件的片段...
...