简体   繁体   English

发生了什么以及如何修复:无效的模块名称:“tomcat-embed-jasper-el”不是 Java 标识符

[英]What's going on and how to fix: Invalid module name: 'tomcat-embed-jasper-el' is not a Java identifier

I'm sort of reviving a project that was left in a broken state when I try to run the tests from IntelliJ, I get this error:当我尝试从 IntelliJ 运行测试时,我正在恢复一个留在损坏的 state 中的项目,我收到此错误:

Information:java: Caused by: java.lang.module.FindException: Automatic-Module-Name: org.apache.tomcat-embed-jasper-el: Invalid module name: 'tomcat-embed-jasper-el' is not a Java identifier

When I try to run the tests from the command line, with mvn test I get a different error: What does this error mean Unsupported class file major version 56 and how do I fix it?当我尝试从命令行运行测试时,使用mvn test我得到一个不同的错误: 这个错误是什么意思 Unsupported class file major version 56,我该如何修复它?

The error is clearly about Java Modules, but I'm still finding them a little bit puzzling.该错误显然与 Java 模块有关,但我仍然觉得它们有点令人费解。 The project doesn't mention "tomcat" nor "jasper" anywhere.该项目在任何地方都没有提到“tomcat”或“jasper”。

The full backtrace is:完整的回溯是:

Information:java: An exception has occurred in the compiler (12.0.2). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com) for duplicates. Include your program and the following diagnostic in your report. Thank you.
Information:java: java.lang.module.FindException: Unable to derive module descriptor for C:\Users\pupeno\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.24\tomcat-embed-el-9.0.24.jar
Information:java:   at java.base/jdk.internal.module.ModulePath.readJar(ModulePath.java:646)
Information:java:   at java.base/jdk.internal.module.ModulePath.readModule(ModulePath.java:329)
Information:java:   at java.base/jdk.internal.module.ModulePath.scan(ModulePath.java:235)
Information:java:   at java.base/jdk.internal.module.ModulePath.scanNextEntry(ModulePath.java:188)
Information:java:   at java.base/jdk.internal.module.ModulePath.findAll(ModulePath.java:164)
Information:java:   at java.base/java.lang.module.Resolver.findAll(Resolver.java:842)
Information:java:   at java.base/java.lang.module.Resolver.bind(Resolver.java:223)
Information:java:   at java.base/java.lang.module.Configuration.resolveAndBind(Configuration.java:493)
Information:java:   at java.base/java.lang.module.Configuration.resolveAndBind(Configuration.java:299)
Information:java:   at jdk.compiler/com.sun.tools.javac.file.JavacFileManager.getServiceLoader(JavacFileManager.java:985)
Information:java:   at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Information:java:   at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
Information:java:   at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
Information:java:   at java.base/java.lang.reflect.Method.invoke(Method.java:567)
Information:java:   at org.jetbrains.jps.javac.JavacMain$2.invoke(JavacMain.java:290)
Information:java:   at com.sun.proxy.$Proxy23.getServiceLoader(Unknown Source)
Information:java:   at com.sun.proxy.$Proxy24.getServiceLoader(Unknown Source)
Information:java:   at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.initProcessorLoader(JavacProcessingEnvironment.java:266)
Information:java:   at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.<init>(JavacProcessingEnvironment.java:237)
Information:java:   at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.instance(JavacProcessingEnvironment.java:193)
Information:java:   at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.initProcessAnnotations(JavaCompiler.java:1136)
Information:java:   at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:922)
Information:java:   at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:104)
Information:java:   at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:147)
Information:java:   at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100)
Information:java:   at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:94)
Information:java:   at org.jetbrains.jps.javac.JavacMain.compile(JavacMain.java:195)
Information:java:   at org.jetbrains.jps.incremental.java.JavaBuilder.compileJava(JavaBuilder.java:460)
Information:java:   at org.jetbrains.jps.incremental.java.JavaBuilder.compile(JavaBuilder.java:330)
Information:java:   at org.jetbrains.jps.incremental.java.JavaBuilder.doBuild(JavaBuilder.java:255)
Information:java:   at org.jetbrains.jps.incremental.java.JavaBuilder.build(JavaBuilder.java:213)
Information:java:   at org.jetbrains.jps.incremental.IncProjectBuilder.runModuleLevelBuilders(IncProjectBuilder.java:1324)
Information:java:   at org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:1004)
Information:java:   at org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:1071)
Information:java:   at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:965)
Information:java:   at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:794)
Information:java:   at org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:376)
Information:java:   at org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:178)
Information:java:   at org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:139)
Information:java:   at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:288)
Information:java:   at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:121)
Information:java:   at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:228)
Information:java:   at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
Information:java:   at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
Information:java:   at java.base/java.lang.Thread.run(Thread.java:835)
Information:java: Caused by: java.lang.module.FindException: Automatic-Module-Name: org.apache.tomcat-embed-jasper-el: Invalid module name: 'tomcat-embed-jasper-el' is not a Java identifier
Information:java:   at java.base/jdk.internal.module.ModulePath.deriveModuleDescriptor(ModulePath.java:503)
Information:java:   at java.base/jdk.internal.module.ModulePath.readJar(ModulePath.java:642)
Information:java:   ... 49 more
Information:java: Errors occurred while compiling module 'projectxserver'
Information:javac 12.0.2 was used to compile java sources
Information:2019-09-24 18:12 - Build completed with 1 error and 0 warnings in 3 s 434 ms
Error:java: Compilation failed: internal java compiler error

