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

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

+7投票
Clojure CLI

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

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

我认为这是一个好主意。write-pom已经有选项添加版本控制信息。对于许多项目,pom.xml只用作模板是:a)冗余b)增加复杂性c)可能会被Clojure的新手或自动化工具误解释,除非放在一个冗余的子目录下(例如template)。
实话说,这正是这个项目的初衷之一:[https://github.com/pmonks/tools-pom](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"]]]]) 
我已经将我的 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 文件(并且我会更新 tools.build 的 clojure-doc.org 烹饪书,以反映这一点)。

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 的 docstring 和 tools.build 指南中添加关于这一点(特别是许可证)的说明也会有很大帮助。

编辑过
如果你用b/write-pom程序化地使用它,这将非常麻烦,必须依赖于模板。这也要求Clojars上部署的每个库都要这样做。

t.build的增加对此的支持似乎也很小(我们的分支是这样做的:https://github.com/clojure/tools.build/commit/df75a6c3f9d2297f27da572836d004fd66b8d894)。
这似乎有点像“滑梯效应”:首先我们得到了:scm作为散列映射,然后也许会添加:licenses作为散列映射的向量,然后添加其他人们认为重要的XML片段的其他选项……这将使选项成为一个完整的DSL!

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

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