Я спрашиваю о проблеме, если я начинаю использовать стандартные библиотеки Java 7? - PullRequest
3 голосов
/ 14 марта 2011

Я пишу программу, которая должна отслеживать события файловой системы на нескольких платформах. Java 7 включает новую стандартную библиотеку WatchService, которая действует как абстракция для различных типов обработчиков событий файловой системы (inotify, FSEvents, FileSystemWatcher и т. Д.).

Это тот случай, когда код, скомпилированный с помощью компилятора Java 7, нуждается в Java 7 JVM для его запуска?

Если да, возникнут ли у меня всевозможные проблемы с клиентскими компьютерами, на которых не установлена ​​/ недоступна JVM 7 для этой платформы (более старые OSX, Windows XP и т. Д.)?

Ответы [ 4 ]

5 голосов
/ 14 марта 2011

Это тот случай, когда код, скомпилированный с помощью компилятора Java 7, нуждается в Java 7 JVM для его запуска?

Да.

Вы могли бы использовать компилятор Java 7 для компиляции с -target 6.0, но это не поможет, если код зависит от библиотек классов, специфичных для Java 7 ... как, очевидно, у вас.

Если да, возникнут ли у меня всевозможные проблемы с клиентскими компьютерами, на которых не установлена ​​/ недоступна JVM 7 для этой платформы (более старые OSX, Windows XP и т. Д.)?

Да.Это, безусловно, случай на «установленном» фронте.Если ваш код зависит от Java 7, лучшим вариантом будет заставить ваших клиентов установить Java 7 JVM для его запуска.(Установить несколько версий Java параллельно просто, и есть хороший шанс, что другие приложения Java будут нормально работать с Java 7 JVM.)

На «доступном» фронте,мы не будем точно знать, какие платформы будут поддерживаться, пока Oracle фактически не выпустит Java 7. Если есть значимые платформы, которые не поддерживаются, есть хороший шанс, что:

  • кто-то перенесет OpenJDK 7 на платформу, или
  • сторонний поставщик (например, IBM) поддержит его в своем предложении Java 7.

(Но я бы не стал делать ставку на кого-либо, поддерживающего Windows pre-XP, а старые версии OSX сомнительны, ИМО.)


Мой совет - не переходить на Java 7 ... пока ... если поддержка старых платформ является важным требованием.

2 голосов
/ 14 марта 2011

Да и нет, Java 7 версии спецификации байт-кода Java.Вы можете скомпилировать более старую версию байт-кода, используя флаг -target, но для использования базовых библиотек java 7 вам потребуется дистрибутив java 7.

Существует проект для предоставления java 7для OS X. Я использовал его, и он работал довольно хорошо для меня. Двоичная Java 7 для Mac

1 голос
/ 14 марта 2011

Нет, у вас не будет всевозможных проблем запуск кода, скомпилированного для Java 7 на виртуальной машине Java 6.У вас будет только одна проблема: код откажется запускаться, потому что на виртуальной машине Java 6, потому что виртуальная машина Java 6 распознает, что номер версии в файлах классов выше, чем все, что знает виртуальная машина Java 6.Вы получите единственную легко диагностируемую ошибку.

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

1 голос
/ 14 марта 2011

Компилятор Java 7 будет компилировать код из JDK 7 и ниже, но JDK 6 и ниже не может скомпилировать код, использующий объекты / классы из JDK 7.

Это тот случай, когда код скомпилирован с компилятору Java 7 требуется Java 7 JVM запустить его?

Да !!!!

Если так, буду ли я иметь все виды проблемы с клиентскими машинами, которые не установлен / доступен JVM 7 для этой платформы (старые OSX, Windows XP и т.д.)?

Да, так как номера версий класса будут больше, чем требуемые номера версий, необходимые для JVM Java 6 и ниже. Клиент должен быть уведомлен об обновлении JVM до Java 7.

...