问题标签 [multi-release-jar]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
50 浏览

maven - 查看多版本 JAR (MRJAR) 的版本源

我正在尝试为一些作为 MRJAR 发布的项目附加 Java 9 或 Java 11 源代码,jersey-container-jetty-http-3.0.2junit-platform-commons-1.4.0.

查看jersey-container-jetty-http-3.0.2-sources.jar我的文件~/.m2/repository没有META-INF/versions目录,.java标准包位置中的文件适用于 Java 8(预模块系统)。如果我解压缩https://repo1.maven.org/maven2/org/glassfish/jersey/containers/jersey-container-jetty-http/3.0.2/jersey-container-jetty-http-3.0,也是这种情况。 2-sources.jar

这对我的调试器来说是个大麻烦:(

我能够从https://github.com/eclipse-ee4j/jersey/releases/tag/3.0.2下载完整的源代码,它包含以下目录和源代码:

containers/jetty-http/src/main/java11

containers/jetty-http/src/main/java8

我以为这可能只是泽西岛的问题,但是看着junit-platform-commons-1.4.0我看到了类似的问题。我的~/.m2/repositoryhttps://repo1.maven.org/maven2/org/junit/platform/junit-platform-commons/1.4.0/junit-platform-commons-1.4.0-sources.jar都不包含任何 java 9 的代码+ 版本,但发布 JAR 包含/META-INF/versions/9/org/junit/platform/commons/util/ModuleUtils.class.

所以我的问题是:是否包含 Maven 支持的多个 Java 版本的源代码?如果是这样,Java 9+ 源文件在哪里?

0 投票
0 回答
46 浏览

java - 在 Android 上使用多版本 JAR 时是否存在限制/问题?

我正在开发一个使用 Bouncy Castle 的库,应该可以在 Android 和 Java 8+ 上运行。

Bouncy Castle JAR 有两种变体。一种bcprov-jdk15to18-169.jar适用于 Java 5-8 的变体(例如bcprov-jdk15on-169.jar)和一种适用于 Java 5-15 的变体(例如 ),但它是一个多版本 JAR。

见:https ://www.bouncycastle.org/latest_releases.html

该文档指出:

从 1.63 开始,我们已经开始包含“jdk15to18”的签名 jar,如果您遇到 JCE 中的签名验证或常规“jdk15on”jar 文件中存在多版本目录的问题,请尝试“jdk15to18”jar反而。

在 Android 上使用多版本 JAR 时是否有任何已知的限制/问题?

(我用 Android 模拟器(API 24 和 API 30)做了一些测试,一切正常。)

0 投票
0 回答
95 浏览

maven - Maven Shade 不包含多版本依赖的“META-INF/versions”

在我们的项目中,我们创建了一个“skinny” jar,它只包含我们自己的应用程序代码,我们使用 maven shade 插件为我们运行应用程序所需的依赖项创建 JAR。Maven shade 用于将多个依赖项打包到同一个 jar 中。例如,所有的 jetty 依赖都打包成一个更大的jetty-full.jar.
现在我们面临一个org.graalvm.js依赖问题。它取决于truffle-api哪个本身是一个多版本 jar,并且包含用于 java 11 下的类META-INF/versions/11。当我们使用 Java 11 时,我们需要这些类,但由于某种原因,它们被 maven shade 插件排除在外。
这是相关的代码pom.xml

生成的META-INFjar 仅包含以下文件夹和文件:

  • 升级
  • 服务
  • 本机图像
  • 行家
  • MANIFEST.MF(文件)

versions文件夹丢失。
我现在使用copy-dependency插件来复制单个文件,并在那里META-INF包含versions/11所需的 Java 11 类的文件夹。
我是否遗漏了什么或者为什么被META-INF/versions排除在阴影罐中?