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

欢迎!请访问关于页面,了解更多此功能的信息。

+3
tools.build
关闭

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

  1. 我们使用的Java库Liquibase,需要在manifest文件中包含Liquibase-Package条目以在uberjars中使用,请参阅Liquibase 2.0升级指南
  2. 即使我们的某些库是多版本库,我们也想从构建的uberjar中排除Multi-Release: true。在多版本JAR中,Log4j的速度降低了一个数量级,直到我们解决这个问题,我们只创建单版本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 0.1.4中,为jar和uber任务添加了自定义的manifest属性支持(包括自动内容的覆盖)。

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