2009-07-07 4 views
1

-source 1.5-target 1.5 매개 변수를 사용하여 Java 버전 1.6으로 소스를 컴파일했으며 컴파일러가 전혀 불평하지 않습니다.Java 및 "frontwards"호환성 질문

여전히 응용 프로그램은 누락 된 메서드로 인해 Java 1.5에서 실행되지 않습니다. 물론 소스 코드 중 일부를 1.5 규격으로 다시 작성할 수는 있지만 이해할 수없는 부분은 있습니다. 하단의 java 바이트 코드가 "전방"호환되지 않아야합니까?

바이트 코드로 변환 된 메소드가 아닌가요? 1.6 libs/methods (형식적으로 String.isEmpty())를 1.5 바이트 코드로 컴파일하고 압축 파일에 모두 압축 할 수 있습니까?

답변

3

당신이 필요로하는 명령 행 옵션의 전체 세트는 다음과 같습니다

java -source 1.5 -target 1.5 -bootclasspath /usr/jdk/jdk1.5.0_17/jre/lib/rt.jar 

(변경 bootclasspath에을에 그러나 컴퓨터는 설정입니다.) 물론

, 1.6 API를 향상 1.5에되지 않습니다. 1.5는 서비스 수명 종료 기간의 대부분을 차지하므로 어쨌든 1.6을 최소화하는 것이 좋습니다.

+0

완전히 통합 된 Java를 사용하는 유일한 OS 인 Mac OSX에 관한 1.6,/ –

+0

1.6은 Mac OS X에서 확실히 사용 가능합니다. 지금은 6u10 플러그인 버전도 있습니다. 유감스럽게도 아직까지는 Mac OS X의 모든 지원 버전에서 기본적으로 1.6입니다. –

+0

64 비트 버전에서만 사용 가능하다고 생각합니다. –

1

Java가 원시 Java 코드를 역순으로 다시 컴파일 할 것이라고 생각하지 않습니다. 1.6 호출을하면 1.5에서 액세스 할 수 없습니다.

+0

실행중인 JRE가 1.6 인 경우 모든 JRE가 코드를 실행하는지 여부에 따라 달라질 수 있습니다. 라이브러리를 제공하고 있습니다. –

6

기본 Java 라이브러리 메소드를 의미하는 경우 컴파일하지 않으면 해당 메소드가 바이트 코드로 변환되지 않습니다. 이미 Sun (또는 타사 JVM 배포자)이 바이트 코드로 컴파일하고 운영 체제에 설치했습니다. 그것들은 이며,을 참조하고 컴파일 된 코드에서 사용됩니다.

1

컴파일 할 라이브러리를 이전 라이브러리로 변경할 수 있습니다. Eclipse와 같은 패키지에서 설치된 각 JDK가 "라이브러리 선택"창에 나타나야합니다. 컴파일 할 대상을 선택할 수 있습니다.

그렇지 않으면 ant 파일이나 CLI 컴파일 명령에서이를 대체 할 수 있어야합니다.

이전 JVM을 대상으로하는 경우 실제로 수행해야하거나 사용할 수없는 호출을 사용할 수 있습니다.

1

소스 매개 변수는 언어 구문 수준에서만 컴파일러를 확인하지만 (예 : generics를 발견하면 source = 1.4로 불평하지만) 지정된 Java 버전에서 사용할 수있는 API 만 사용하도록 제한하지 않습니다.

target 매개 변수는 컴파일러가 지정된 버전의 런타임에서 사용할 수 있지만 모든 API 적합성의 유효성을 검사하지는 않습니다 (-source와 유사 함).