首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mvn :由: META-INF/versions/9/javax/xml/bind/ModuleUtil.class :错误扫描条目java.lang.RuntimeException导致的运行失败

mvn :由: META-INF/versions/9/javax/xml/bind/ModuleUtil.class :错误扫描条目java.lang.RuntimeException导致的运行失败
EN

Stack Overflow用户
提问于 2020-09-16 03:59:23
回答 1查看 2.5K关注 0票数 2

我试图在我的项目上执行一个mvn jetty:run,但是,这个过程一直失败,我无法让项目在本地运行。从错误堆栈跟踪来看,我认为需要关注的相关问题是Caused by: java.lang.RuntimeException: Error scanning entry META-INF/versions/9/javax/xml/bind/ModuleUtil.class from jar file:///C:/Users/Tabish/.m2/repository/javax/xml/bind/jaxb-api/2.3.0/jaxb-api-2.3.0.jar。我试过改变jaxb的版本,但没有结果。

这是错误跟踪

代码语言:javascript
运行
复制
[WARNING] Failed startup of context o.e.j.m.p.JettyWebAppContext@4998e74b{/myntra-v4-proxy,[file:///C:/Users/Tabish/Documents/Increff/Code/proxies/myntra-v4-proxy/target/webapp-tmp/, jar:file:///C:/Users/Tabish/.m2/repository/io/springfox/springfox-swagger-ui/2.4.0/springfox-swagger-ui-2.4.0.jar!/META-INF/resources],STARTING}{file:///C:/Users/Tabish/Documents/Increff/Code/proxies/myntra-v4-proxy/target/webapp-tmp/}
org.eclipse.jetty.util.MultiException: Multiple exceptions
    at org.eclipse.jetty.annotations.AnnotationConfiguration.scanForAnnotations (AnnotationConfiguration.java:536)
    at org.eclipse.jetty.annotations.AnnotationConfiguration.configure (AnnotationConfiguration.java:447)
    at org.eclipse.jetty.webapp.WebAppContext.configure (WebAppContext.java:491)
    at org.eclipse.jetty.webapp.WebAppContext.startContext (WebAppContext.java:1336)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart (ContextHandler.java:772)
    at org.eclipse.jetty.servlet.ServletContextHandler.doStart (ServletContextHandler.java:263)
    at org.eclipse.jetty.webapp.WebAppContext.doStart (WebAppContext.java:517)
    at org.eclipse.jetty.maven.plugin.JettyWebAppContext.doStart (JettyWebAppContext.java:398)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:68)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start (ContainerLifeCycle.java:132)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart (ContainerLifeCycle.java:114)
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart (AbstractHandler.java:61)
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart (ContextHandlerCollection.java:161)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:68)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start (ContainerLifeCycle.java:132)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart (ContainerLifeCycle.java:114)
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart (AbstractHandler.java:61)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:68)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start (ContainerLifeCycle.java:132)
    at org.eclipse.jetty.server.Server.start (Server.java:405)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart (ContainerLifeCycle.java:106)
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart (AbstractHandler.java:61)
    at org.eclipse.jetty.server.Server.doStart (Server.java:372)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start (AbstractLifeCycle.java:68)
    at org.eclipse.jetty.maven.plugin.AbstractJettyMojo.startJetty (AbstractJettyMojo.java:460)
    at org.eclipse.jetty.maven.plugin.AbstractJettyMojo.execute (AbstractJettyMojo.java:328)
    at org.eclipse.jetty.maven.plugin.JettyRunMojo.execute (JettyRunMojo.java:170)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:566)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
    at org.codehaus.classworlds.Launcher.main (Launcher.java:47)
Caused by: org.eclipse.jetty.util.MultiException: Multiple exceptions
    at org.eclipse.jetty.annotations.AnnotationParser.parseJar (AnnotationParser.java:923)
    at org.eclipse.jetty.annotations.AnnotationParser.parse (AnnotationParser.java:851)
    at org.eclipse.jetty.annotations.AnnotationConfiguration$ParserTask.call (AnnotationConfiguration.java:163)
    at org.eclipse.jetty.annotations.AnnotationConfiguration$1.run (AnnotationConfiguration.java:548)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob (QueuedThreadPool.java:654)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run (QueuedThreadPool.java:572)
    at java.lang.Thread.run (Thread.java:834)
Caused by: java.lang.RuntimeException: Error scanning entry META-INF/versions/9/javax/xml/bind/ModuleUtil.class from jar file:///C:/Users/Tabish/.m2/repository/javax/xml/bind/jaxb-api/2.3.0/jaxb-api-2.3.0.jar
    at org.eclipse.jetty.annotations.AnnotationParser.parseJar (AnnotationParser.java:937)
    at org.eclipse.jetty.annotations.AnnotationParser.parse (AnnotationParser.java:851)
    at org.eclipse.jetty.annotations.AnnotationConfiguration$ParserTask.call (AnnotationConfiguration.java:163)
    at org.eclipse.jetty.annotations.AnnotationConfiguration$1.run (AnnotationConfiguration.java:548)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob (QueuedThreadPool.java:654)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run (QueuedThreadPool.java:572)
    at java.lang.Thread.run (Thread.java:834)
