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

欢迎!请查看 关于 页面以了解有关如何工作的更多信息。

+7
Clojure CLI

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

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

我认为这是一个好主意。write-pom 已经有选项添加SCM信息。对于许多项目,pom.xml只作为模板使用,是重复的,增加了复杂性,并且可能会被Clojure的新手或自动化工具误解,除非将其放在冗余子目录(例如template)下。
据我所知,这是这个项目的初衷之一: 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

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 选项 -- 由于 write-pom 也省略了足够多的“应包含在上传的 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问题(将“模板”pom.xml从根目录移动到模板文件夹):https://github.com/seancorfield/deps-new/issues/45
我说“…然后使用那个pom创建jar”时是在指向模板。

(我已经多年没有手动运行`jar cf`了,并打算继续这样)

我想我只需要一个微小的pom.xml,而不是用`-Spom`生成整个文件,因为文件的大部分都被替换了。

我仍然更喜欢通过程序访问构建pom,但我能理解模板的可取之处,尽管我不同意它。
我认为在write-pom文档字符串和tools.build指南中添加一个有关这个(特别是许可证)的注释也会很有帮助。
by
编辑 by
如果您使用 b/write-pom 程序化地编写,那将非常繁琐,不得不依赖于模板。这也让部署在 Clojars 上的每个库都必须这样做。

t.build 的增加似乎也很小,以支持这一点(我们的分支这样做:[链接](https://github.com/clojure/tools.build/commit/df75a6c3f9d2297f27da572836d004fd66b8d894))。
by
这有点像“滑坡效应”:首先我们得到了 :scm 作为哈希表,然后可能是添加 :licenses 作为哈希表向量,然后是其他被认为重要的 XML 片段选项...它将使整个 DSL 仅在选项中使用!

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

如何用一个内联模板作为单个 hiccup 类型的结构?只是一个选项,它是数据,它可以支持任何人们想要生成的 XML 文件片段...
...