안녕하세요, 코딩하는곰입니다. 자바 개발을 하다 보면 다양한 버전 호환성 문제를 마주하게 되는데요, 특히 오래된 프로젝트를 현대화하거나 레거시 시스템을 유지보수할 때 “Source option 5 is no longer supported”라는 오류 메시지를 자주 접하게 됩니다. 이 오류는 자바 5 버전의 소스 옵션이 더 이상 지원되지 않는다는 의미로, 최신 JDK에서 오래된 자바 버전으로 컴파일하려고 할 때 발생합니다. 오늘은 이 오류의 원인을 깊이 있게 파헤치고, Maven, Gradle, 이클립스, 인텔리제이 등 다양한 개발 환경에서의 해결 방법을 상세하게 알아보겠습니다.
📘 코딩 튜토리얼과 가이드를 원한다면, npm left-pad 사건 작은 모듈이 무너뜨린 자바스크립트 생태계를 참고해보세요.
이 오류 메시지는 간단히 말해 사용 중인 JDK 버전이 자바 5 소스 코드를 컴파일할 수 없음을 의미합니다. 자바 5(JDK 1.5)는 2004년에 출시된 버전으로, 제네릭(Generics), 어노테이션(Annotations), 열거형(Enums), autoboxing 등 많은 중요한 기능들을 도입한里程碑 같은 버전입니다. 하지만 기술의 빠른 발전 속에서 오래된 버전은 서서히 지원이 중단되기 마련입니다.
JDK 9부터는 모듈 시스템이 도입되면서 더욱 엄격해진 호환성 정책이 적용되었고, 특히 JDK 11과 같은 LTS(Long-Term Support) 버전부터는 공식적으로 자바 5와 같은 오래된 소스 버전에 대한 컴파일 지원을 완전히 중단했습니다. 컴파일러는 -source 옵션으로 지정된 자바 소스 버전과 -target 옵션으로 지정된 클래스 파일 버전을 확인하는데, 최신 JDK는 일반적으로 이전 버전의 클래스 파일을 생성하는 것은 지원하지만, 너무 오래된 소스 버전을 컴파일하는 것은 지원하지 않습니다.
// 자바 5의 대표적인 기능: 제네릭// JDK 5 이전에는 컬렉션에 Object 타입을 사용했어야 함List list = new ArrayList(); // raw typelist.add("hello");String s = (String) list.get(0); // 명시적 형변환 필요// JDK 5부터 제네릭 도입List<String> genericList = new ArrayList<String>();genericList.add("hello");String s = genericList.get(0); // 형변환 불필요
🔧 새로운 기술을 배우고 싶다면, React 스타일링 가이드 Emotion vs Tailwind 심층 비교를 참고해보세요.
Maven은 pom.xml 파일에서 컴파일러 플러그인을 설정하여 소스와 타겟 버전을 명시적으로 지정합니다. 오류가 발생한다면 이 설정이 현재 사용하는 JDK 버전과 일치하지 않을 가능성이 높습니다.
수정 전 문제되는 설정:
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>5</source> <!-- 문제의 원인 --><target>5</target> <!-- 문제의 원인 --></configuration></plugin></plugins></build>
수정 후 올바른 설정:
<properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.11.0</version><configuration><source>${maven.compiler.source}</source><target>${maven.compiler.target}</target><encoding>${project.build.sourceEncoding}</encoding><!-- JDK 9 이상을 사용하는 경우 추가 설정 --><compilerArgs><arg>--enable-preview</arg></compilerArgs></configuration></plugin></plugins></build>
Maven 컴파일러 플러그인의 최신 버전을 사용하고, properties를 활용하여 버전 관리를 중앙화하는 것이 좋습니다. JDK 9 이상을 사용한다면 모듈 시스템 관련 추가 설정이 필요할 수 있습니다.
Gradle은 build.gradle 파일에서 자바 플러그인 설정을 통해 소스 호환성을 관리합니다.
수정 전 문제되는 설정:
sourceCompatibility = 1.5 // 문제의 원인targetCompatibility = 1.5 // 문제의 원인
수정 후 올바른 설정:
plugins {id 'java'}java {sourceCompatibility = JavaVersion.VERSION_11targetCompatibility = JavaVersion.VERSION_11}tasks.withType(JavaCompile) {options.encoding = 'UTF-8'options.compilerArgs += ['--enable-preview']}
Gradle 6.7 이상부터는 toolchains 기능을 사용하여 특정 JDK 버전을 명시적으로 지정할 수 있습니다:
java {toolchain {languageVersion = JavaLanguageVersion.of(11)}}
브랜딩이나 콘텐츠 제작 시 정확한 색상 코드를 알아야 할 때, 실시간 컬러 선택 및 코드 확인 도구가 유용하게 쓰일 수 있습니다.
이클립스에서는 프로젝트별로 자바 컴파일러 버전을 설정해야 합니다.
인텔리제이는 프로젝트 구조 설정에서 전역적으로 JDK 버전을 관리합니다.
다중 모듈 프로젝트 대응: 대규모 프로젝트에서는 여러 모듈이 다른 자바 버전을 사용할 수 있습니다. 이 경우 Maven의 프로필(profiles)이나 Gradle의 서브프로젝트 설정을 활용하여 모듈별로 다른 컴파일 설정을 적용할 수 있습니다. 점진적 마이그레이션 전략: 한번에 모든 코드를 최신 버전으로 전환하기 어려운 경우:
// 자바 버전별 차이점 예시// JDK 5: 제네릭, 어노테이션, enum 도입public enum Season { SPRING, SUMMER, FALL, WINTER }// JDK 8: 람다 표현식, 스트림 API 도입List<String> names = Arrays.asList("Java", "Kotlin", "Scala");names.stream().filter(name -> name.startsWith("J")).forEach(System.out::println);// JDK 11: var 키워드로 로컬 변수 타입 추론var message = "Hello Java 11";var list = new ArrayList<String>();
치매 예방과 기억력 향상을 위한 스도쿠 게임이 필요하다면, 크립토 할아버지와 함께하는 스도쿠 저니를 추천합니다.
자바 개발者라면 한번쯤은 마주치는 “Source option 5 is no longer supported” 오류, 이제는 더 이상 낯설거나 두렵지 않으시겠죠? 이 오류는 단순한 컴파일 에러를 넘어서 자바 생태계의 발전과 변화를 보여주는 상징적인 현상입니다. 레거시 프로젝트를 유지보수하거나 오래된 코드베이스를 현대화하는 과정에서 필수적으로 거쳐야 하는 단계라고 할 수 있습니다. 기술은 끊임없이 발전하고, 우리 개발자도 그 변화에 발맞춰 성장해야 합니다. 하지만 무조건 최신 기술만 추구하는 것이 아니라, 프로젝트의 요구사항과 팀의 상황에 맞는 현명한 기술 선택이 중요합니다. 때로는 레거시 버전을 유지해야 할 상황도 있고, 때로는大胆한 현대화가 필요할 수도 있습니다. 이 가이드가 여러 분의 자바 개발 여정에서 만나는 버전 호환성 문제를 해결하는 데 유용한 길잡이가 되었으면 합니다. 다음에도 더욱 유익한 자바 개발 팁으로 찾아뵙겠습니다. 코딩하는곰이었습니다!
비밀번호를 직접 만들기 어렵다면, 웹 기반 비밀번호 생성 도구를 활용해보세요.
