1. 程式人生 > 其它 >Java新建Maven專案學習Spring註解開發顯示:Unsupported class file major version 60

Java新建Maven專案學習Spring註解開發顯示:Unsupported class file major version 60

發生緣由

  • 學習Spring中註解開發

環境

  • jdk版本:jdk-16.0.2

  • Idea版本:2021.2

  • 電腦系統:win10

問題描述

  1. 新疆一個Maven專案,pom.xml檔案中新增Spring依賴

        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.2.10.RELEASE</version>
            </dependency>
        </dependencies>
  2. 建立BookDao介面和BookDaoImpl類

    package com.linxuan.dao;
    ​
    public interface BookDao {
        public void save();
        public void update();
    }
    package com.linxuan.dao.impl;
    ​
    import com.linxuan.dao.BookDao;
    import org.springframework.stereotype.Repository;
    ​
    // 相當於Component註解,不過是dao層的Component註解。
    // 建立一個Been物件,讓Spring管理,預設名字是當前類名首字母小寫
    @Repository
    public class BookDaoImpl implements BookDao {
    ​
        @Override
        public void save() {
            System.out.println(System.currentTimeMillis());
            System.out.println("book dao save ...");
        }
    ​
        @Override
        public void update() {
            System.out.println("book dao update ...");
        }
    }
  3. 建立Spring的配置類

    package com.linxuan.config;
    ​
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    ​
    @Configuration
    @ComponentScan("com.linxuan")
    public class SpringConfig {
    }
  4. 編寫執行類以及主方法

    package com.linxuan;
    ​
    import com.linxuan.config.SpringConfig;
    import com.linxuan.dao.BookDao;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    ​
    public class App {
        public static void main(String[] args) {
            ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
    ​
            BookDao bookDao = ctx.getBean(BookDao.class);
            bookDao.update();
        }
    }
  5. 執行主方法。結果發現報錯,報錯資訊如下:

    Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [D:\Java\IdeaProjects\ssm\spring02\spring01_aop\target\classes\com\linxuan\App.class]; nested exception is org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file - probably due to a new Java class file version that isn't supported yet: file [D:\Java\IdeaProjects\ssm\spring02\spring01_aop\target\classes\com\linxuan\App.class]; nested exception is java.lang.IllegalArgumentException: Unsupported class file major version 60
        at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.scanCandidateComponents(ClassPathScanningCandidateComponentProvider.java:452)
        at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:315)
        at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:276)
        at org.springframework.context.annotation.ComponentScanAnnotationParser.parse(ComponentScanAnnotationParser.java:132)
        at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:296)
        at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:250)
        at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:207)
        at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:175)
        at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:319)
        at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:236)
        at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:280)
        at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:96)
        at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:707)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:533)
        at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:89)
        at com.linxuan.App.main(App.java:10)
    Caused by: org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file - probably due to a new Java class file version that isn't supported yet: file [D:\Java\IdeaProjects\ssm\spring02\spring01_aop\target\classes\com\linxuan\App.class]; nested exception is java.lang.IllegalArgumentException: Unsupported class file major version 60
        at org.springframework.core.type.classreading.SimpleMetadataReader.getClassReader(SimpleMetadataReader.java:60)
        at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:49)
        at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:103)
        at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:123)
        at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.scanCandidateComponents(ClassPathScanningCandidateComponentProvider.java:429)
        ... 15 more
    Caused by: java.lang.IllegalArgumentException: Unsupported class file major version 60
        at org.springframework.asm.ClassReader.<init>(ClassReader.java:196)
        at org.springframework.asm.ClassReader.<init>(ClassReader.java:177)
        at org.springframework.asm.ClassReader.<init>(ClassReader.java:163)
        at org.springframework.asm.ClassReader.<init>(ClassReader.java:284)
        at org.springframework.core.type.classreading.SimpleMetadataReader.getClassReader(SimpleMetadataReader.java:57)
        ... 19 more

解決方案

  1. 點選IDEA左上角的File,然後再點選Settings

  2. 依次點選Build, Execution, Deployment > Compiler > Java Compiler

  3. 將右方出現的Moudle模組裡面的專案和模組的版本切換值8即可 

  4. 點選Apply,然後再點選OK。
  5. 點選主方法執行,發現沒得問題!