2024 年 Clojure 调查问卷! 中分享你的想法。

欢迎!请参阅 关于页面 了解更多关于这个工如何工作。

+7
Clojure CLI

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

是否有计划为 write-pom(和 gen-pom)添加选项,以便可以进行许可证的编程插入?

我认为这是一个好主意。write-pom 已经有了添加 SCM 信息的选项。对于许多项目,pom.xml 只用作模板的:a)是冗余的,b)增加了复杂度,并且 c)可能会被那些新接触 Clojure 或自动化工具的人误解,除非将其放在冗余的子目录(例如模板)下。
FWIW 这是这个项目的(其中之一)初衷: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,所以生成的所有项目都使用这个工具,而不是 "template" 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文件(我还会更新tools.build的clojure-doc.org手册以反映这一点)。

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片段添加其他选项... 这将使整个选项成为专门的脚本语言!

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

regionale模板作为单一的hiccup结构怎么样? 只有一个选项,它是数据,它支持每个人想要生成XML文件的任何部分...
...