【问题标题】:Specify Manifest.MF during test - Fat / Shaded JAR在测试期间指定 Manifest.MF - Fat / Shaded JAR
【发布时间】:2014-06-13 09:21:54
【问题描述】:

我需要在 MANIFEST.MF 文件中显示一些值,以使 JAI 对 ImageIO.read 感到满意。

在 maven 循环的测试阶段它们需要存在于哪里?

【问题讨论】:

    标签: java maven manifest.mf


    【解决方案1】:

    那不是在测试资源中

    src/test/resources/META-INF/MANIFEST.MF
    

    【讨论】:

    • 我确实尝试过,但似乎没有成功。
    • 该文件将被复制,但如果你想把它放入一个战争或罐子里,你还需要确保来自 src/test/resources 的版本是使用的,而不是src/main/resources 中的版本。我们需要有关您如何构建 jar 的更多信息,以帮助您。
    • @PaulHicks jar 文件不是他的问题,他只需要在测试阶段(即在创建 jar 之前)更改 Manifest。
    • 是的,但问题可能是正确的清单被忽略了。我们不知道他在哪里寻找清单,也不知道他的流程的哪个部分正在尝试使用它。所以他要调查的另一件事可能是个好主意。
    • 如下所示,manifest.mf 值仅在您实际拥有 JAR 时才可用
    【解决方案2】:

    经过广泛搜索,这似乎是不可能的。

    但是,这个问题永远不会出现,因为 JAI 在 JAR 中,并且 JAR 应该包含所需的值。因此,正如在类似问题上所建议的那样,我确实在尝试编译 JAI。在我的情况下,因为我将我的一个组件作为可执行文件部署给天真的用户,所以我使用 shade 插件构建一个“Fat JAR”,其中包含单独的所有类。

    不幸的是,我已将用于构建此应用程序的 pom.xml 文件复制到我引用的类库之一中,因此该类库也变成了“Fat JAR”。这个 jar 不包含清单中的值,即使它确实引用了 JAI 库,因此随之而来的是混乱。这个问题变得更加复杂,因为这个错误是在几个月前犯的,直到现在在一个不相关的更改之后,特定 Fat 引用 JAR 中的 JAI 版本才被 JVM 使用。

    如果您遇到同样的问题(互联网搜索表明其他人有),请先尝试 2 件事。

    1. 将 Specification-Vendor 和 Implementation-Vendor 属性添加到您自己构建的任何 jar 的清单文件中。

    2. 构建一个简单的应用程序,该应用程序只使用 ImageIO.read 读取任何图像文件,然后逐个运行此删除 maven 引用,直到问题消失并将您的精力集中在此 JAR 上。

    【讨论】:

      猜你喜欢
      • 2020-08-29
      • 2016-12-26
      • 2011-03-04
      • 1970-01-01
      • 2019-07-04
      • 2020-01-06
      • 1970-01-01
      • 2018-01-22
      • 2017-01-26
      相关资源
      最近更新 更多