请在2024年Clojure现状调查!中分享您的想法。

欢迎!请参阅关于页面以了解有关如何使用的信息。

+3票数
tools.build
已关闭

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

  1. 我们使用的Java库Liquibase,需要在Manifest文件中添加Liquibase-Package条目,才能在uberjars内部使用Liquibase-Package条目(请参阅文档)
  2. 即使我们的一些库是多版本,我们也想从构建的uberjar中排除Multi-Release: true。在多版本JAR中,Log4j的速度慢了一个数量级;在找到解决这个问题之前,我们一直在创建单版本JAR

使用Leiningen,您可以在project.clj中通过包含一个:manifest键来指定清单的内容将非常有助于向tools.build添加这样的选项

关闭时记录:可在v0.1.4版本中找到

3个答案

0票数

关于log4j性能下降的问题,也许可以看一下这个GitHub链接:https://github.com/line/armeria/issues/2306,其中描述了类似的症状,原因是客户端代码中的特定调用(而非log4j本身)使用了已经过时很长时间的方法。

说到这,我们还遇到了相反的问题:在使用depstar之前添加了Multi-Release: true的检测/设置之前,我们的log4j2在Java 11中运行得非常慢(但在Java 8中运行良好),因为它回退到了反射和堆栈跟踪,据我所知。

关于:manifest配置:这是depstar中已经集成的东西,现在提供了一个API,可以提供对tools.build中的jaruber函数的即插即用替换(使用相同的输入和返回值)。

如果需要的话,我很乐意在depstar中添加一个选项来禁用MR检测?关于细节,请参阅https://cljdoc.org/d/com.github.seancorfield/depstar/2.1.267/doc/tools-build-usage

0票数
0票数

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

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