Java Policy: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
Строка 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

Stub.png
Черновик политики Sisyphus
Автор(ы) — viy



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.

см. Java/ClassPathInManifest

Устаревшие макросы.

Макросы %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.