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

欢迎!请查看 关于 页面以了解更多关于如何使用本站的信息。

+7
Clojure CLI

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

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

我认为这是一个好主意。write-pom 已经具有添加 SCM 信息的选项。对于许多项目,pom.xml 仅作为一个模板使用,a)是多余的 b)增加了复杂性 c)可能会被新接触 Clojure 或自动化工具的人误解,除非将其放在一个冗余的子目录(例如 template)下。
FWIW 这就是(这些原动力之一):https://github.com/pmonks/tools-pom

2 答案

+1
by
选中 by
 
最佳答案

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"]]]]) 
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文件中的一部分,但是write-pom也省略了这些,而:src-pom选项让您可以提供所有这些。

我认为更多的文档可以推荐使用“模板”pom.xml文件(我还会更新clojure-doc.orgtools.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 是一个错误。

怎样算作嵌入的模板作为单个 hiccup 类结构?只是一个选项,它是数据,它可以支持任何人们想要生成的 XML 文件片段...
...