IT박스

Gradle,“sourceCompatibility”대“targetCompatibility”?

itboxs 2020. 7. 29. 07:58
반응형

Gradle,“sourceCompatibility”대“targetCompatibility”?


sourceCompatibility의 관계 / 차이는 무엇입니까 targetCompatibility? 다른 값으로 설정하면 어떻게됩니까?

Gradle 설명서 에 따르면 :

sourceCompatibility"Java 소스를 컴파일 할 때 사용할 Java 버전 호환성"입니다. targetCompatibility"클래스를 생성하는 Java 버전"입니다.

내 이해는 targetCompatibility특정 버전의 Java와 호환되는 Java 바이트 코드를 생성 한다는 것입니다.이 기능의 하위 집합 sourceCompatibility입니까?


이것은 javac에 매핑됩니다- 크로스 컴파일 섹션을 보십시오-source 는 기본적으로 소스 언어 레벨이고 target은 생성 된 바이트 코드의 레벨입니다.


사용할 때주의하십시오. 우리는 사람들이 가정을하고 물린 적이 있습니다.

1.5의 sourceCompability (또는 targetCompatibility)를 사용한다고해서 항상 JDK 1.6으로 코드를 컴파일하고 JDK 1.5에서 작동 할 것으로 기대할 수있는 것은 아닙니다. 문제는 사용 가능한 라이브러리입니다.

코드가 JDK 1.6에서만 사용할 수있는 일부 메소드를 호출하는 경우 대상 VM에 대한 다양한 호환성 옵션으로 컴파일됩니다. 그러나 실행하면 문제가되는 메소드가 없기 때문에 실패합니다 (MethodNotFoundException 또는 ClassNotFoundException이 발생 함).

이러한 이유로 항상 호환성 설정을 빌드중인 실제 Java 버전과 비교합니다. 일치하지 않으면 빌드가 실패합니다.


sourceCompatibility = Java 프로그래밍 언어 버전을 사용하여 .java 파일 을 컴파일하도록 지정 합니다. 예를 들어 sourceCompatibility 1.6 = .java 파일 을 컴파일하는 데 Java 프로그래밍 언어 버전 1.6을 사용하도록 지정 합니다.

기본적으로 sourceCompatibility = "사용중인 현재 JVM의 버전"및 targetCompatibility = sourceCompatibility

targetCompatibility =이 옵션은 생성 된 클래스 파일이 targetCompatibility에 의해 지정된 VM과 호환되도록합니다. 대부분의 경우 -target 옵션의 값은 -source 옵션의 값입니다. 이 경우 -target 옵션을 생략 할 수 있습니다.

클래스 파일은 targetCompatibility 및 이후 버전에서 지정한 대상에서 실행되지만 이전 버전의 VM에서는 실행되지 않습니다.

참고 URL : https://stackoverflow.com/questions/16654951/gradle-sourcecompatibility-vs-targetcompatibility

반응형