【问题标题】:Properties in manifest清单中的属性
【发布时间】:2016-10-20 22:39:29
【问题描述】:

IBM Cognos 在 /WEB-INF/lib/ 中生成包含大量 JAR 的 EAR 文件

在这些 JAR 中,有几个(即 idvisualizations_helpers.jar 和其他一些)在其 /META-INF/MANIFEST.MF 中包含以下内容:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.2
Created-By: jvmwi3260sr10-20111207_96808 (IBM Corporation)
Main-Class: ${project.main.class}
Class-Path: ${relative.classpath}

这有效吗?我的意思是,谁将负责扩展这些 {} 占位符?对我来说,这甚至没有任何意义:如果执行 JAR 的软件知道它的主类,则没有理由在 Manifest 中提及它。 我只能想到两种解释。首先,这是一个简单明了的错误,在制作 JAR 时未能替换这些占位符。其次,这种表示法是有效的,并假定使用该 JAR 的 JVM 将为这些占位符提供值(但我不相信这一点,因为为每个此类 JAR 指定不同的值太不方便了)。

请有人解释一下这是什么意思。问题的更实际部分是在 Websphere Liberty 8.5.5 上会产生错误,因为“${relative.classpath}”不是有效的 URI。我想知道为什么在另一个运行完整 Websphere 的环境中不会发生这种情况(尽管那里的 Cognos 配置与我的不同)。

【问题讨论】:

  • 您从 Liberty 收到的错误消息是什么?
  • 这是 URISyntaxException:索引 1 处路径中的非法字符:${relative.classpath}
  • 哦,还有一件事要补充。我不仅在另一个系统是完整的 Websphere 时运行 Liberty,而且我正在使用 Oracle JRE,而另一个系统正在使用 IBM(在 /IBM/WebSphere/AppServer/java/jre 下)。我会检查是否是这个原因。也许 IBM 正在扩展占位符(可能使它们为空但至少有效)或忽略它们。
  • 我猜这是构建变量替换问题,而不是 JVM 差异。
  • @MaksimGumerov 你有没有解决你的问题?我正在尝试将属性占位符添加到我的清单文件中。

标签: java tomcat jar websphere war


【解决方案1】:

否,根据Java specifications,Java JVM 使用的 final 清单中的属性无效。当我说“最终”时,我的意思是您的清单中可能有属性作为源代码的一部分,然后在构建期间将其过滤掉并替换为这些属性的值。这很好。另一种可能性是,可能会有一些构建后处理将这些属性替换为正确的值。

你说:

...在 Websphere Liberty 8.5.5 上产生错误,因为“${relative.classpath}”不是有效的 URI。我想知道为什么在另一个运行完整 Websphere 的环境中不会发生这种情况(尽管那里的 Cognos 配置与我的不同)。

我不太清楚最后一部分关于 Cognos 配置与您的配置不同的含义,但听起来您是在说您在问题中显示的清单在一个平台上运行但在另一个平台上运行.我会想象一个平台正在执行后处理,或者两个平台以某种方式具有不同的部署代码。我建议您返回并确认您在两个平台上都有完全相同的清单,并调试您的构建过程以尝试查找这些变量的值是在何处以及何时获得的。

有关清单文件的更多信息,请参阅this link

【讨论】:

  • 我已经检查过了,JAR 的清单在两个系统上是相同的,即使它们包含的 EAR 不同。是否引用了真实软件中此类后处理的已知示例?
  • 我不确定是否有任何平台真的进行后处理,这只是我想到的一种可能性。但是,我知道有时部署过程可能涉及后处理,以便将变量本地化到要部署应用程序的环境。
  • 这里还有另一种可能性:某些平台可能总是或选择性地忽略清单中的此类错误。比如说,应用程序服务器很可能会使用他们的自定义类加载器等,我认为理论上可以默默地跳过这些问题或不读取任何清单。但是理论不会给我一个快速的答案。我现在需要的是坚定的回答,比如“是的,这是错误的,但完整的 Websphere(或 Tomcat 等)会接受它”或者“如果你这样做,Liberty 也可以接受它”或“Tomcat 将扩展这些占位符”......
  • 我明白了,我不能肯定地说,因为我对这些特定平台以及它们如何处理清单文件知之甚少。我建议您编辑您的问题以反映您刚刚在此处所说的内容,因为真正的问题似乎是“为什么此清单在平台 A 上有效,但在平台 B 上无效?”
猜你喜欢
  • 2013-06-10
  • 2019-07-21
  • 2019-11-12
  • 2017-04-12
  • 2012-08-29
  • 2021-02-10
  • 1970-01-01
  • 2021-05-29
相关资源
最近更新 更多