问题标签 [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.
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 项目。
java - java9 '-release 8' 带有内部包(例如 sun.misc.Unsafe)
我正在尝试使用 Maven (3.8.0)创建一个多版本 jar 。我们调用sun.misc.Unsafe
which 在 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
手动链接包以使其工作吗?
java - 如果目标级别为 8,我可以使用 module-info.java 吗?
我知道 jdk9+ 可以识别 module-info.java
但是我想知道 module-info.java 是否仍然可以与目标级别 8 结合使用。
例如,我希望我的库用于 java9+ 项目,它会将其识别为导出特定包的模块,但也可以在 java8 项目中作为普通 jar 文件使用。
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,可能可以......但还有其他人。
谢谢!
java - 无需多组源代码的多版本jar文件
我想为一个库创建一个多版本 JAR 文件。我将使用 maven 构建 MRJAR - 最初它将包含 Java 8 和 Java 9 类文件。
但是 - 我不想维护两组单独的源代码(例如 insrc/main/java-8
和src/main/java-9
)。是否可以在 eg 中包含所有 Java-9 文件,src/main/java
并且只有在 eg中不同src/main/java-8
的文件?
理想情况下,完整的源代码将被组织为:
java - 如何设置 Eclipse 项目以创建多版本 jar 文件?
如果我想构建一个多版本 jar 文件(MRJAR),那么我需要两个使用不同 Java 版本编译的源文件夹。如何在 Eclipse 中进行设置?
我可以为此类构建配置 Gradle 构建脚本,但 Eclipse 的最佳实践是什么?
我期望/希望如果我使用不同的 Java 版本运行项目,我可以为正在运行的 Java 版本调试正确的版本。
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 配置覆盖没有从配置文件中应用,但我不明白为什么。
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 版本指定我们将使用的模块版本吗?或者,还有更好的方法?
java - AWS Lambda 使用来自 Multi-Release JAR 的错误类文件?
我在 Java8 下运行了几年的 lambda,我刚刚将它更新到 Java 11。它立即坏了,给了我如下错误:
有问题的类并不是特别令人兴奋,并且有一个简单的静态初始化,这在我的类中很常见:
当我将我的(非 Lambda)java 服务器从 8 切换到 11 时,我以前见过这样的问题;我需要将我的 jar 清单标记为Multi-Release: true
,因为我依赖的 ApacheLog4j 工件为org.apache.logging.log4j.util.StackLocator
Java 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?
java - jar 不是多版本 jar 文件,但设置了 --multi-release 选项
在根目录中运行mvn package
时,我收到以下错误-
这是我的 pom.xml -