当我try 使用使用jar-in-jar-loader的ANT单个JAR文件进行构建时,其中的所有内容看起来都与预期的一样.货单内容是

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.10.14
Created-By: 21+35-LTS-2513 (Oracle Corporation)
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
Rsrc-Main-Class: a.b.MyApp
Multi-Release: true
Rsrc-Class-Path: ./ lib/log4j/log4j-api-2.22.1.jar lib/log4j/log4j-cor
 e-2.22.1.jar lib/jdatepicker-1.3.4.jar
Class-Path: .

jar-in-jar-loader.zip是由使用jdk21的eclipse 2023-12生成的,所有文件似乎都在myApp.jar中
然而,当我使用java -jar myApp.jar时,我发现

WARNING: Runtime environment or build system does not support multi-release JARs. This will impact location-based features.
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:118)
        at java.base/java.lang.reflect.Method.invoke(Method.java:580)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:62)
Caused by: java.lang.UnsupportedOperationException: No class provided, and an appropriate one cannot be found.
        at org.apache.logging.log4j.LogManager.callerClass(LogManager.java:585)
        at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:610)
        at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:597)
        at a.b.log.Log.getLogger(Log.java:48)
        at a.b.MyApp.handleInputParameters(MyApp.java:97)
        at a.b.MyApp.main(MyApp.java:33)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
        ... 2 more

当我在eclipse下运行该应用程序时,一切都运行正常.
这是否意味着log4j不能与jdk21(我使用Oracle版本)一起使用?
怎么查呢?我在log4j网页上try ,但什么也没有找到(尤其是在Changelog中).我也试图将项目降级到jdk17,也是什么都没有.
如何解决这个问题?

推荐答案

这实际上是由Eclipse jar-in-jar加载程序中的一个错误引起的:cf.eclipse-jdt/eclipse.jdt.ui#1057.

在此期间,您可以:

  • 或者通过设置-Djdk.util.jar.enableMultiRelease=force来强制以多释放模式打开所有JAR文件,
  • 切换到另一台装载机.spring-boot-loader维护得更好,在Maven Central上可用,并且它不会创建临时文件来打开嵌入库.

Edit:3.0.0个测试版是not个多版本JAR,所以它们不应该受到这个问题的影响.如果是,请submit a bug report.

Java相关问答推荐

收听RDX中用户数据的变化

将具有多个未知字段的SON映射到Java POJO

CSS应用于一个端点,但不应用于Thymeleaf中的另一个端点

Intellij显示项目语言级别最高为12,尽管有java版本17 SDK

Kotlin内联互操作:强制装箱

我如何解释这个错误?必需类型:供应商R,提供:收集器对象,捕获?,java.util.List java.lang.Object>>

搜索列表返回多个频道

Java泛型类方法的静态返回类型是否被类型擦除?

当构造函数创建一个新实例时,Java为什么需要&new";

Oj算法 MatrixR032从字符串、归一化和余弦相似度计算创建

如何在盒子的顶部和底部创建两张不同图片(大小相同)的盒子?

为什么我不能建立输入/输出流?Java ServerSocket

处理4.3问题:javax.xml.ind包不存在(&Q;).您可能在学习GitHub教程时遗漏了库.&Q

为什么创建Java动态代理需要接口参数

[Guice/MissingImplementation]:未绑定任何实现

message.acknowledge()没有';在使用Spring Boot在ActiveMQ中读取消息后,t将消息出列

如何在Java中正确实现填字游戏求解器

OpenAPI Maven插件生成错误的Java接口名称

为什么当我输入变量而不是直接输入字符串时,我的方法不起作用?

如何解释泛型类层次 struct 中子类的返回值类型和参数定义?