Quickest of all the solution could be to upgrade to 9.0.26 of your dependency.所有解决方案中最快的可能是升级到您的依赖项的9.0.26

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-el</artifactId>
    <version>9.0.26</version>
</dependency>

which shall then result in the derived automatic module name as:这将导致派生的自动模块名称为:

org.apache.tomcat.embed.jasper.el@9.0.26 automatic

Additional Details额外细节

The issue in deriving the module name for the jar tomcat-embed-el-9.0.24.jar is that is includes the Automatic-Module-Name entry in its MANIFEST.MF which reads:为 jar tomcat-embed-el-9.0.24.jar派生模块名称的问题在于其MANIFEST.MF中包含Automatic-Module-Name条目:

Automatic-Module-Name: org.apache.tomcat-embed-jasper-el

The naming convention doesn't bind by the java standards.命名约定不受 java 标准的约束。 On the other hand, the same value under the upgraded version reads:另一方面,升级版本下的相同值读取:

Automatic-Module-Name: org.apache.tomcat.embed.jasper.el 

for which the automatic module name can be derived successfully.可以成功导出自动模块名称。

This could be verified as well using the command line jar tool:这也可以使用命令行jar工具进行验证:

jar --file=<pathToJAR>\tomcat-embed-el-9.0.24.jar --describe-module

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

相关问题 springboot内嵌tomcat和tomcat-embed-jasper - springboot embedded tomcat and tomcat-embed-jasper java.lang.IllegalArgumentException: plexus.container.default: 无效的模块名称:&#39;default&#39; 不是 Java 标识符 - java.lang.IllegalArgumentException: plexus.container.default: Invalid module name: 'default' is not a Java identifier Spring Boot Devtools无法与Tomcat Embed Jasper一起使用 - Spring Boot Devtools is not working with Tomcat Embed Jasper 在pom.xml中添加tomcat-embed-jasper工件后,Java应用程序引发错误 - Java application throwing error after adding tomcat-embed-jasper artifact in pom.xml 在 tomcat-embed-jasper 中禁用 JSP 池 - Disable JSP pooling in tomcat-embed-jasper Spring boot app's.jar 不工作(tomcat-embed-jasper 问题) - Spring boot app's .jar not working (issue with tomcat-embed-jasper) 如何修复 java 的本机查询中的无效列名 - how can i fix invalid column name in native query in java 如何在我的JAVA Tomcat Web应用程序中阻止El-Tags - How to block El-Tags in my JAVA tomcat web application 引导层初始化期间发生错误。 plexus.container.default:无效的模块名称:'default' 不是 Java 标识符 - Error occurred during initialization of boot layer. plexus.container.default: Invalid module name: 'default' is not a Java identifier 什么是“ Java标识符中的可忽略字符” - What's an “ignorable character in a Java identifier”
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM