java 运行jar包,报没有发现META-INF/versions/9/module-info.class,但jar包内存在
时间: 2023-12-27 17:03:26 浏览: 140
这个问题可能是因为你在使用Java 8或更低版本的Java运行时。在Java 9中,引入了模块化系统,模块信息文件(module-info.java)将被编译为META-INF/versions/9/module-info.class文件,并包含在JAR文件中。
如果你使用Java 8或更低版本的Java运行时,它会忽略META-INF/versions/9目录以及其中的内容,因此可能会报错说找不到module-info.class文件。
要解决这个问题,你可以使用Java 9或更高版本的Java运行时来运行你的JAR文件,或者在使用Java 8或更低版本的Java运行时时,删除META-INF/versions/9目录及其内容。你可以使用以下命令删除该目录:
```
zip -d yourJar.jar META-INF/versions/9/*
```
请将`yourJar.jar`替换为你的JAR文件名。运行该命令后,再次尝试运行JAR文件,应该就能够正常运行了。
相关问题
org.apache.catalina.startup.ContextConfig.processAnnotationsJar Unable to process Jar entry [META-INF/versions/9/module-info.class] from Jar [file:/usr/local/java/apache-tomcat-8.5.9/webapps/zcl/WEB-INF/lib/kotlin-stdlib-1.4.10.jar] for annotations
这个错误通常出现在使用 Tomcat 运行 Kotlin web 应用时,是因为 Tomcat 不支持 Java 9 的模块化系统,而 Kotlin 1.4.10 引入了 Java 9 模块化的特性。解决这个问题的方法是将 Kotlin 库的 module-info.class 文件删除,或者使用支持 Java 9 模块化的 Tomcat 版本。如果您使用的是 Tomcat 8.5.x 版本,则需要升级到 Tomcat 9.x 版本。
java 8编译,但还是有META-INF/versions/9/module-info.class
这是因为Java 8编译器不支持模块化,所以当你使用Java 9及更高版本的模块化功能时,编译器会将模块信息文件(module-info.java)转换为META-INF/versions/9/module-info.class文件,并将其打包到JAR文件中。虽然这个文件对于Java 8没有任何意义,但它不会对Java 8的运行造成任何影响,因为Java 8运行时不会查找或使用该文件。
阅读全文