최신 JRE 버전이 이전 JDK 버전으로 컴파일 된 Java 프로그램을 실행할 수 있습니까?


80

이것은 어리석은 질문 일 수 있지만 Java 버전 1.6 1.7 에서 컴파일 된 Java 프로그램 및 관련 라이브러리를 실행 하고 (일부 라이브러리는 1.6을 사용하여 컴파일되는 반면 1.7을 사용하여 컴파일 중임) 1.7 JRE에서 전체 프로그램을 실행하는 데 문제가 발생 합니까? ?

답변:


85

Java 8에서 Java 1의 거의 모든 코드를 실행할 수 있습니다. Java 6 코드가 Java 8 런타임에서 실행되지 않을 이유가 없습니다.

흥미로운 점은 Java 1.4로 작성된 응용 프로그램의 경우 이후 런타임에서 실행할 때 속도가 빨라진다는 것입니다. 이는 Java가 "Java"로 알려진 언어뿐만 아니라 JVM (Java 가상 머신)도 지속적으로 발전하고 있기 때문입니다. 최신 JVM에서 예상 한대로 여전히 작동하는 10 년 이전의 소스 코드가 있습니다.

예를 들어 Java 5 VM을 대상으로 지정하려는 경우 Java 8 SDK 도구를 사용하여 수행 할 수 있습니다. 버전 5 VM이 버전 8 VM의 모든 기능을 지원하지 않을 수 있다는 점을 염두에두면 궁극적으로 지원할 대상 VM을 지정할 수 있습니다.

새로운 Java 8 런타임에 대해 Java 5로 작성한 코드를 방금 테스트했으며 모든 것이 예상대로 작동하므로 이제 더 강력한 언어와 런타임이 있더라도 과거의 투자를 계속 사용할 수 있습니다. 그 자체만으로도 Java는 기업을위한 훌륭한 개발 선택입니다.


내 프로그램의 절반 (내가 사용하고있는 일부 라이브러리)이 1.6을 사용하여 컴파일되고 나머지 절반은 1.7에서 컴파일되지만 여전히 작동합니까?
shawn

2
Java 7 런타임에서 실행하는 경우 그렇습니다. 작동하지 않을 이유가 없습니다.
이 월드

1
JDK 7로 개발하고 응용 프로그램을 JDK 7 응용 프로그램으로 컴파일하면 아니요, 이전 런타임에서는 작동하지 않습니다. 사용자에게 최신 런타임으로 업그레이드하도록 요청해야하는 이유는 여러 가지가 있습니다. 주로 보안상의 이유뿐 아니라 일부 성능 문제도 있습니다. 가능한 한 Java 7을 사용하고 싶지만 실제로 필요하지 않으면 이전 버전을 지원하는 데 별 의미가 없습니다.
Ewald 2013

1
-1 자바의 최신 버전에 MagicDraw 나던 작품은, 심지어 comanpany는 다운 그레이드를위한 튜토리얼 만든 nomagic.com/files/Java%20downgrade%20tutorial.pdf
NeDark

3
"Java 8에서 Java 1의 거의 모든 코드를 실행할 수 있습니다"에 대한 내용을 보셨습니까? 대부분 JVM의 난해한 부분에 약간의 비 호환성이 있습니다. 하지만 전체적으로 Java는 여전히 이전 버전과 매우 호환됩니다.
이 월드

96

이미 대답으로 당신은 대부분 안전하고 대부분의 제품과 3 번째의 것입니다 단순히 작업의 라이브러리. 그러나이 존재 할 매우 드문 경우 바이너리 호환성 ( 이전의 JDK를 사용하여 컴파일 된 클래스 파일이 새로운 JVM에서 실행하는 데 실패 것들 ) JDK 버전 사이에 도입합니다.

버전 간 Oracle Java 비 호환성 공식 목록 :

호환성 도구

JDK 9 패키지 에는 호환성을 확인하고 더 이상 사용되지 않는 API를 코드 내에서 나열하고 대안 (!)을 제안하는 jdeprscan 이라는 도구가 있습니다. 대상 JDK 버전 ( JDK 9 , 8 , 76 에서 작동 함)을 지정할 수 있으며 대상 버전 과 관련된 비 호환성을 나열합니다.

라이브러리의 경우 추가 설명 :

합리적인 경험 규칙은 소프트웨어가 대상으로하는 JRE 버전에 대해 최신 안정 릴리스 버전의 라이브러리를 사용하는 것입니다. 분명히이 규칙에서 많은 예외가 있지만 일반적으로 공개적으로 사용 가능한 라이브러리의 안정성은 일반적으로 시간이 증가한다.

종속성의 버전을 변경할 때 당연히 API 호환성버전 관리 를 고려해야합니다.

다시 말하지만 가장 많이 사용되는 종속성에는 이러한 정보를 사용할 수있는 웹 페이지가 있습니다.

그러나 좀 더 모호한 것을 사용하는 경우 컴파일 된 종속성 내에서 어떤 JRE가 클래스인지 식별 ​​할 수 있습니다.

여기에 클래스 버전을 찾는 방법에 대한 훌륭한 답변이 있습니다. 먼저 JAR 파일의 압축을 풀어야 할 수 있습니다.


12
새로운 Java 버전으로 업그레이드하는 것이 완전히 안전하지 않기 때문에 실제로 이것은 정답입니다.
dehlen

jdk8 기능을 사용하지 않는 경우 1.8을 컴파일하고 1.8을 대상으로 지정하십시오. 작동할까요?
Gaurav
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.