2017-03-29 9 views

답변

29

정확하게는 아닙니다. 여기에 옵션에 대한 proposal에 대한 링크는 다음과 같습니다

우리는 자동으로 주어진 플랫폼 버전의 구현에 연결됩니다 클래스 파일을 생성하는 컴파일러를 구성하는 새 명령 줄 옵션, --release을 정의. javac에 미리 정의 된 플랫폼의 경우 --release N-source N -target N -bootclasspath <bootclasspath-from-N>과 같습니다. (중점 광산)

따라서 아니오, -source N -target N과 동일하지 않습니다.

javac 두 개의 명령 행 옵션, -source-target을 제공, 컴파일러와 버전에서 허용하는 자바 언어의 버전을 선택할 수 있습니다 :이 또한 이유는 "동기 부여"항목에 설명되어 생성하는 클래스 파일의 이름입니다. 그러나 기본적으로 javac은 가장 최신 버전의 플랫폼 API와 비교하여 컴파일됩니다. 따라서 컴파일 된 프로그램은 실수로 플랫폼의 현재 버전에서만 사용 가능한 API를 사용할 수 있습니다. 이러한 프로그램은 -source 및`-target에 전달 된 값에 관계없이 이전 버전의 플랫폼에서 실행할 수 없습니다. 옵션. 이 옵션을 사용하면 지정된 플랫폼 버전에서 실행할 수있는 클래스 파일을 얻게 될 것이므로 사용자에게 장기적인 사용상의 문제점이 될 수 있습니다.

간략하게 소스 및 대상 옵션 지정은 교차 컴파일에 충분하지 않습니다. javac은 기본적으로 가장 최근의 플랫폼 API와 비교하여 컴파일되기 때문에 이전 버전에서 실행되도록 보장 할 수 없습니다. 또한 크로스 컴파일하려면 이전 버전에 해당하는 -bootclasspath 옵션을 지정해야합니다. 여기에는 컴파일 할 수있는 올바른 API 버전과 이전 버전의 실행을 허용하는 API가 포함됩니다. 매우 자주 잊혀 졌기 때문에 크로스 컴파일 할 때 필요한 모든 작업을 수행하는 명령 줄 옵션 하나를 추가하기로 결정했습니다.

추가 읽기 in the mailing listOracle Docs. 원래의 버그는 here로 접수되었습니다. 이 옵션의 통합 이후 JDK 빌드는 "위험 및 가정"섹션에서 언급 한 이전 릴리스의 플랫폼 API에 대한 설명과 함께 번들되었습니다. 즉, 크로스 컴파일 작업을 위해 컴퓨터에 설치된 이전 버전이 필요하지 않습니다. -source-target 안전하게 이전 릴리스로 컴파일하기에 충분하지 않기 때문에

6

--release X-source X -target X 단지 바로 가기 이상입니다. 또한 이전 버전과 일치해야하는 -bootclasspath 플래그를 설정해야합니다 (이 플래그는 종종 잊어 버립니다). 따라서 Java 9에서는 플래그를 하나 만들었습니다.이 플래그는 -source, -target-bootclasspath의 세 플래그를 대체합니다.

따라서 Java 1로 컴파일하는 예입니다.7 :

javac --release 7 <source files> 

컴퓨터에 JDK 7이 설치되어 있지 않아도됩니다. JDK 9에는 이미 JDK 7에없는 심볼에 우발적 인 링크를하지 못하게하는 데 필요한 정보가 이미 들어 있습니다.