Spring Framework & rpmbuild: не удалось получить архив гнезда для ввода - PullRequest
0 голосов
/ 23 мая 2018

Я работаю над созданием RPM для Java-программы с помощью Spring Framework.Я пытался понять, почему мои файлы JAR не будут выполняться после установки через RPM.

- Шаги, за которыми я следовал -

  1. Сборка моей java-программы с использованием Gradle для создания встроенного снимка банок.
  2. Выполнитьбаночка создана.(Это работает!)
  3. Создайте файл .spec для использования с rpmbuild.
  4. Создайте обороты, используя rpmbuild.
  5. Yum локальная установка RPM.
  6. Запустите банку, установленную через об / мин.(Это не работает.)

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

...