Java/HOWTO: различия между версиями
(→%build) |
(→%build) |
||
Строка 92: | Строка 92: | ||
ant -Dant.build.javac.source=1.4 -Dant.build.javac.target=1.4 <список целей> | ant -Dant.build.javac.source=1.4 -Dant.build.javac.target=1.4 <список целей> | ||
Поскольку в сизифе минимальная версия java это 1.4.2, гнаться за значениями | |||
source и target, меньшими, чем 1.4, не имееет особого смысла. | |||
Если же исходники используют диалект java5, придется указать | |||
ant -Dant.build.javac.source=1.5 -Dant.build.javac.target=1.5 <список целей> | |||
Это позволит иметь код, совместимый с java5 (java4), даже если при компиляции | |||
использовался java6. | |||
=== %install === | === %install === |
Версия от 16:18, 1 ноября 2008
Предварительные сведения
Прежде чем читать данный документ, необходимо ознакомиться с ALTLinux Java Policy и JPackagePolicy. Оригинал JPackagePolicy можно найти в пакете jpackage-utils (в сизифе или на www.jpackage.org). Также доступен Перевод JPackagePolicy на русский.
Общие указания по сборке
Сборка в hasher требует /proc
добавьте allowed_mountpoints=/proc в /etc/hasher-priv/system и --mountpoints=/proc в параметры hasher.
В противном случае попытка сборки в hasher приведет к ошибкам вида:
/usr/lib/jvm/java/jre/bin/java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory error: Bad exit status from /usr/src/tmp/rpm- tmp.68276 (%prep)
Шаблоны spec-файлов
JPackage Spec Template — шаблон spec-файла для java-приложений из JPackage, адаптированный для сизифа.
javalib Spec Template — шаблон spec-файла для java-библиотеки, собираемой с помощью ant.
Определение типа сборочной системы
Тип сборочной системы можно определить по файлам в корневом каталоге проекта.
Наиболее распространённые системы сборки:
Файл | Сборочная система |
---|---|
build.xml | ant |
maven.xml | maven1 |
pom.xml | maven2 |
Существуют и другие системы сборки для java, но из-за их редкости здесь они рассматриваться не будут.
Сборка с помощью ant
%prep
Обычно проекты на ant таскают с собой готовые собранные сторонние библиотеки, необходимые для сборки. Все эти библиотеки необходимо удалить
find . \( -name '*.jar' -or -name '*.zip' \) -exec rm -f {} \;
либо переместить:
find . \( -name '*.jar' -or -name '*.zip' \) -exec mv {} {}.no \;
Пакеты не должны использовать при сборке эти готовые сторонние собранные библиотеки, а должны использовать вместо них библиотеки, собранные в Сизифе. Если какой-то готовой сторонней собранной библиотеки в Сизифе нет, ее необходимо сначала туда собрать.
Пусть, например, до удаления ls ./lib показывало
ls ./lib commons-cli.jar xerces-j.jar
Нам нужно использовать вместо них библиотеки, собранные в Сизифе. Для этого установим в сборочную среду пакеты jakarta-commons-cli и xerces-j2. теперь добавим в проект вместо удаленных библиотек ссылки на библиотеки из Сизифа.
ln -s $(build-classpath commons-cli) ./lib/commons-cli.jar ln -s $(build-classpath xerces-j2) ./lib/xerces-j.jar
Заметим, что в Сизифе jar называется xerces-j2.jar, но в проекте ожидается xerces-j.jar.
%build
смотрим в build.xml, какие там есть цели. Нужная цель скорее всего будет одной из
ant all ant jar javadoc ant dist
Для небольших проектов можно не заниматься наполнением ./lib, а просто перечислить все необходимые библиотеки в переменной CLASSPATH:
export CLASSPATH=%(build-classpath commons-cli xerces-j2) ant -Dbuild.sysclasspath=first dist
В build.xml должны быть заданы параметры компилятора source и target. Если они не заданы, то их лучше указать явно при вызове ant. Например,
ant -Dant.build.javac.source=1.4 -Dant.build.javac.target=1.4 <список целей>
Поскольку в сизифе минимальная версия java это 1.4.2, гнаться за значениями source и target, меньшими, чем 1.4, не имееет особого смысла. Если же исходники используют диалект java5, придется указать
ant -Dant.build.javac.source=1.5 -Dant.build.javac.target=1.5 <список целей>
Это позволит иметь код, совместимый с java5 (java4), даже если при компиляции использовался java6.
%install
Внимательно перечитайте JPackage Policy.
Tips:
- устанавливайте arch-и jvm -независимые публичные jar в %_javadir, arch-зависимые в %_jnidir, jvm-specific в %_javadir-ext.
- не забудьте %name-%version.jar.
- Создавайте симлинк %name.jar и симлинки с другими употребительными именами. Пример
pushd $RPM_BUILD_ROOT%{_javadir} for jar in *-%{version}*; do ln -sf ${jar} `echo $jar| sed "s|jakarta-||g"`; done for jar in *-%{version}*; do ln -sf ${jar} `echo $jar| sed "s|-%{version}||g"`; done popd
- Для больших проектов создавайте поддиректорию %_javadir/%name/.
- Если приложению нужно приватное дерево, размещайте его в %_datadir/%name/.
Сборка с помощью maven1
maven1 является устаревшим, и новые проекты мигрируют на maven2. Поэтому сборка с помощью maven1 рассматриваться не будет.
При необходимости рекомендуется найти в Сизифе пакеты с
BuildRequires: maven-plugins
или
BuildRequires: maven
и провести сборку, используя найденные пакеты как пример.
Сборка с помощью maven2
TODO