Caused by: java.lang.IllegalArgumentException
    at org.objectweb.asm.ClassReader.<init> (Unknown Source)
    at org.objectweb.asm.ClassReader.<init> (Unknown Source)
    at org.objectweb.asm.ClassReader.<init> (Unknown Source)
    at org.eclipse.jetty.annotations.AnnotationParser.scanClass (AnnotationParser.java:1003)
    at org.eclipse.jetty.annotations.AnnotationParser.parseJarEntry (AnnotationParser.java:984)
    at org.eclipse.jetty.annotations.AnnotationParser.parseJar (AnnotationParser.java:933)
    at org.eclipse.jetty.annotations.AnnotationParser.parse (AnnotationParser.java:851)
    at org.eclipse.jetty.annotations.AnnotationConfiguration$ParserTask.call (AnnotationConfiguration.java:163)
    at org.eclipse.jetty.annotations.AnnotationConfiguration$1.run (AnnotationConfiguration.java:548)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob (QueuedThreadPool.java:654)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run (QueuedThreadPool.java:572)
    at java.lang.Thread.run (Thread.java:834)
[INFO] Started ServerConnector@721bf7ad{HTTP/1.1,[http/1.1]}{0.0.0.0:9000}
[INFO] Started @31575ms
[INFO] Started Jetty Server

我正在使用jdk-11.0.2运行。我的pom.xml有以下的依赖项和jetty插件(我认为是其中之一导致了问题)

代码语言:javascript
运行
复制
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.1</version>
        </dependency>

        <dependency>
            <groupId>org.glassfish</groupId>
            <artifactId>javax.el</artifactId>
            <version>3.0.0</version>
        </dependency>

        <!-- Lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.mockito/mockito-all -->
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-all</artifactId>
            <version>${mockito.version}</version>
        </dependency>
...
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.3.7.v20160115</version>
            </plugin>
...

如何解决这个问题,使我的项目能够在本地机器上运行?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-16 15:15:31

  1. 通过引用jaxb/2.3.0的pom,目标jdk版本为9。
  2. 通过找到jetty-注释/9.3.7.v20160115的依赖项,“org.ow2.asm”的依赖项是5.0.1,因为JDK 9将于2017年9月发布,因此可以确定asm库不支持java 9,我们也可以参考ClassReader的源代码
代码语言:javascript
运行
复制
public class ClassReader {
...
    /**
     * Constructs a new {@link ClassReader} object.
     * 
     * @param b
     *            the bytecode of the class to be read.
     * @param off
     *            the start offset of the class data.
     * @param len
     *            the length of the class data.
     */
    public ClassReader(final byte[] b, final int off, final int len) {
        this.b = b;
        // checks the class version
        if (readShort(off + 6) > Opcodes.V1_8) {
            throw new IllegalArgumentException();
        }
...
}

我们看到,如果类版本晚于1.8,则检查该类版本。下面的程序显示了如何检查jar是否包含ClassReader不支持的类。

代码语言:javascript
运行
复制
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.jar.JarFile;

import org.objectweb.asm.ClassReader;

public class ClassReaderJarVersionCheck {
    public static void main(String[] args) throws FileNotFoundException, IOException {
        checkClassVersion();
    }

    private static void checkClassVersion() {

        String jarPath = "{path_to_jar}\\jaxb-api-2.3.0.jar";
        try (JarFile jarFile = new JarFile(jarPath)) {
            jarFile.stream().forEach(jarEntry -> {
                if (jarEntry.isDirectory() || !jarEntry.getName().endsWith(".class")) {
                    return;
                }
                int version = -1;
                try {
                    byte[] byteArray = toByteArray(jarFile.getInputStream(jarEntry));
                    version = readShort(byteArray, 6);
                    new ClassReader(byteArray);
                } catch (IOException e) {
                    throw new RuntimeException(e);
                } catch (IllegalArgumentException e) {
                    System.out.println(jarEntry.getName() + " version: " + version);
                }
            });
        } catch (IOException ioe) {
            throw new RuntimeException(ioe);
        }
    }

    private static short readShort(byte[] b, int index) {
        return (short) (((b[index] & 0xFF) << 8) | (b[index + 1] & 0xFF));
    }

    private static byte[] toByteArray(InputStream is) throws IOException {
        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
        int nRead;
        byte[] data = new byte[1024];
        while ((nRead = is.read(data, 0, data.length)) != -1) {
            buffer.write(data, 0, nRead);
        }
        buffer.flush();
        byte[] byteArray = buffer.toByteArray();
        return byteArray;
    }
}

解决方案

JDK>=11升级Jetty

通过引用码头9.4.12发布公告,将jetty的依赖项更新为版本9.4.12以支持JDK 11应该可以解决这个问题。

降级jaxb-api用于JDK 8

使用2.2.11版本作为下一个版本2.3.0开始采用JDK 9

代码语言:javascript
运行
复制
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.2.11</version>
        </dependency>
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63912913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档