Java Policy: различия между версиями
Нет описания правки |
|||
Строка 1: | Строка 1: | ||
{{DraftPolicy | {{DraftPolicy | ||
|responsible=viy}} | |responsible=viy}} | ||
Строка 6: | Строка 5: | ||
== ALT Linux Java Policy: Требования к сборке java-приложений == | == ALT Linux Java Policy: Требования к сборке java-приложений == | ||
__TOC__ | __TOC__ | ||
=== Сфера применения === | |||
Данное полиси описывает требования к сборке и упаковке java-приложений и java-библиотек в Сизифе, | |||
и является расширением и толкованием JPackage Policy применительно к ALT Linux. | |||
=== Необходимо соблюдать JPackage Policy === | === Необходимо соблюдать JPackage Policy === | ||
Основное условие упаковки java-библиотек и приложений: | |||
При упаковке приложений для сизифа '''необходимо''' соблюдать JPackage Policy. | При упаковке приложений для сизифа '''необходимо''' соблюдать JPackage Policy. | ||
Строка 26: | Строка 31: | ||
Например, class-файл, собранный под java6 по умолчанию, не будет работать под java5 и ниже. | Например, class-файл, собранный под java6 по умолчанию, не будет работать под java5 и ниже. | ||
Более того, если код приложения собран под java5, но хотя бы одна из используемых им библиотек собрана под | Более того, если код приложения собран под java5, но хотя бы одна из используемых им библиотек собрана под | ||
java6, то и все приложение не сможет работать под java5 и ниже. | java6, то и все приложение не сможет работать под java5 и ниже (class version poisoning). | ||
Пользовательские приложения '''должны запускаться и работать под всеми поддерживаемыми JVM''' (java5, java6). | Пользовательские приложения '''должны запускаться и работать под всеми поддерживаемыми JVM''' (java5, java6). |
Версия от 22:27, 1 ноября 2008
ALT Linux Java Policy: Требования к сборке java-приложений
Сфера применения
Данное полиси описывает требования к сборке и упаковке java-приложений и java-библиотек в Сизифе, и является расширением и толкованием JPackage Policy применительно к ALT Linux.
Необходимо соблюдать JPackage Policy
Основное условие упаковки java-библиотек и приложений: При упаковке приложений для сизифа необходимо соблюдать JPackage Policy.
Оригинал JPackagePolicy можно найти в пакете jpackage-utils (в Сизифе или на www.jpackage.org). Есть перевод JPackagePolicy на русский.
Необходимо обеспечивать максимальную запускаемость на разных JVM
В настоящее время в Сизифе поддерживаются JVM
- java6 (java-1.6.0-sun, java-1.6.0-openjdk),
- java5 (java-1.5.0-sun, java-1.5.0-gcj43).
Также присутствуют неподдерживаемые JVM
- java4 (java-1.4.2-sun, java-1.4.2-blackdown, java-1.5.0-gcj41).
Компиляторы старших версий java по умолчанию создают class-файлы, несовместимые с младшими версиями java. Например, class-файл, собранный под java6 по умолчанию, не будет работать под java5 и ниже. Более того, если код приложения собран под java5, но хотя бы одна из используемых им библиотек собрана под java6, то и все приложение не сможет работать под java5 и ниже (class version poisoning).
Пользовательские приложения должны запускаться и работать под всеми поддерживаемыми JVM (java5, java6). Поэтому необходимо следить, чтобы в сборочных скриптах для maven, ant или make компилятор вызывался с параметрами source и target в значении 1.5 или меньше, если код не требует иного, либо использовать
BuildRequires: java-devel-default
Эта зависимость заведомо поставит в сборочную среду компилятор, который генерирует код, работающий на всех поддерживаемых JVM.
Исключением являются приложения, явно использующие особенности диалекта java6 и требующие для сборки java6 и выше. Однако и для них рекомендуется явно указывать source и target в значении 1.6, поскольку со временем в сизифе появится java7.
Для библиотек дополнительно рекомендуется source и target в значении 1.4 или меньше, поскольку java4 JVM еще присутствуют в сизифе, если их код это поддерживает.
Необходимо избегать зависимостей на конкретную JVM
Установочные зависимости.
Программы не должны иметь явные зависимости Requires: java-X.Y.Z-vendor - это ЗЛО.
В пакете единственно допустимы зависимости вида
Requires: java
Замечание. для указания минимальной версии JVM, под которой может работать программа, следует использовать конструкцию
Requires: java >= 1.x.y
например,
Requires: java >= 1.6.0
Если программа работает под текущую минимальную поддерживаемую JVM (сейчас у нас наименьшая JVM — это java-1.5.0), то рекомендуется писать просто Requires: java без версии.
В старых пакетах вместо Requires: java может встретиться Requires: j2se. Эти provides устарели, поэтому все такие вхождения следует заменить на Requires: java.
Сборочные зависимости.
Программы не должны иметь явные зависимости BuildRequires: java-X.Y.Z-vendor-devel - это ЗЛО.
Рекомендуется всегда собирать программы компилятором наименьшей подходящей версии. Однако если программа будет иметь явную зависимость на такой компилятор, то когда компилятор уйдет в obsolete, программа перестанет собираться. Поэтому зависимость на компилятор java (в пакетах java*-devel) должна быть виртуальной.
Официально рекомендуемая зависимость - это
BuildRequires: java-devel-default
В настоящее время это вызовет установку java-devel = 1.5.0.
В крайне редких случаях исходные тексты программы могут иметь особенности диалекта java6. Только в этом случае допускается указывать версионированную зависимость на компилятор версии не ниже 6:
BuildRequires: java-devel >= 1.6.0
Пакеты из репозиториев jpackage.org желательно сопровождать роботом.
Не желательно собирать в Сизиф java-пакеты из репозиториев jpackage.org а также fedora.org вручную. Для этого есть робот сопровождения. Его можно взять в git, viy/packages/jppimport.git.
Использование сторонних бинарных сборок крайне не рекомендуется.
Крайне не рекомендуется использование бинарных кодов, взятых откуда либо кроме Сизифа.
- Пакеты должны собираться из исходных текстов, если это позволяет лицензия.
Если пакет не собран из исходных текстов, а инсталлирует готовый jar, несмотря на присутствие исходных текстов, то лучше его в Сизиф не ложить (но можно положить в Дедал в ожидании доработки).
- Пакеты не должны использовать при сборке чужие библиотеки.
Очень часто вместе с исходными текстами идут готовые собранные сторонние библиотеки. Пакеты не должны использовать при сборке эти готовые сторонние собранные библиотеки, а должны использовать вместо них библиотеки, собранные в Сизифе. Если какой-то готовой сторонней собранной библиотеки в Сизифе нет, ее необходимо сначала туда собрать.
Другие ограничения.
В MANIFEST.MF не должно быть атрибута Class-Path.
Устаревшие макросы.
Макросы %ant_build %set_classpath %add_classpath объявлены устаревшими. В пакетах конструкции вида %set_classpath /usr/share/java/foo.jar %add_classpath /usr/share/java/bar.jar можно заменить на export CLASSPATH=$(build-classpath foo bar) а %ant_build на %ant.
Ссылки
ALT Linux Java Packaging HOWTO
Руководство по упаковке java пакетов в Сизифе. Вынесено в отдельную страницу.
ALT Linux Java Packaging FAQ
Обсуждение вопросов упаковки java пакетов в Сизифе. Вынесено в отдельную страницу.
Шаблоны spec-файлов
JPackage Spec Template — шаблон spec-файла для java-приложений из JPackage, адаптированный для сизифа.
javalib Spec Template — шаблон spec-файла для java-библиотеки, собираемой с помощью ant.