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

欢迎!请参阅关于页面以了解更多关于此的工作方式的信息。

+3
工具构建
关闭

我们需要对由 clojure.tools.build.api/uber 创建的 META-INF/MANIFEST.MF 文件进行自定义,原因有几个。

  1. 我们使用的 Java 库 Liquibase,需要在 manifest 文件中有一个 Liquibase-Package 条目才能在 uberjar 中使用
  2. 虽然我们的某些库是多版本库,但我们希望在构建的 uberjar 中排除 Multi-Release: true。在多版本 JAR 中,Log4j 的速度慢了一个数量级,直到我们找到解决这个问题,我们只是一直创建单版本 JAR。

使用 Leiningen,您可以通过在 project.clj 中包含一个 :manifest 键来指定 manifest 的内容…将此选项添加到 tools.build 中将非常有用。

备注:可在 v0.1.4 中使用

3 个答案

0

关于log4j导致的性能下降,或许您可以看看这个链接https://github.com/line/armeria/issues/2306,它显示了类似症状,原因是客户端代码中的特定调用(而非log4j本身)使用了一个早已废弃的方法。

顺便一提,我们遇到了相反的问题:在添加了Multi-Release: true的检测/设置功能之前,由于回退到反射和堆栈遍历,我们在Java 11上使用log4j2(在Java 8上是正常的)时速度极慢。

关于:manifest配置:这是depstar中已经嵌入的功能。现在它提供了一个API,可以提供对tools.build's jaruber函数的替换(输入和返回值完全相同)。

如果您想使用tools.build尝试它,我很乐意将为depstar添加一个禁用多版本检测的选项?有关详细信息,请参阅https://cljdoc.org/d/com.github.seancorfield/depstar/2.1.267/doc/tools-build-usage

0
by
0
by

在tools.build v0.1.4中添加了对自定义清单属性支持(包括自动内容的覆盖)的jar和uber任务。

(uber {...
       :manifest {"Liquibase-Package" "whatever"
                  "Multi-Release" false}})
...