Java.lang.NoClassDefFoundError:jdk/nashorn/api/scripting/NashornScriptEngineFactory

3
我想在1.16.3中编写Minecraft模组。我已经在1.12.2中制作了一个模组,但是没有遇到这个问题。 我刚刚下载了1.16.3 Forge Mdk并在eclipse中进行了构建(在cmd中使用“gradlew eclipse”)。但是当我尝试运行该模组(使用“runClient.launch”)时,会出现错误:
java.lang.NoClassDefFoundError: jdk/nashorn/api/scripting/NashornScriptEngineFactory.
我尝试修改主文件和包以支持不必要的代码,但当我开始时,它仍然给我同样的错误。
我的主文件:
package fr.luzog78.newmod;

import net.minecraft.block.Blocks;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

@Mod("newmod")
public class NewMod {
    private static final Logger LOGGER = LogManager.getLogger();

    public NewMod() {
        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
        FMLJavaModLoadingContext.get().getModEventBus().addListener(this::doClientStuff);

        MinecraftForge.EVENT_BUS.register(this);
    }

    private void setup(final FMLCommonSetupEvent event) {
        LOGGER.info("HELLO FROM PREINIT");
        LOGGER.info("DIRT BLOCK >> {}", Blocks.DIRT.getRegistryName());
    }

    private void doClientStuff(final FMLClientSetupEvent event) {
    }

//    @SubscribeEvent
//    public void onServerStarting(FMLServerStartingEvent event) {
//        // do something when the server starts
//        LOGGER.info("HELLO from server starting");
//    }
//
//    // You can use EventBusSubscriber to automatically subscribe events on the contained class (this is subscribing to the MOD
//    // Event bus for receiving Registry Events)
//    @Mod.EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD)
//    public static class RegistryEvents {
//        @SubscribeEvent
//        public static void onBlocksRegistry(final RegistryEvent.Register<Block> blockRegistryEvent) {
//            // register a new block here
//            LOGGER.info("HELLO from Register Block");
//        }
//    }
}

同时提供堆栈跟踪信息:

Exception in thread "main" [13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]: java.lang.NoClassDefFoundError: jdk/nashorn/api/scripting/NashornScriptEngineFactory
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at net.minecraftforge.coremod.CoreModEngine.loadCoreMod(CoreModEngine.java:48)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at net.minecraftforge.coremod.CoreModProvider.addCoreMod(CoreModProvider.java:12)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:274)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at net.minecraftforge.fml.loading.LoadingModList.addCoreMods(LoadingModList.java:85)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at net.minecraftforge.fml.loading.moddiscovery.ModDiscoverer.discoverMods(ModDiscoverer.java:129)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at net.minecraftforge.fml.loading.FMLLoader.beginModScan(FMLLoader.java:213)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at net.minecraftforge.fml.loading.FMLServiceProvider.runScan(FMLServiceProvider.java:107)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at cpw.mods.modlauncher.TransformationServiceDecorator.runScan(TransformationServiceDecorator.java:114)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at cpw.mods.modlauncher.TransformationServicesHandler.lambda$runScanningTransformationServices$8(TransformationServicesHandler.java:115)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:271)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at java.base/java.util.HashMap$ValueSpliterator.forEachRemaining(HashMap.java:1766)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at cpw.mods.modlauncher.TransformationServicesHandler.runScanningTransformationServices(TransformationServicesHandler.java:116)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at cpw.mods.modlauncher.TransformationServicesHandler.initializeTransformationServices(TransformationServicesHandler.java:63)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at cpw.mods.modlauncher.Launcher.run(Launcher.java:76)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at cpw.mods.modlauncher.Launcher.main(Launcher.java:66)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1048]:   at net.minecraftforge.userdev.LaunchTesting.main(LaunchTesting.java:105)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1057]: Caused by: java.lang.ClassNotFoundException: jdk.nashorn.api.scripting.NashornScriptEngineFactory
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1057]:   at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:606)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1057]:   at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1057]:   at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
[13:16:47] [main/INFO] [STDERR/]: [java.lang.ThreadGroup:uncaughtException:1057]:   ... 33 more

主要问题是编译器找不到类jdk/nashorn/api/scripting/NashornScriptEngineFactory。在编译代码时(使用javac或像ant这样的构建管理工具),您需要确保该类位于您的类路径内(可通过-cp进行配置)。 - schetefan24
你使用的是哪个Java版本? - Joby Wilson Mathews
@schetefan24,抱歉我不知道怎么做... x) 对不起。 - Luzog78
@JobyWilsonMathews Java版本 "15.0.1" 2020-10-20 Java(TM) SE运行环境(版本15.0.1+9-18) Java HotSpot(TM) 64位服务器虚拟机(版本15.0.1+9-18,混合模式,共享) 但我已经测试过使用Java 8。 - Luzog78
2个回答

6

看起来,您正在使用的Minecraft代码依赖于Nashorn脚本引擎。 Nashorn在Java 15中被从JDK中移除,而您似乎正在运行该版本。

降级到JDK 14或更早版本。


非常感谢!!那个有效了!谢谢。我以为我已经做过了,但是没有哈哈。谢谢! - Luzog78
但是现在我遇到了“java.lang.UnsupportedClassVersionError”错误 x) - Luzog78
不,没问题...我忘记修改路径了,但那只在jdk1.8下有效。 - Luzog78
为什么它被删除了?我已经能看到这个问题和答案在未来几年里会获得成千上万的浏览量... - Akito
@Akito:上面的链接没有解释清楚吗? - Luke Woodward
@LukeWoodward 对于许多用例来说,这已经是足够好的解释了,但在我看来,对于Java来说并不是。1. Java非常流行,有大量需要维护的项目。2. 这不是一些小改变,否则我就不会找到这个页面了。3. 处理这个名为“Java”的巨大膨胀的人可能并不关心是否包含这样的模块。Java几乎是纯粹的膨胀,因此您可能也要支持这些模块的支持。 - Akito

2

解决方案


  • Nashorn已在Java 15中从JDK中删除 (https://openjdk.java.net/jeps/372)
  • 您需要使用Java 1.8启动 (以避免UnsupportedClassVersionError)
  • 因此,您需要:
    1. 进入项目属性 >> Java编译器 >> 编译器 >> 兼容性级别并将其修改为Java SE - 1.8
    2. 修改您的路径(放置jdk1.8)
    3. 如果仍无法正常工作,请转到首选项 >> Java >> 已安装的JREs首选项 >> Java >> 已安装的JREs >> 执行环境

感谢@LukeWoodward !!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接