관리 메뉴

bright jazz music

class file has wrong version 61.0, should be 55.0 본문

오류

class file has wrong version 61.0, should be 55.0

bright jazz music 2023. 1. 15. 15:42

   
    class file has wrong version 61.0, should be 55.0
    Please remove or make sure it appears in the correct subdirectory of the classpath.

java 버전 17을 써야 하는데 그 아래 버전을 쓰고 있어서 생기는 문제이다.

 

- java SE 17 = 61.0

- java  SE 11 = 55.0 

아래 버전의 경우 java 17 이상 버전이 필요하다.


- Spring MVC 6.0.0
- Spring Boot 3.0.0
- Spring REST DOCS 3.0.0

pom.xml 또는 gradle.build를 확인했는데 17이 필요 없는 버전이라면?

사용하려는 라이브러리가 자바 17 이상을 요구하는 것일 수도 있다.

 

예시)
- 스프링부트 2.7.6을 사용한다면 자바 17 이하 버전도 사용 가능하다.

- 그러나 이 환경에서 Spring REST DOCS를 사용하려면 반드시 17 이상 버전을 사용해야 한다.

 

해결방법)
- 스프링에서 사용하는 자바 버전을 높인다.

- 또는 사용하려는 라이브러리의 버전을 낮춘다.

 

내 사례)

 

내 경우에는 Spring Boot 2.7.6 버전 + 자바 11을 사용하면서 Spring REST Docs3.0.0을 사용하려다가 오류가 발행했다.

 

D:\personal\blog\src\test\java\com\endofma\blog\controller\PostControllerDocTest.java:18: error: cannot access MockMvcRestDocumentation
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
                                                  ^
  bad class file: C:\Users\user\.gradle\caches\modules-2\files-2.1\org.springframework.restdocs\spring-restdocs-mockmvc\3.0.0\d6b6ac3817f68f2dcf9ad4db4e00836776abb1ea\spring-restdocs-mockmvc-3.0.0.jar(/org/springframework/restdocs/mockmvc/MockMvcRestDocumentation.class)
  
  
    class file has wrong version 61.0, should be 55.0
    Please remove or make sure it appears in the correct subdirectory of the classpath.

 

나는 라이브러리(Spring REST Docs)의 버전을 "2.0.7.RELEASE" 로 낮춰서 해결했다.

 

아래는 build.gradle의 //SpringRestDocs 주석 부분을 참고할 것.

 

/*build.gradle*/

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.7.6'
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
    //SpringRestDoc
    id "org.asciidoctor.jvm.convert" version "3.3.2"
}

group = 'com.endofma'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
    //SpringRestDoc
    asciidoctorExt

}

repositories {
    mavenCentral()
}

ext { //변수를 선언할 것이므로 파일 상부에 적어주는 것이 좋다.
    //SpringRestDoc
    snippetsDir = file('build/generated-snippets') //생성된 asciidoc 위치 지정
//    asciidocVersion = "3.0.0" //3버전부터는 java 17이 이상이 필요하다.
    asciidocVersion = "2.0.7.RELEASE"
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-validation' /*추가*/

    //gradle 5버전부터 annotationprocessor가 사용 가능해서
    // gradle 레벨에서 컴파일 할 때 필요한 querydsl클래스 파일을 생성할 수 있게 됐다.
    //querydsl 관련 디펜던시
    implementation 'com.querydsl:querydsl-core'
    implementation 'com.querydsl:querydsl-jpa'

    //annotationProcessor : 인식할 타입을 추가함
    annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa"
    annotationProcessor 'jakarta.persistence:jakarta.persistence-api'
    annotationProcessor 'jakarta.annotation:jakarta.annotation-api'



    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'com.h2database:h2'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'

    //SpringRestDoc
	//asciidocVersion = "2.0.7.RELEASE" 변수가 대입된다
    asciidoctorExt "org.springframework.restdocs:spring-restdocs-asciidoctor:${asciidocVersion}"
    testImplementation "org.springframework.restdocs:spring-restdocs-mockmvc:${asciidocVersion}"


}



test {
    //SpringRestDoc
    outputs.dir snippetsDir
}

//SpringRestDoc
asciidoctor {
    inputs.dir snippetsDir
    configurations 'asciidoctorExt'
    dependsOn test //테스트를 먼저 수행한다
}

//SpringRestDoc
//나중에 프로젝트를 jar로 빌드할 때 ascciidoc도 포함될 수 있도록 한다.
bootJar {
    dependsOn asciidoctor
    from ("${asciidoctor.outputDir}/html5") {
        into 'static/docs'
    }
}

tasks.named('test') {
    useJUnitPlatform()
}

 

build.gradle 파일을 수정한 뒤 gradle sync를 통해 재빌드 하면 아래와 같은 결과가 출력된다.

 

> Task :prepareKotlinBuildScriptModel UP-TO-DATE
Download https://repo.maven.apache.org/maven2/org/springframework/restdocs/spring-restdocs-mockmvc/2.0.7.RELEASE/spring-restdocs-mockmvc-2.0.7.RELEASE.pom, took 540 ms (2.33 kB)
Download https://repo.maven.apache.org/maven2/javax/servlet/javax.servlet-api/4.0.1/javax.servlet-api-4.0.1.pom, took 146 ms (15.5 kB)
Download https://repo.maven.apache.org/maven2/org/springframework/restdocs/spring-restdocs-mockmvc/2.0.7.RELEASE/spring-restdocs-mockmvc-2.0.7.RELEASE.jar, took 416 ms (20.37 kB)
Download https://repo.maven.apache.org/maven2/javax/servlet/javax.servlet-api/4.0.1/javax.servlet-api-4.0.1.jar, took 577 ms (95.5 kB)
Download https://repo.maven.apache.org/maven2/org/springframework/restdocs/spring-restdocs-mockmvc/2.0.7.RELEASE/spring-restdocs-mockmvc-2.0.7.RELEASE-sources.jar, took 150 ms (15.57 kB)
Download https://repo.maven.apache.org/maven2/javax/servlet/javax.servlet-api/4.0.1/javax.servlet-api-4.0.1-sources.jar, took 467 ms (203.01 kB)

BUILD SUCCESSFUL in 4s
Comments