Обнаружение не-1.5 Java-кода при разработке на Mac под 1.6 - PullRequest
4 голосов
/ 21 сентября 2010

Я использую Mac (и, следовательно, Java 1.6) для разработки кроссплатформенного приложения, выпущенного в Java 1.5. Я обнаружил, что Eclipse может обеспечить соблюдение 1.5, и это избавило меня от публикации некоторого кода с синтаксисом @Override в стиле 1.6. Однако обнаружение соответствия eclipse ограничено синтаксисом. Это не будет ловить функции. Например, я использовал метод 1.6 String.isEmpty (), который собирался и запускался без предупреждений в Eclipse и в командной строке моего компьютера Mac, но затем сломался, когда перешел на наши машины 1.5 linux.

Есть ли способ, может быть, что-нибудь, что я мог бы запустить на jar-файлах после сборки, или каким-либо другим способом, чтобы поймать 1.6 isms, которые я проскользнул, не покидая моего mac?

Ответы [ 8 ]

3 голосов
/ 21 сентября 2010

Хороший вопрос.Я предлагаю правильно настроить путь сборки вашего проекта в Eclipse, чтобы он указывал на библиотеки 1.5.

Сначала установите 1.5 JDK или JRE.Затем перейдите в Свойства для вашего проекта Eclipse.В разделе «Путь сборки Java» перейдите на вкладку «Библиотеки» и найдите запись с меткой «Системная библиотека JRE».Отредактируйте эту запись, чтобы она указала на «Альтернативный JRE» (возможно, вам придется нажать «Установленные JRE», чтобы сообщить Eclipse, где JRE находится первым).Выберите свой 1.5 JRE.

. Это должно использовать Java 5 rt.jar, который имеет только 1.5 API.

2 голосов
/ 21 сентября 2010

Если вы используете Maven, то именно для этого анализатор животных .

Если вы разрабатываете проект, который должен поддерживать работу на JDK версии 1.4, но ваша система разработки не имеет JDK версии 1.4, может быть довольно легко случайно использовать методы или классы, которые доступны только в более новой версии из JDK. Например, если вы разрабатываете плагин для Maven 2.0.x на более новой Macintosh .

Анализатор животных может проверять классы и сигнатуры методов, которые использует ваш скомпилированный код, и проверять, что вы используете только те классы и сигнатуры, которые доступны в целевом API.

1 голос
/ 21 сентября 2010

Что мешает вам использовать 1.5 версию Java на Mac Box.У меня есть машина Mac, и у нее есть обе версии: Java 1.5 и 1.6.В случае, если вы не можете найти его местоположение, по адресу: /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home

0 голосов
/ 21 сентября 2010

Я использую DependencyFinder для этой цели.Сначала он анализирует байт-код всех классов в моем jar-файле и извлекает все зависимости.В результате создается XML-отчет, содержащий все классы, конструкторы, методы и атрибуты-члены, на которые ссылается мое приложение.

Этот XML-отчет затем фильтруется в два этапа:

  1. Храните только классы, конструкторы, методы и атрибуты-члены в пространствах имен, которые я хочу проверить.В моем случае java.* и javax.*.
  2. Исключить все классы, конструкторы, методы и атрибуты-члены, которые отображаются в «белом списке», в котором перечислены все допустимые символы для данного выпуска JDK (например, 1,5)

Если итоговый отчет после фильтрации содержит какой-либо класс, конструктор, метод или атрибут члена (т. Е. Если он не пустой), то сборка прерывается - это означает, что выиспользование API, не поддерживаемых вашей целевой версией JDK.

Звучит немного многословно, но на практике работает очень хорошо и не зависит от ваших настроек IDE (что непрактично, когда несколько разработчиков работают над одним проектом).У меня есть макрос ant, который автоматизирует эту задачу, хотя для этого решения ant, разумеется, не требуется.

0 голосов
/ 21 сентября 2010

Если вы обновились до OSX 10.6 с версии 10.5, у вас должен быть установлен JDK v1.5 вместе с JDK 1.6, в противном случае вы можете загрузить его с Apple .

Затем вы можете собрать приложение, используя ant и JDK 1.5. Обратите внимание, что ant зависит от значения, установленного для переменной среды JAVA_HOME.

Например, вы можете отредактировать ваш / Users / name / .bash_profile , чтобы включить эти значения в зависимости от фактического пути, где установлены ваши JDK:

JAVA_HOME_14=/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Home
JAVA_HOME_15=/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home
JAVA_HOME_16=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home

export JAVA_HOME=$JAVA_HOME_15
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin

Поэтому, когда вам нужно переключиться на JDK 1.6, просто поменяйте

export JAVA_HOME=$JAVA_HOME_15

с:

export JAVA_HOME=$JAVA_HOME_16
0 голосов
/ 21 сентября 2010

Если вы компилируете через javac как обычно, есть параметр командной строки -source release Java Oracle doc , который определяет версию принятого исходного кода.

Таким образом, для сборки только с использованием 1.5 используйте -source 5 или -source 1.5

0 голосов
/ 21 сентября 2010

Единственное, что действительно нужно сделать, это установить 1.5 JDK и скомпилировать его.Если вы не можете установить старую версию Java на OS X, то установите VirtualBox, установите Linux и установите Java на нем.Это похоже на умственную вещь - это, вероятно, - это умственная вещь, которую нужно сделать - но на самом деле это довольно просто, и это дает вам абсолютно водонепроницаемую структуру.

0 голосов
/ 21 сентября 2010

Этот ответ является хаком и полностью не проверен, но он должен работать.

Когда Eclipse компилирует ваш код, он использует rt.jar и tools.jar, принадлежащие текущей и / или указанной JRE.Вы можете скопировать свой «обычный» JDK в новый каталог и заменить JAR-файлы из дистрибутива Linux / Windows 1.5.Добавьте эту JRE в Eclipse (в настройках) в качестве альтернативы и переключайтесь на нее, когда вы хотите проверить свой код.

...