sourceCompatibility
targetCompatability
변수와 직접적 javac
에 -source
-target
스위치와 관련이있다. 이들은 크로스 컴파일에 사용됩니다 (relevant documentation for javac
, relevant SO question). 이러한 값의 유일한 목적은 클래스 파일을 이전 버전과 호환되도록 만드는 것입니다. 그들은 실제로 다른 목적을 수행하지 않습니다. 이 기능은 보안을 위해 추가 된 기능입니다. 컴퓨터에 안전하지 않은 오래된 JDK를 설치하는 대신 최신 버전을 설치하고이 값을 사용하여 코드를 컴파일 할 수 있습니다.
이 플래그에는 하나의 주요한 경고가 있습니다.이 값을 설정한다고해서 작성한 코드가 이전 JVM에서 작동한다는 것을 의미하지는 않습니다. javac
은 클래스를 컴파일하여 이전 JVM과 호환되도록하지만 이전 JVM에없는 메소드에 바인딩을 끝낼 수 있기 때문입니다. 당신이 '1.6'
에 호환성 값을 설정하고 당신은 JDK (8)을 사용하여, 당신은 여전히 다음과 같은 코드를 작성할 수 있습니다 빌드를 실행하는 경우
예를 들어, :
Objects.equals(obj1, obj2);
을 그리고 컴파일러는 불평하지 않을 것이다. 그것은 그 라인에 대해 불평하지 않고 계속 될 것입니다. 자바 6을 실행하려고하는 경우에는, 당신은 Objects
이 자바 7
에 도입 다르게 넣어 때문에 Objects.equals
이 존재하지 않는다는 오류가 발생하는 것 : 할 -source
및 -target
당신의 .class 호환 파일 예를 들어, 구형 JVM의 경우 은 코드로을 사용한 클래스와 메소드의 유효성을 검사하지 않습니다. 이를 수행 할 수있는 유일한 방법은 -bootclasspath
입니다.이 시점에서 이전의 JDK를 다운로드하여 컴파일해야하므로 rt.jar
파일이 필요합니다 (relevant SO question).
업그레이드와 관련하여 이러한 값을 설정해도 업그레이드 가능성이 반드시 제한되는 것은 아닙니다. 작성한 코드는 해당 버전에서 사용할 계획이라면 사용하는 모든 값과 호환되어야하지만 새로운 기능 및 API를 사용하기 시작하면 변경하지 않습니다.