gpt4 book ai didi

jar - MR-Jars 可以覆盖其他 jar 中的类吗?

转载 作者:行者123 更新时间:2023-12-04 17:45:58 26 4
gpt4 key购买 nike

我有一个适用于 Java 8 的 jar。

我想创建一个 jar,它将是多版本 JAR 但为空,只有 META-INF/versions 中的“修补”类.

我想要一个单独的 jar,这样人们就可以在 Java9 上包含它,否则,他们会使用默认的。为什么?因为很多工具还没有为 Java9 MR-Jars 准备好。

这可能吗? Java9 MR-Jar 会覆盖其他 jar 中的类吗?

为什么?

Multi-Release jar 背后的想法是它们提供简单的补丁。在我看来,MR jar 的工作方式并不令人满意。

我不能制作 2 个单独的 Jars 的原因有两个:

  1. 尝试制作适用于 Java8 和 Java9 的交叉编译源代码库。您最终会得到像 javajava8java9 这样的文件夹...然后让构建生成两个 jar,两个 poms...是的,祝你好运。
  2. 想象一下,我什至为 java9 构建了一个库。 transient 依赖性呢?这意味着使用我的所有其他库需要有依赖于我的jre8 版本的jre8 版本。就因为有Java9版本!

故事是这样的:

My A 是一个基于 Java8 构建的 Java 库,但打包为 Multi-Release Jar,这意味着当 jar 在 Java9 上运行时,它包含额外的类。其他类是在 JDK9 上单独构建的,我手动复制了它们(是的,我知道,但它现在可以工作)。

不幸的是,一些工具和服务器(Jetty)并不知道 MR Jars,这使得它们工作。

出于这个原因,我有我的库的 A-jre8 版本,它没有任何额外的类,因此服务器可以使用它。

但是,如果用户正在使用依赖于我的A 的库B,他仍然会得到A 的MRJar 版本,这将再次失败。我希望能够以某种方式阻止这种情况。我不能对 B 说:嘿,你能做 B-jre8 吗?

可能的解决方案

JAR 只是关于打包!

  • 允许单独的 jar 修补现有的 jar。

在我的例子中,我将只包含 A.jar9 并且 Java 会将 A.jarA.jar9 视为一个包.不需要 META-INF/versions。很干净。而且,最重要的是,它在上述情况下会有所帮助!如果在 Java8 上运行,jar9 jar 将没有任何区别;如果在 Java9 上运行,jar9 jar 将使用相同的名称修补 jar。就那么简单。没有传递依赖 hell 。

  • 重命名 META-INF/versions 中的类。

常见的Oracle,你听说过类路径扫描吗?您能否至少将 versions 中的类重命名为例如*.class9 这样就不会被现有的类路径扫描器捕获。

最佳答案

就像今天一样 (Java v9.0.4) - 没有

关于jar - MR-Jars 可以覆盖其他 jar 中的类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48590523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com