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的人或自动化工具误解,除非放在冗余的子目录下(例如,模板)。
据我所知,这是该项目(之一)的原始动力: 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 文件中,而 :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问题(将“template” 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 类型的结构?只是一个选项,它是数据,它可以支持人们想要生成的 XML 文件中的任何部分……
...