代码之家  ›  专栏  ›  技术社区  ›  user1169587

在maven编译器插件中指定java次要版本

  •  0
  • user1169587  · 技术社区  · 10 月前

    从这里的链接

    https://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-release.html

    它提到

    javac可执行文件可以接受--release选项来指定 您希望根据哪个Java SE版本构建项目。

    但大多数例子只使用整数11、17,如果我们想指定次要版本呢?

    例如,这可行吗?

    <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.13.0</version>
                    <configuration>
                        <release>17.0.12</release>                        
                    </configuration>
                </plugin>
    

    当我发现将17更改为17.0.12后,我的Web应用程序无法启动。 错误是

    Failed to define class pkg1.web.ABCContextListener in Module "deployment.ABCEAR-0.0.1-SNAPSHOT.ear.ABC-0.0.1-SNAPSHOT.war" from Service Module Loader: java.lang.NoClassDefFoundError: Failed to link pkg1/web/ABCContextListener (Module "deployment.ABCEAR-0.0.1-SNAPSHOT.ear.ABC-0.0.1-SNAPSHOT.war" from Service Module Loader): org/springframework/web/context/ContextLoaderListener
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1090)
    at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:351)
    at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:482)
    at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:276)
    at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:79)
    at org.jboss.modules.Module.loadModuleClass(Module.java:765)
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:192)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:410)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:467)
    at [email protected]//org.jboss.as.ee.utils.ClassLoadingUtils.loadClass(ClassLoadingUtils.java:21)
    at [email protected]//org.jboss.as.ee.utils.ClassLoadingUtils.loadClass(ClassLoadingUtils.java:14)
    at [email protected]//org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.processComponentConfig(InterceptorAnnotationProcessor.java:84)
    at [email protected]//org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.deploy(InterceptorAnnotationProcessor.java:77)
    at [email protected]//org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:182)
    at [email protected]//org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1590)
    at [email protected]//org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1553)
    at [email protected]//org.jboss.msc.service.ServiceControllerImpl$ControllerTask.run(ServiceControllerImpl.java:1411)
    at [email protected]//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at [email protected]//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
    at [email protected]//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
    at [email protected]//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
    at java.base/java.lang.Thread.run(Thread.java:842)
    

    我的春季版本是6.1.7,应该兼容17.0.12吗?

    1 回复  |  直到 10 月前
        1
  •  1
  •   talex    10 月前

    它不会像你想的那样。

    它不是JDK版本。这是语言规范版本。您可以使用JDK 23并将其设置为8。结果编译器将使用JLS 8,并输出版本为52的类文件。