当我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,也是什么都没有.
如何解决这个问题?