programing

Java 9 컴파일러의 --release 플래그는 무엇입니까?

newsource 2022. 9. 16. 21:04

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