无法索引类 module-info.class atlog4j-api.jar:java.lang.IllegalStateException:未知标签! pos=4 池数 = 24

Posted

技术标签:

【中文标题】无法索引类 module-info.class atlog4j-api.jar:java.lang.IllegalStateException:未知标签! pos=4 池数 = 24【英文标题】:Could not index class module-info.class atlog4j-api.jar: java.lang.IllegalStateException: Unknown tag! pos=4 poolCount = 24 【发布时间】:2019-02-10 11:39:24 【问题描述】:

我们已将 log4j jar 从 log4j-api-2.7.jar 更新为 log4j-api-2.10.0.jar。我们在 JBoss 启动时收到以下警告(我们使用的是 JBoss-EAP-7.0)。

2018-09-05 05:31:28,669 警告 [org.jboss.as.server.deployment] (MSC 服务线程 1-2) WFLYSRV0003:无法索引类 /content/project.ear/shared/log4j-api.jar 中的模块信息类: java.lang.IllegalStateException:未知标签! pos=4 poolCount = 24 在 org.jboss.jandex.Indexer.processConstantPool(Indexer.java:1416) 在 org.jboss.jandex.Indexer.index(Indexer.java:1450) 在 org.jboss.as.server.deployment.annotation.ResourceRootIndexer.indexResourceRoot(ResourceRootIndexer.java:99) 在 org.jboss.as.server.deployment.annotation.AnnotationIndexProcessor.deploy(AnnotationIndexProcessor.java:51) 在 org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:165) 在 org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:2032) 在 org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1955) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 java.lang.Thread.run(Thread.java:748)

经过我的分析,似乎 module-info.class 是在 log4j-api-2.10.0.jar 中新引入的,现在它无法在启动时索引该类。它使用 JBoss 的 jandex-2.0.2.Final-redhat-1.jar 来自 eap-runtime-artifacts-7.0.5.GA.pom 的依赖信息。

谁能帮我解决这个问题?

提前致谢。

【问题讨论】:

【参考方案1】:

首先,这只是一个警告。

我猜您使用的 Java 版本低于 8。module-info.class 用于所谓的多版本 jar(与所有 Java 版本兼容的 jar)。

Java 直到版本 8 都不能 100% 兼容这种技术。所以我看到的唯一方法是将您的 Java 版本升级到 1.8 或降级 log4j

【讨论】:

我们只使用 JDK 1.8,如果我们将 log4j 版本降级到以前的版本,即 2.7,那么我们会收到 NoSuchMethodFoundException 错误。 我认为这是我的错。在 java9 中引入了多版本 jars 我将 Wildfly 服务器从 wildfly10.1.0 更改为 wildfly-15.0.1,它工作正常。 我在使用 Java 8 + WildFly 14 时也遇到过类似的问题。我刚刚升级了 json.jar,这个问题得到了解决。【参考方案2】:

这是一条警告消息,它发生是因为 jandex 支持 Java9 是简单地忽略依赖档案中的 module-info.class 文件。为避免出现此警告消息,请将 (wildfly_HOME\modules\system\layers\base\org\jboss\jandex\main\jande-version.jar 中的 jandex jar 替换为 jandex-2.0.5.Final-redhat-1 和相应的module.xml 也是。 参考:https://issues.redhat.com/browse/JBEAP-15262 https://issues.redhat.com/browse/JBEAP-15715

【讨论】:

以上是关于无法索引类 module-info.class atlog4j-api.jar:java.lang.IllegalStateException:未知标签! pos=4 池数 = 24的主要内容,如果未能解决你的问题,请参考以下文章

严重:无法在 Tomcat 7 && Java 8 中处理 Jar 条目 [module-info.class]

maven-bundle-plugin 因“无效的类文件 module-info.class”而失败

META-INF/versions/9/module-info.class 冲突问题解决

其中一个--module-version或--hash-dependencies没有module-info.class错误在jdk 9中打包为jar时

JVM-类索引,父类索引和索引集合

mysql无法命中索引的情况