繁体   English   中英

JDK 11.0.2-无法在ECLIPSE中派生模块描述符

[英]JDK 11.0.2 - Unable to derive module descriptor in ECLIPSE

我正在尝试运行其他人制作的项目。 我将项目添加到eclipse中,它会自动生成一个module-info.java,由于模块是基于名称的,因此我会收到警告,所以我假设这可能是我的问题。 我对模块不熟悉,并且很难理解在线上的一些资源。 这是我的运行时错误。

Error occurred during initialization of boot layer
java.lang.module.FindException: Unable to derive module descriptor for C:\Users\under\Desktop\RSPS\Emerald\Server\lib\xpp3.jar
Caused by: java.lang.module.InvalidModuleDescriptorException: Provider class org.xmlpull.mxp1.MXParser,org.xmlpull.mxp1_serializer.MXSerializer not in module

这是我的module-info.java

/**
  * 
  */
/**
 * @author GameBeast
 *
 */
module server {
exports com.elvarg;
exports com.elvarg.net.packet;
exports com.elvarg.world.model.teleportation;
exports com.elvarg.world.model.dialogue;
exports com.elvarg.util;
exports com.elvarg.world.content.skills.Prayer;
exports com.elvarg.world.content.skills.Herblore;
exports fileserver.net;
exports com.elvarg.world.model.container;
exports fileserver.net.codec;
exports fileserver;
exports com.elvarg.world.entity.combat.method.impl.npcs;
exports com.elvarg.world.entity.impl.npc.bots;
exports com.elvarg.world.entity.impl.npc;
exports com.elvarg.world.collision.buffer;
exports com.elvarg.world.content;
exports com.elvarg.world.model.container.impl;
exports com.elvarg.net.login;
exports com.elvarg.net.security;
exports com.elvarg.world.model.equipment;
exports fileserver.cache;
exports com.elvarg.world.model.syntax;
exports com.elvarg.world.entity.combat;
exports com.elvarg.world.entity.impl;
exports com.elvarg.engine;
exports com.elvarg.world.grounditems;
exports com.elvarg.world.entity.combat.method.impl.specials;
exports com.elvarg.world.entity.combat.magic;
exports com.elvarg.net.channel;
exports com.elvarg.net.packet.impl;
exports com.elvarg.net.codec;
exports com.elvarg.definitions;
exports com.elvarg.world.entity.combat.ranged;
exports com.elvarg.world.entity.combat.method;
exports com.elvarg.world.content.clan;
exports com.elvarg.world.entity.impl.player;
exports com.elvarg.engine.task;
exports com.elvarg.world.entity.combat.method.impl;
exports com.elvarg.engine.task.impl;
exports com.elvarg.world.entity.updating;
exports com.elvarg.world.entity.impl.npc.bots.impl;
exports com.elvarg.world.entity;
exports com.elvarg.world.entity.combat.hit;
exports com.elvarg.world.model.syntax.impl;
exports com.elvarg.world.collision.region;
exports com.elvarg.world.entity.impl.object;
exports com.elvarg.world.entity.combat.bountyhunter;
exports com.elvarg.net;
exports com.elvarg.world.entity.combat.formula;
exports com.elvarg.world.model.movement.path;
exports com.elvarg.world.model;
exports com.elvarg.world.model.movement;
exports com.elvarg.world;

requires bzip2;
requires gson;
requires guava;
requires java.logging;
requires java.management;
requires netty.all;
requires xpp3;  
}

我的jar文件(重命名为xpp3,因为stackoverflow上的一个资源说该文件名的语法可能是个问题)包含错误指出不是模块的文件,

org.xmlpull.mxp1.MXParser,org.xmlpull.mxp1_serializer.MXSerializer

所以我的问题是如何使用eclipse将它们添加到模块中?

另外,关于stackoverflow的另一篇文章说,请确保已配置了构建路径,以使我的库位于模块路径而不是类路径中,我也确保这样做。 https://prnt.sc/owu9r3

我已经尝试解决了几个小时,非常感谢您的帮助。

错误显示提供程序类...不在模块中” ,这使我认为这与服务提供者有关 您应该阅读“ Java 9 Module Services ”以了解有关该主题的更多信息。

服务提供者应在模块信息文件中使用provides关键字列出。 这是文章中的示例:

module Provider {
    requires ServiceInterface;
    provides javax0.serviceinterface.ServiceInterface
      with javax0.serviceprovider.Provider;
}

module Consumer {
    requires ServiceInterface;
    uses javax0.serviceinterface.ServiceInterface;
}

module ServiceInterface {
    exports javax0.serviceinterface;
}

xpp3.jar库没有模块信息文件,因此JVM将动态生成一个模块信息文件,因此,错误消息的“无法派生模块描述符”部分,但是它检测到错误。

我对错误的最佳猜测是,jar文件在META-INF/services/文件夹中包含ServiceLoader文件,该文件在错误消息中列出了2个类: org.xmlpull.mxp1.MXParserorg.xmlpull.mxp1_serializer.MXSerializer 但是,错误消息似乎表明,这些类是不实际 jar文件。

检查xpp3.jar的内容,并检查是否存在这两个文件。 还要查看META-INF/services/ ,看看我猜对了。

看来xpp3.jar文件已损坏

JAR文件包含提供者配置文件META-INF/services/org.xmlpull.v1.XmlPullParserFactory ,其内容如下:

org.xmlpull.mxp1.MXParser,org.xmlpull.mxp1_serializer.MXSerializer

这两个提供程序类被指定为逗号分隔的列表,而不是每行一个类 请参阅ServiceLoader的Javadoc (我以黑体突出显示):

该文件包含一个具体的提供程序的标准二进制名称列表,每行一个

另请参见错误消息 :它说提供程序类而不是提供程序类,并且在后面没有空格,因此它仅使用无效名称 org.xmlpull.mxp1.MXParser,org.xmlpull.mxp1_serializer.MXSerializer 命名 单个类

关于模块描述符的误导性错误消息表示, 通过META-INF/services/*文件指定服务的实现(自Java 6起可用)已经与通过module-info.java指定JPMS服务的新实现合并在一起。 文件 (从Java 9开始可用)。 这可能会导致在Java 9及更高版本中发生在Java 8及更低版本中未发生的错误,或者在较早的时间点(在启动应用程序时而不是在使用应用程序时)发生错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM