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

欢迎!请查看关于页面获取更多关于它是如何工作的信息。

+7
Clojure CLI

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

有什么计划为 write-pom(和 gen-pom)添加一个选项,以便程序化地插入许可证吗?

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

2 条回答

+1

选中
 
最佳答案

tools.build v0.9.6 现在包含了一个额外的 :pom-data 属性,可以使用它以 hiccup 风格提供许可(以及其他 pom 数据),并将其放入生成的 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

这就是我在我的开源项目中处理这个问题的方法,比如在 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.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作为哈希表的矢量,然后是一些其他选项,人们认为很重要要添加(即将会为此出台完整的DSL选项)!

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

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