way*_*yne 5 java maven java-17
今天我兴奋地下载了 Java 17 并得到了一个简单的记录类
\npublic record TestCls(Party producer, Party client, Party server) {}\nRun Code Online (Sandbox Code Playgroud)\n但是,在执行时mvn compile,它会抛出错误\nFatal error compiling: javax.lang.model.element.UnknownElementException: Unknown element: "com.xxx.TestCls"
我仔细检查了一下java -version,它看起来对我来说是正确的:
openjdk version "17" 2021-09-14\nOpenJDK Runtime Environment (build 17+35-2724)\nOpenJDK 64-Bit Server VM (build 17+35-2724, mixed mode, sharing)\nRun Code Online (Sandbox Code Playgroud)\n有人知道吗?提前致谢!
\n补充:\n我的maven版本是3.5.4.
pom 文件中的 maven 设置:
openjdk version "17" 2021-09-14\nOpenJDK Runtime Environment (build 17+35-2724)\nOpenJDK 64-Bit Server VM (build 17+35-2724, mixed mode, sharing)\nRun Code Online (Sandbox Code Playgroud)\n我2021.1.2在 M1 芯片上使用 Intellij。但我尝试在终端中进行 mvn 编译,它给了我同样的错误。
\nParty该类是在同一项目中定义的。
整个pom文件:
\n <properties>\n <maven.compiler.source>17</maven.compiler.source>\n <maven.compiler.target>17</maven.compiler.target>\n <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n </properties>\nRun Code Online (Sandbox Code Playgroud)\n和堆栈跟踪mvn compile -e:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project reporting-event-spring-boot-starter: Fatal error compiling: javax.lang.model.element.UnknownElementException: Unknown element: "com.xxx.TestCls" -> [Help 1]\norg.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project reporting-event-spring-boot-starter: Fatal error compiling\n at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:213)\n at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)\n at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)\n at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)\n at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)\n at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)\n at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)\n at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)\n at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)\n at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)\n at org.apache.maven.cli.MavenCli.execute (MavenCli.java:954)\n at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)\n at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)\n at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)\n at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)\n at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke (Method.java:568)\n at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)\n at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)\n at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)\n at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)\nCaused by: org.apache.maven.plugin.MojoExecutionException: Fatal error compiling\n at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute (AbstractCompilerMojo.java:796)\n at org.apache.maven.plugin.compiler.CompilerMojo.execute (CompilerMojo.java:129)\n at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)\n at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:208)\n at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)\n at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)\n at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)\n at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)\n at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)\n at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)\n at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)\n at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)\n at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)\n at org.apache.maven.cli.MavenCli.execute (MavenCli.java:954)\n at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)\n at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)\n at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)\n at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)\n at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke (Method.java:568)\n at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)\n at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)\n at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)\n at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)\nCaused by: org.codehaus.plexus.compiler.CompilerException: javax.lang.model.element.UnknownElementException: Unknown element: "com.xxx.TestCls"\n at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess (JavaxToolsCompiler.java:191)\n at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile (JavacCompiler.java:169)\n at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute (AbstractCompilerMojo.java:785)\n at org.apache.maven.plugin.compiler.CompilerMojo.execute (CompilerMojo.java:129)\n at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)\n at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:208)\n at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)\n at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)\n at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)\n at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)\n at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)\n at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)\n at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)\n at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)\n at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)\n at org.apache.maven.cli.MavenCli.execute (MavenCli.java:954)\n at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)\n at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)\n at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)\n at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)\n at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke (Method.java:568)\n at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)\n at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)\n at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)\n at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)\nCaused by: java.lang.RuntimeException: javax.lang.model.element.UnknownElementException: Unknown element: "com.xxx.TestCls"\n at com.sun.tools.javac.api.JavacTaskImpl.invocationHelper (JavacTaskImpl.java:168)\n at com.sun.tools.javac.api.JavacTaskImpl.doCall (JavacTaskImpl.java:100)\n at com.sun.tools.javac.api.JavacTaskImpl.call (JavacTaskImpl.java:94)\n at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess (JavaxToolsCompiler.java:126)\n at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile (JavacCompiler.java:169)\n at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute (AbstractCompilerMojo.java:785)\n at org.apache.maven.plugin.compiler.CompilerMojo.execute (CompilerMojo.java:129)\n at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)\n at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:208)\n at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)\n at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)\n at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)\n at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)\n at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)\n at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)\n at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)\n at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)\n at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)\n at org.apache.maven.cli.MavenCli.execute (MavenCli.java:954)\n at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)\n at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)\n at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)\n at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)\n at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke (Method.java:568)\n at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)\n at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)\n at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)\n at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)\nCaused by: javax.lang.model.element.UnknownElementException: Unknown element: "com.xxx.TestCls"\n at javax.lang.model.util.AbstractElementVisitor6.visitUnknown (AbstractElementVisitor6.java:129)\n at javax.lang.model.util.ElementKindVisitor6.visitTypeAsRecord (ElementKindVisitor6.java:231)\n at javax.lang.model.util.ElementKindVisitor6.visitType (ElementKindVisitor6.java:160)\n at com.sun.tools.javac.code.Symbol$ClassSymbol.accept (Symbol.java:1561)\n at org.hibernate.validator.ap.ConstraintValidationProcessor.process (ConstraintValidationProcessor.java:119)\n at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor (JavacProcessingEnvironment.java:1023)\n at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs (JavacProcessingEnvironment.java:939)\n at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run (JavacProcessingEnvironment.java:1267)\n at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing (JavacProcessingEnvironment.java:1382)\n at com.sun.tools.javac.main.JavaCompiler.processAnnotations (JavaCompiler.java:1234)\n at com.sun.tools.javac.main.JavaCompiler.compile (JavaCompiler.java:916)\n at com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0 (JavacTaskImpl.java:104)\n at com.sun.tools.javac.api.JavacTaskImpl.invocationHelper (JavacTaskImpl.java:152)\n at com.sun.tools.javac.api.JavacTaskImpl.doCall (JavacTaskImpl.java:100)\n at com.sun.tools.javac.api.JavacTaskImpl.call (JavacTaskImpl.java:94)\n at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess (JavaxToolsCompiler.java:126)\n at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile (JavacCompiler.java:169)\n at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute (AbstractCompilerMojo.java:785)\n at org.apache.maven.plugin.compiler.CompilerMojo.execute (CompilerMojo.java:129)\n at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)\n at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:208)\n at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)\n at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)\n at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)\n at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)\n at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)\n at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)\n at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)\n at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)\n at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)\n at org.apache.maven.cli.MavenCli.execute (MavenCli.java:954)\n at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)\n at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)\n at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)\n at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)\n at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)\n at java.lang.reflect.Method.invoke (Method.java:568)\n at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)\n at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)\n at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)\n at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)\n[ERROR]\n[ERROR] Re-run Maven using the -X switch to enable full debug logging.\n[ERROR]\n[ERROR] For more information about the errors and possible solutions, please read the following articles:\n[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException\nRun Code Online (Sandbox Code Playgroud)\n在此处发布 ChatGPT\xe2\x80\x99s 答案:\n看起来您正在使用旧版本的 Maven (3.5.4),该版本不支持 Java 17 中引入的新功能,例如记录。为了将 Java 17 功能与 Maven 结合使用,您需要使用包含对 Java 17 支持的更新版本的 Maven。
\n您可以在 Maven 文档 [1] 中检查 Maven 版本与 Java 版本的兼容性。根据文档,Maven 3.6.3及更高版本支持Java 17。
\n因此,要将 Java 17 功能与 Maven 结合使用,您需要升级到更新版本的 Maven,例如版本 3.6.3 或更高版本。一旦升级到 Maven 的兼容版本,您应该能够编译和使用您的记录类,而不会遇到未知元素错误。
\n[1] https://maven.apache.org/docs/history.html#Java_Versions
\n显然,按照评论中的建议升级 Maven 和 maven-compiler-plugin 的版本会更安全。然而,编译器错误堆栈跟踪中有趣的部分是:
Caused by: javax.lang.model.element.UnknownElementException: Unknown element: "com.xxx.TestCls"
at javax.lang.model.util.AbstractElementVisitor6.visitUnknown (AbstractElementVisitor6.java:129)
at javax.lang.model.util.ElementKindVisitor6.visitTypeAsRecord (ElementKindVisitor6.java:231)
at javax.lang.model.util.ElementKindVisitor6.visitType (ElementKindVisitor6.java:160)
at com.sun.tools.javac.code.Symbol$ClassSymbol.accept (Symbol.java:1561)
at org.hibernate.validator.ap.ConstraintValidationProcessor.process (ConstraintValidationProcessor.java:119)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor (JavacProcessingEnvironment.java:1023)
Run Code Online (Sandbox Code Playgroud)
在我看来,org.hibernate.validator.ap.ConstraintValidationProcessor正在调用一个访问者,该访问者的类型ConstraintAnnotationVisitor本身是扩展的AbstractElementVisitor,而扩展又是扩展的ElementKindVisitor8。后者来自 JDK,似乎针对 Java 8 源,而记录似乎受AbstractElementVisitor14.
这让我怀疑这可能是休眠验证器ConstraintAnnotationVisitor不支持记录的问题?也许他们的 GitHub 存储库上的一个问题有更完整的复制会有所帮助。
| 归档时间: |
|
| 查看次数: |
2655 次 |
| 最近记录: |