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

Материал из ALT Linux Wiki
Строка 57: Строка 57:


==== Сборочные зависимости. ====
==== Сборочные зависимости. ====
viy: явные зависимости BuildRequires: java-X.Y.Z-vendor-devel это ЗЛО.
Программы '''не должны''' иметь явные зависимости BuildRequires: java-X.Y.Z-vendor-devel - это ЗЛО.
 
Рекомендуется всегда собирать программы компилятором наименьшей подходящей версии.
Рекомендуется всегда собирать программы компилятором наименьшей подходящей версии.
Однако если программа будет иметь явную зависимость на такой компилятор,
Однако если программа будет иметь явную зависимость на такой компилятор,

Версия от 22:09, 1 ноября 2008

42px-Wikitext-ru.svg.png
Эту статью следует викифицировать.
Stub.png
Черновик политики Sisyphus
Автор(ы) — viy



ALT Linux Java Policy: Требования к сборке java-приложений

Необходимо соблюдать JPackage Policy

При упаковке приложений для сизифа необходимо соблюдать 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 и ниже.

Пользовательские приложения должны запускаться и работать под всеми поддерживаемыми JVM (java5, java6). Поэтому необходимо следить, чтобы в сборочных скриптах для maven, ant или make компилятор вызывался с параметрами source и target в значении 1.5 или меньше, если код не требует иного, либо использовать

BuildRequires: java-devel-default

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

Для библиотек дополнительно рекомендуется source и target в значении 1.4 или меньше, поскольку java4 JVM еще присутствуют в сизифе, если код это поддерживает.

Исключением являются приложения, явно использующие особенности диалекта java6 и требующие для сборки java6 и выше. Однако и для них рекомендуется явно указывать source и target в значении 1.6, поскольку со временем в сизифе появится java7.

Необходимо избегать зависимостей на конкретную JVM

Установочные зависимости.

viy: явные зависимости 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.

Использование сторонних бинарных сборок крайне не рекомендуется.

Крайне не рекомендуется использование бинарных кодов, взятых откуда либо кроме Сизифа.

  • Пакеты должны собираться из исходных текстов, если это позволяет лицензия.

Если пакет не собран из исходных текстов, его родное место в Дедале.

  • Пакеты не должны использовать при сборке чужие библиотеки.

Очень часто вместе с исходными текстами идут готовые собранные сторонние библиотеки. Пакеты не должны использовать при сборке эти готовые сторонние собранные библиотеки, а должны использовать вместо них библиотеки, собранные в Сизифе. Если какой-то готовой сторонней собранной библиотеки в Сизифе нет, ее необходимо сначала туда собрать.

Другие ограничения.

В 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.

Обсуждение определителя зависимостей и загрузчика классов

[devel] Java: no magic wand / [devel] Java: no magic wand, no magic hammer начиная с http://lists.altlinux.org/pipermail/devel/2008-January/068361.html.