问题标签 [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 回答
1107 浏览

java - 为涉及依赖项的项目构建多版本 jar

我正在尝试为涉及外部依赖项的 Maven 项目构建多版本 jar。我之所以强调“外部依赖”是因为我按照这里的说明成功构建了多版本 jar:http: //in.relation.to/2017/02/13/building-multi-release-jars-with -maven/用于在 pom.xml 中没有外部依赖项的项目。当我将此项目更改为在 pom 中具有依赖项时,我收到错误消息:包不存在。报告的包存在于包含的依赖项中。这是项目结构:

项目结构

Pom.xml:

src/main/java9/org/hibernate/demos/mrjar/ProcessIdProvider.java:

错误:

请注意,此错误仅出现在文件夹 src/main/java9 中的类,并且 src/main/java 中的文件编译成功。我似乎没有找到任何具有构建多版本 jar 的依赖项的示例 maven 项目。

0 投票
1 回答
609 浏览

java - java9 '-release 8' 带有内部包(例如 sun.misc.Unsafe)

我正在尝试使用 Maven (3.8.0)创建一个多版本 jar 。我们调用sun.misc.Unsafewhich 在 java8 和 java11 中编译得很好。但是,使用编译java11 --release 8会引发Compilation failure: package sun.misc does not exist.


以下是如何重现错误:

一个简单的类调用Unsafe

一个简单的pom:

如果我们注释该<release>8</release>行,它在 java8 和 java11 上运行良好。

如果我们按原样编译代码,java8 会失败;这是正常的,因为它是java9 功能。问题是java11也失败了。


我认为问题是sun.misc包已在 java8 和 java9 之间移动。但是,该release标志的目的仍然是使用 java8 编译良好的代码也应该使用 java11 编译良好。

我是否误解了如何使用release标志?我需要sun.misc手动链接包以使其工作吗?

0 投票
1 回答
1454 浏览

java - 如果目标级别为 8,我可以使用 module-info.java 吗?

我知道 jdk9+ 可以识别 module-info.java

但是我想知道 module-info.java 是否仍然可以与目标级别 8 结合使用。

例如,我希望我的库用于 java9+ 项目,它会将其识别为导出特定包的模块,但也可以在 java8 项目中作为普通 jar 文件使用。

0 投票
3 回答
2574 浏览

java - 在 Oracle WebLogic Server 上部署多个版本 .jar

我们正在尝试将 Web 服务(.war 文件)部署到 Oracle WebLogic 12.2.1.0.0 服务器上。

.war 包含一些第三方 .jar,例如log4j-api-2.12.0.jar,它们是多个发布 .jar(根据 JEP 238,Multi-Release: true在 MANIFEST.MF 中)。

因此,它在META-INF/versions/9目录中包含一些 Java 9 编译的类。WebLogic 12.2 仅使用 Java 8(通过 WebLogic 管理控制台确认版本为 Java 1.8.0_92)。

据我了解,Java 8 服务器应该看不到/忽略META-INF/versions目录下的任何类,但这似乎没有发生。似乎 Oracle WLS 只是在扫描整个 .war。

结果,当我们尝试部署 .war 时,我们会收到如下错误:

BEA-160248 无法解析类文件:...(然后是长路径名进入META-INF/versions/9目录)

我们需要做一些特别的事情来完成这项工作吗?我会接受以下任何内容:

  • 以某种方式配置 WLS 以忽略META-INF/versions/9
  • 配置 Maven 以某种方式构建 .war,而无需META-INF/versions/9第三方 .jar 中存在的类。

我对每次构建时手动从 .war 中删除任何内容的答案不感兴趣。此外,我不确定此时我是否可以降级到早期版本的第 3 方 .jars。Log4j2,可能可以......但还有其他人。

谢谢!

0 投票
1 回答
230 浏览

java - 无需多组源代码的多版本jar文件

我想为一个库创建一个多版本 JAR 文件。我将使用 maven 构建 MRJAR - 最初它将包含 Java 8 和 Java 9 类文件。

但是 - 我不想维护两组单独的源代码(例如 insrc/main/java-8src/main/java-9)。是否可以在 eg 中包含所有 Java-9 文件,src/main/java并且只有在 eg中不同src/main/java-8的文件?

理想情况下,完整的源代码将被组织为:

0 投票
0 回答
370 浏览

java - 如何设置 Eclipse 项目以创建多版本 jar 文件?

如果我想构建一个多版本 jar 文件(MRJAR),那么我需要两个使用不同 Java 版本编译的源文件夹。如何在 Eclipse 中进行设置?

我可以为此类构建配置 Gradle 构建脚本,但 Eclipse 的最佳实践是什么?

我期望/希望如果我使用不同的 Java 版本运行项目,我可以为正在运行的 Java 版本调试正确的版本。

0 投票
1 回答
179 浏览

java - 使用 Maven 配置文件创建多版本 jar

我正在尝试使用 maven 创建一个多版本 jar,它是编译器插件。我想通过使用配置文件来控制目标 JDK。我创建了两个配置文件,一个用于 jdk8,另一个用于 jdk11,以及一个带有常用选项的构建插件定义。

我遇到的问题是运行时mvn package -P \!target-jdk8,target-jdk11我得到一个error: modules are not supported in -source 6 (use -source 9 or higher to enable modules). 我们是如何得到 -source 6 的?在这种情况下,我不是为 JDK 11 构建的吗?显然,我的 maven-compiler-plugin 配置覆盖没有从配置文件中应用,但我不明白为什么。

0 投票
0 回答
56 浏览

java - UnsupportedClassVersionError 在执行使用 Multi Release Jar 和 Maven 创建的支持 JDK8 和 JDK11 的 Jar 文件时发生

我们使用“Multi Release Jar Files with Maven”技术创建了一个支持JDK8和JDK11两个版本的Jar File并执行,但出现如下错误。

这个错误似乎是每个JDK版本要使用的[our using module name]模块的版本存在引起的。目前,我已经在 Pom.xml 文件中指定了 Multi Release Jar 文件要使用的 JDK 版本,我尝试编写要使用的模块的版本属性,但是在 Pom.xml 文件中出现错误。我们可以在 Pom.xml 文件中为每个 JDK 版本指定我们将使用的模块版本吗?或者,还有更好的方法?

0 投票
2 回答
683 浏览

java - AWS Lambda 使用来自 Multi-Release JAR 的错误类文件?

我在 Java8 下运行了几年的 lambda,我刚刚将它更新到 Java 11。它立即坏了,给了我如下错误:

有问题的类并不是特别令人兴奋,并且有一个简单的静态初始化,这在我的类中很常见:

当我将我的(非 Lambda)java 服务器从 8 切换到 11 时,我以前见过这样的问题;我需要将我的 jar 清单标记为Multi-Release: true,因为我依赖的 ApacheLog4j 工件为org.apache.logging.log4j.util.StackLocatorJava 8- 和 9+ 中的类提供了替代实现。但是,我有点希望 JVM 能够选择适当版本的类。我必须在某处设置一些配置吗?是否有可能将我的 Lambda 从 Java 8 -> Java 11 切换某个地方?

jar/META-INF/versions:

编辑:我发现一些参考资料表明,当 AWS Lambda 提取 JAR 时,它们不会提取 META-INF 目录,该目录包含 MANIFEST.MF 文件,该文件告诉 JVM JAR 是 Muli-Release JAR。Lambda 是否支持 Multi-Release JAR?

0 投票
0 回答
190 浏览

java - jar 不是多版本 jar 文件,但设置了 --multi-release 选项

在根目录中运行mvn package时,我收到以下错误-

这是我的 pom.xml -