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

欢迎!请访问 关于 页面了解更多关于如何使用本站的信息。

+3
tools.build
已关闭

我们有许多原因需要自定义由 clojure.tools.build.api/uber 创建的 META-INF/MANIFEST.MF 文件。

  1. 我们使用的 Java 库 Liquibase,需要在清单文件中有一个 Liquibase-Package 条目,以便在 uberjars 中使用
  2. 我们希望从构建的 uberjar 中排除 Multi-Release: true,尽管我们的一些库是多版本。由于 Log4j 在多版本 JAR 中运行速度慢了一阶,在我们找出如何解决这个问题之前,我们只是创建单个版本的 JAR。

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

已关闭并注明:可在版本 v0.1.4 中使用

3 答案

0

关于 log4j 的减慢问题,可以看看 https://github.com/line/armeria/issues/2306,它表现出类似的症状,是由于客户端代码中特定调用(而非 log4j 本身)使用了已弃用的方法。

说到这,我们还遇到了相反的问题:在depstar添加了Multi-Release: true的检测/设置之前,log4j2在Java 11(但在Java 8上则表现良好)上运行得非常慢,因为它回退到了反射和堆栈遍历,我记得是这样。

关于:manifest配置:这是depstar中已经内置的功能,现在提供了一个API,可以为客户提供的tools.buildjaruber功能提供现场替换(具有相同的输入和输出)。

如果你想在tools.build中试用,我愿意为depstar添加一个禁用MR检测的选项吗?有关详细信息,请参阅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任务添加了自定义manifest属性支持,包括自动生成内容的覆盖。

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