Я работаю над созданием RPM для Java-программы с помощью Spring Framework.Я пытался понять, почему мои файлы JAR не будут выполняться после установки через RPM.
- Шаги, за которыми я следовал -
- Сборка моей java-программы с использованием Gradle для создания встроенного снимка банок.
- Выполнитьбаночка создана.(Это работает!)
- Создайте файл .spec для использования с
rpmbuild
. - Создайте обороты, используя
rpmbuild
. - Yum локальная установка RPM.
- Запустите банку, установленную через об / мин.(Это не работает.)
- Проблема -
При попытке запустить мой java jar, установленный через rpm, я получаю сообщение об ошибке.
Exception in thread "main" java.lang.IllegalStateException: Failed to get nested archive for entry BOOT-INF/lib/commons-io-2.4.jar
at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive(JarFileArchive.java:108)
at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchives(JarFileArchive.java:86)
at org.springframework.boot.loader.ExecutableArchiveLauncher.getClassPathArchives(ExecutableArchiveLauncher.java:70)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:49)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
Caused by: java.io.IOException: Unable to open nested jar file 'BOOT-INF/lib/commons-io-2.4.jar'
at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:254)
at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:239)
at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive(JarFileArchive.java:103)
... 4 more
Caused by: java.lang.IllegalStateException: Unable to open nested entry 'BOOT-INF/lib/commons-io-2.4.jar'. It has been compressed and nested jar files must be stored without compression. Please check the mechanism used to create your executable jar file
at org.springframework.boot.loader.jar.JarFile.createJarFileFromFileEntry(JarFile.java:282)
at org.springframework.boot.loader.jar.JarFile.createJarFileFromEntry(JarFile.java:262)
at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:250)
... 6 more
Я подумал, что это связано с тем, как rpmbuild
сжимает банки.Причина в том, что когда я строю свой проект Java с использованием Gradle , я могу нормально запускать свои банки.Однако, если я пытаюсь запустить jar из rpmbuild
, который я создаю, я получаю исключение сжатия.
- Мой код -
Небольшая предыстория, идея в том, что я использую Gradle для создания java-jar-файлов, а затем я хотел создатьRPM из банок, которые я создаю, чтобы я мог пойти и установить банки, как rpm.
Поскольку я использую rpmbuild
для создания своих оборотов, это мои файлы спецификаций:
Name: ${NAME}
Version: ${VERSION}
Release: 1%{?dist}
Summary: Sample
AutoReqProv: no
License: GPLv3+
URL:
Source0: ${NAME}-${VERSION}.tar.gz
%description
Sample
%setup -q
%prep
cd ${SCRIPTPATH}
cp -rf ${NAME}/ \$RPM_BUILD_DIR/
%build
%install
rm -rf \$RPM_BUILD_ROOT
mkdir -p \$RPM_BUILD_ROOT/opt/sample/
cp -rf \$RPM_BUILD_DIR/${NAME}/${NAME}-sample-0.0.10.BUILD-SNAPSHOT.jar \$RPM_BUILD_ROOT/opt/sample/sample-tool-1.0/sample-tool.jar
%clean
rm -rf \$RPM_BUILD_ROOT
%files
/opt/sample/
%defattr(-,root,root,-)
%doc
%changelog
Спецификация строится с помощью простого скрипта, который вы просто передаете ${NAME}
и ${VERSION}
через него, чтобы заполнить эти переменные.Также ${NAME}-sample-0.0.10.BUILD-SNAPSHOT.jar
- это мой файл jar, который я пытаюсь запустить.Я могу без проблем запустить встроенную версию jar без rpm, однако попытка запустить версию jar, установленную через rpm, вызывает исключение сжатия.
Я понимаю, что, скорее всего, существуют другие способы создания RPM, в которых не используется rpmbuild
, но я пытаюсь научиться использовать rpmbuild
.В прошлом мне удавалось создавать простые rpm, которые просто выполняют базовые инструкции «Hello World», но Spring Framework, похоже, доставляет мне проблемы.