Ответ 1
это сопоставляется с javac - см. раздел кросс-компиляции - источник в основном является уровнем исходного языка, а целью является уровень байт-кода, который.
Какова связь/разница между sourceCompatibility
и targetCompatibility
? Что происходит, когда они установлены на разные значения?
Согласно Gradle документация:
sourceCompatibility
- это "совместимость версии Java для компиляции Java-источника".
targetCompatibility
- это "Java-версия для генерации классов для".
Я понимаю, что targetCompatibility
будет генерировать java-байт-код, совместимый с определенной версией Java, является ли это подмножеством функций sourceCompatibility
?
это сопоставляется с javac - см. раздел кросс-компиляции - источник в основном является уровнем исходного языка, а целью является уровень байт-кода, который.
Будьте осторожны, когда вы их используете; нас укусили люди, делающие предположения.
Просто потому, что вы используете sourceCompability (или targetCompatibility) 1.5, не означает, что вы всегда можете скомпилировать свой код с JDK 1.6 и ожидать, что он будет работать под JDK 1.5. Проблема заключается в доступных библиотеках.
Если ваш код вызывает вызов некоторого метода, который доступен только в JDK 1.6, он все равно будет компилироваться с различными параметрами совместимости для целевой виртуальной машины. Но когда вы запустите его, он будет терпеть неудачу, потому что метод нарушения отсутствует (вы получите исключение MethodNotFoundException или ClassNotFoundException).
По этой причине я всегда сравниваю параметр Compatibility с фактической версией Java, на которой я строю. Если они не совпадают, я не могу выполнить сборку.
sourceCompatibility= указывает, что версия языка программирования Java используется для компиляции файлов .java. Например, sourceCompatibility 1.6 = указывает, что версия 1.6 языка программирования Java используется для компиляции файлов .java.
По умолчанию sourceCompatibility = "версия текущей JVM в использовании" и targetCompatibility = sourceCompatibility
targetCompatibility= опция гарантирует, что созданные файлы классов будут совместимы с виртуальными машинами, указанными targetCompatibility. Обратите внимание, что в большинстве случаев значением параметра -target является значение опции -source; в этом случае вы можете опустить параметр -target.
Файлы классов будут запускаться на целевом объекте, указанном targetCompatibility и в более поздних версиях, но не на более ранних версиях VM