Параметры источника javac и целевые параметры

Я видел параметры компиляции, как обсуждалось в разделе «Распространение JDK» может запускать «javac -source 1.6 -target 1.5»? , Я понимаю отдельные варианты источника и цели. Я не понимаю, почему исходная версия выше, чем целевая версия. Компиляция кода для старых целей имеет смысл. Но в этом случае, почему мы просто не используем источник исходной цели, с которой мы хотим работать?

Java обратно совместима. Вы используете опцию -source для указания версии java, используемой для компиляции, и вы используете параметр -target, чтобы указать самую низкую версию java для поддержки. например. Если я укажу цель в 1,4, то моя программа не сможет работать на java 1.3 или ниже. более подробную информацию см. в следующей документации javac. особенно раздел о вариантах перекрестной компиляции

Питер Ценг упоминает много ключевых моментов, которые нужно запомнить во время компиляции. На самом деле даже когда-то я столкнулся с подобной проблемой и хочу поделиться основными причинами многих проблем.

У меня был исходный код, который должен был скомпилировать и сделать его совместимым (-source & -target) Java ‘1.8’ . Сам код

  1. Множество символов товарного знака, следовательно, я оказался в непризнанных персонажах (мне нужно было настроить настройки кодировки IntelliJ Idea)
  2. java.sql.* изменений в java.sql.*
  3. Использование большого количества сторонних библиотек. Избавь меня от ужаса, объясняя трудность отладки там и бла-бла-бла.

После определенных изменений я закончил с кодом, в котором было одинаковое количество тестовых примеров JUnit для запуска. В конце концов я столкнулся с java.lang.VerifyError . Я был потрясен, когда понял, что такая ошибка возникает, когда я компилирую и запускаю код в разных библиотеках / среде (что не так).

То, что я почти пропустил, состояло в том, что для того , чтобы удостовериться в том, что тесты должны выполняться в изолированной среде, тесты Junit & its test, выполняемые в отдельной разветвленной виртуальной машине

        

Это, очевидно, будет распространяться как отдельный процесс и действовать как автономное приложение при исполнении. Несмотря на то, что среда IDE синхронизирует оба процесса синхронно, JVM довольно изолированы.

После Java 1.7 Oracle ввел более строгую проверку и немного изменил формат classа – чтобы содержать карту стека, используемую для проверки правильности кода . Исключением, которое я видел, было то, что у какого-то метода нет допустимой карты стека. В конечном итоге я попытался включить множество вариантов JVM, чтобы настроить настройки, но напрасно.

  

ничего не получилось. Единственная работа вокруг была включать

  

В Java 1.7 разрешить проверку только номинального байтового кода. Поскольку это было снято в Java 1.8, единственным вариантом было использование

  

JDK1.8 больше не будет поддерживать -source и -target меньше 1,6

 "c:\Program Files\Java\jdk1.8.0_121\bin\javac.exe" -source 1.3 HelloWorld.java warning: [options] bootstrap class path not set in conjunction with -source 1.3 warning: [options] source value 1.3 is obsolete and will be removed in a future release warning: [options] target value 1.4 is obsolete and will be removed in a future release warning: [options] To suppress warnings about obsolete options, use -Xlint:-options. 4 warnings 
  • Несколько файлов .class, созданных для classа?
  • Скомпилируйте код полностью в памяти с помощью javax.tools.JavaCompiler
  • Компиляция java-файлов во всех подпапках?
  • Javac: обрабатывать предупреждения как ошибки
  • Ссылка неоднозначна с дженериками
  • Оптимизация с помощью компилятора Java
  • Есть ли разница в производительности между Javac debug on и off?
  • Java: Как я могу скомпилировать всю структуру каталогов кода?
  • javac не распознается как внутренняя или внешняя команда, операционная программа или командный файл
  • javac error: имена classов принимаются только в том случае, если обработка annotations явно запрашивается
  • Что такое имена файлов в classе $ 1?
  • Давайте будем гением компьютера.