#java #rpmbuild
#java #rpmbuild
Вопрос:
У меня есть Java-проект со сборкой rpm с помощью maven. Требуется создать пакеты noarch, но я вижу конкретную arch. Я устанавливаю rpm (4.4.9 или 5.2.0) через macports в MacOSX и запускаю команду из плагина maven rpm:
sudo rpmbuild -bb -v --buildroot / путь / к / проекту / buildroot --target noarch java-поиск-qt.spec Построение целевых платформ: noarch Выполнение (%install): /bin/bash -e /tmp/rpm-tmp.69257 umask 022 cd /opt /local/src/macports/BUILD /bin/rm -rf /путь /к/project /target/rpm /project/buildroot /bin/rm -rf /путь /к/project /target/rpm /project/buildroot '[' -e /path/to/project/target/rpm /project/buildroot ']' mv /путь /к / проекту / target/rpm /project/tmp-buildroot /путь / к / проекту / target/rpm /project /buildroot /opt/local/lib/rpm/brp-сжимать /opt/local/lib/rpm /brp-strip /opt/local/lib/rpm /brp-strip-статический-архив /opt/local/lib/rpm/brp-strip-комментарий-примечание /opt/local/lib/rpm/brp-nobuildroot path Обработка файлов: java-search-qt-1.0.17-1 Поиск обеспечивает: /opt/local/lib/rpm/find-предоставляет Для поиска требуется: /opt/local/lib/rpm/find-requires Требуется (interp): /bin/bash /bin/bash /bin/bash /bin/bash Требуется (проверить): /bin/bash Требуется (предварительно): /bin/bash Требуется (post): /bin/bash Требуется (postun): /bin/bash Проверка наличия неупакованных файлов: /opt/local/lib/rpm/check-files /путь /к/project/target/rpm /project/buildroot Написал: /opt/local/src/macports/RPM/i386/project.i386.rpm
Плагин Maven использует опцию «—target noarch», но rpmbuild полностью игнорирует ее. Ожидаемый файл noarch.rpm, почему rpmbuild создает i386 в версии 4.4.9 и x86?
Обновить
Я нашел один рабочий вариант вызова rpmbuilder, создает файл *.noarch.rpm:
rpmbuild -bb --target noarch-linux-pc project.spec
Другие варианты, файл build *.i386.rpm:
rpmbuild -bb --buildroot / путь / к / buildroot --target noarch-linux-pc project.spec rpmbuild -bb --определяет '_topdir /path /to/topdir' --целевой noarch-linux-pc project.spec
Я не могу понять. Есть идеи?
P.S. Извините за мой английский, для меня это сложный язык.
Ответ №1:
У меня разные версии всего, но в OS X, используя RPM 5.4.14 и rpm-maven-plugin 2.1-alpha-3, я могу создать noarch RPM для Linux, указав:
<needarch>noarch</needarch>
<targetOS>linux</targetOS>
rpm-maven-plugin говорит:
[INFO] Building target platforms: noarch-apple-linux
Из командной строки проверяю пакет, все выглядит нормально:
rpm -qp --qf 'Arch:%{ARCH} OS:%{OS}n' my-rpm-0.0.1-1.noarch.rpm
Arch:noarch OS:linux
… и результат успешно устанавливается в Linux.
Ответ №2:
Я нашел ошибку!
Инструмент maven-rpm-plugin отстой. Этот пакет содержит класс RPMHelper и использует конструктор команд bash. Инструмент rpmbuild требует строгого упорядочения параметров, а этот класс игнорирует все правила. Я изменил порядок параметров, и теперь у меня правильно собран rpm-пакет. Из того, что я вижу, команда codehaus больше не поддерживается. Я думаю, что нам нужен форк на github.
Ответ №3:
У меня нет никакого опыта сборки на MacOSX, но я подумал, что опубликую наш pom.xml
файл здесь в качестве ссылки:
Командная строка maven, которую мы используем в CentOS Linux, является:
mvn clean compile rpm:attached-rpm deploy
Это развертывает наши RPM, а также создает:
target/rpm/mprew-behavior/RPMS/noarch/mprew-behavior-2.12.0s-19068.noarch.rpm
Надеюсь, это немного поможет.
Комментарии:
1. Спасибо, но с плагином проблем нет — бинарный инструмент rpmbuild странно ведет себя при опции ‘—target’
2. Согласно плагину RPM значение по умолчанию равно
noarch
. Какую версию rpmbuild вы используете? МЫ используем RPM версии 4.4.2. mojo.codehaus.org/rpm-maven-plugin/ident-params.html#needarch3. И вы не указываете исходную архитектуру, верно? mojo.codehaus.org/rpm-maven-plugin /…
4. Текущая доступная версия macport rpm — 4.4.9, и я использую ее. Насколько я знаю, последняя версия 5.3.x. Да, я не указываю архитектуру, потому что мне нужен noarch! В Linux работает корректно, в результате я вижу файл *.noarch.rpm. Но только на mac rpmbuild создайте файл *.i386.rpm. Я пытаюсь установить targetArchitecture как noarch, но это игнорируется builder.
5. Похоже, вы все делаете правильно. Извините, что не смог помочь. Это интересная тема. Они используют: `—target ‘noarch-apple-mac os x’ с * с обеих сторон. Удачи. old.nabble.com /…