Java 9 컴파일러의 --release 플래그는 무엇입니까?
의 바9javac
깃발을 --release
:
> javac --help
...
--release <release>
Compile for a specific VM version. Supported targets: 6, 7, 8, 9
?-source
★★★★★★★★★★★★★★★★★」-target
? for for for for for? 냥냥지??지 ???-source X -target X
꼭 그렇진 않아요
JEP 247: 오래된 플랫폼 버전용 컴파일에서는 이 새로운 명령줄 옵션이 정의되어 있습니다.--release
옵션인 ' 옵션'이 되어 있습니다.
--release
특정 플랫폼버전의 실장에 대해 링크하는 클래스 파일을 작성하도록 컴파일러를 자동적으로 설정합니다.에서 사전javac
(내 것을 제외)와 동등합니다.
아니다, 아니다, 아니다, , .-source N -target N
"동기" 섹션은 다음과 같습니다.
javac
에는 2개의 .「 2 」 。-source
★★★★★★★★★★★★★★★★★」-target
컴파일러가 받아들이는 Java 언어 버전과 컴파일러가 생성하는 클래스 파일의 버전을 선택하기 위해 사용할 수 있습니다.,로는 「」, 「」javac
는 플랫폼 API의 최신 버전을 기반으로 컴파일됩니다.따라서 컴파일된 프로그램이 실수로 현재 버전의 플랫폼에서만 사용 가능한 API를 사용할 수 있습니다.이러한 은 이전 할 수 .이러한 프로그램은, 「」에, 할 수 없습니다.-source
★★★★★★★★★★★★★★★★★」-target
..은 장기적인 는 이러한플랫폼버전에서 할 수 있는 수 입니다.이러한 옵션을 사용하면 지정된 플랫폼 버전에서 실행할 수 있는 클래스 파일을 얻을 수 있을 것으로 예상하기 때문에 이는 장기적인 사용상의 과제입니다.
즉, 교차 컴파일에는 소스 옵션과 대상 옵션을 지정하는 것만으로는 충분하지 않습니다. ★★★★★★★★★★★★★★★★★★javac
디폴트로는 최신 플랫폼 API를 기반으로 컴파일되므로 이전 버전에서는 실행할 수 없습니다. '먹다'를 .-bootclasspath
이전 버전에 대응하는 옵션을 사용하여 올바르게 교차할 수 있습니다.여기에는 컴파일할 수 있는 올바른 API 버전이 포함되며 이전 버전에서 실행할 수 있습니다.이 명령어는 자주 잊혀지기 때문에 올바르게 교차 컴파일을 수행하기 위해 필요한 모든 작업을 수행하는 하나의 명령줄 옵션을 추가하기로 결정했습니다.
메일링 리스트 및 Oracle Docs의 상세 내용.원래 버그는 여기에 보관되어 있습니다.이 옵션이 통합된 이후 JDK 빌드는 "위험 및 전제 조건" 섹션에 설명된 이전 릴리스의 플랫폼 API에 대한 설명과 함께 번들로 제공됩니다.즉, 교차 컴파일이 작동하기 위해 이전 버전을 시스템에 설치할 필요가 없습니다.
--release X
단순한 지름길이 아니라-source X -target X
왜냐면-source
그리고.-target
이전 릴리스로 안전하게 컴파일하기에는 불충분합니다.또, 다음의 설정도 필요하게 됩니다.-bootclasspath
플래그는 오래된 릴리스에 대응해야 합니다(이 플래그는 자주 잊어버립니다).그래서 자바9에서는 싱글을 만들었습니다.--release
플래그를 :-source
,-target
★★★★★★★★★★★★★★★★★」-bootclasspath
.
Java 1.7로 컴파일하는 예를 다음에 나타냅니다.
javac --release 7 <source files>
컴퓨터에 JDK 7을 설치할 필요도 없습니다.JDK 9에는 JDK 7에 존재하지 않는 심볼에 실수로 링크되는 것을 방지하기 위해 필요한 정보가 이미 포함되어 있습니다.
하나의 중요한 할 수 은 "A"를 사용하여 입니다.--release
:
> javac --add-exports java.base/sun.invoke=ALL-UNNAMED --release 11 Main.java
error: exporting a package from system module java.base is not allowed with --release
1 error
API를.--release
:
> javac --add-exports java.base/sun.invoke=ALL-UNNAMED Main.java
또는
> javac --add-exports java.base/sun.invoke=ALL-UNNAMED -source 11 -target 11 Main.java
언급URL : https://stackoverflow.com/questions/43102787/what-is-the-release-flag-in-the-java-9-compiler
'programing' 카테고리의 다른 글
마지막으로 블록은 항상 실행됩니까? (0) | 2022.09.16 |
---|---|
HTML을 PHP로 에코하려면 어떻게 해야 하나요? (0) | 2022.09.16 |
바이트의 적절한 휴지 상태 주석 [] (0) | 2022.09.16 |
오류: 로컬 데이터 로딩이 비활성화되었습니다. 클라이언트 측과 서버 측 모두에서 활성화해야 합니다. (0) | 2022.09.16 |
마지막 이후의 모든 정보를 수집하는 정규 표현식 / (1) | 2022.09.16 |