Flutter/Flutter

Execution failed for task ':photo_manager:compileReleaseKotlin'.> 'compileReleaseJavaWithJavac' task (current target is 1.8) and 'compileReleaseKotlin' task (current target is 17) jvm target compatibility should be set to the same Java version.Consider us

hyeonseong 2025. 4. 22. 12:28

에러 코드 

photo_manager 라이브러리가 jvm을 1.8을 타겟으로 하지만, 현재 나의 jvm은 17이라고 맞춰달라고 한다.

Execution failed for task ':photo_manager:compileReleaseKotlin'.
> 'compileReleaseJavaWithJavac' task (current target is 1.8) and 'compileReleaseKotlin' task (current target is 17) jvm target compatibility should be set to the same Java version.
Consider using JVM toolchain:

 

원인

나의 jvm 상태 

    java {
        toolchain {
            languageVersion = JavaLanguageVersion.of(17)
        }
    }

    compileOptions {
        coreLibraryDesugaringEnabled true
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }

    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_17.toString()
    }

 

photo_manager 라이브러리의 jvm 상태

보면 JavaVersion.VERSION_1_8 로 셋팅되어 있어서 문제가 발생했다.

JavaVersion getJavaFromHome(String path) {
    def releaseFile = new File(path, "release")

    if (releaseFile.exists()) {
        def pattern = Pattern.compile("JAVA_VERSION=\"(\\d+)\"")
        def matcher = pattern.matcher(releaseFile.text)
        if (matcher.find()) {
            def version = matcher.group(1)
            log("Get java version from release file: $version")
            return JavaVersion.toVersion(version)
        }
    } else {
        def javaBin = new File("${path}/bin/java")
        if (javaBin.exists()) {
            return JavaVersion.VERSION_1_8
        } else if (new File("${path}/bin/java.exe").exists()) {
            return JavaVersion.VERSION_1_8
        }

        return null
    }
}

 

해결

Flutter 버전을 3.29.3으로도 올려보고, 구글링등 많은 시도를 했지만 결국 실패 했었다

 

결국 마지막으로 시도 해서 성공한 방안은 

내 JVM을 변경하기엔 사이드 이펙트가 너무 많이 발생한다. ( 다른 라이브러리에도 영향을 미침 )

 

Android -> photo_manager -> build.gradle 경로로 이동해서 직접 jvm을 내 프로젝트와 동기화를 시켜주었다.

if (javaBin.exists()) {
            return JavaVersion.VERSION_17 
        } else if (new File("${path}/bin/java.exe").exists()) {
            return JavaVersion.VERSION_17
        }