Spring Framework& rpmbuild:无法获取条目

时间:2018-05-23 13:37:57

标签: java spring spring-boot rpmbuild

我正在使用Spring Framework为java程序创建RPM。我一直试图理解为什么我的jar文件在通过RPM安装后不会执行。

- 我遵循的步骤 -

  1. 使用Gradle构建我的java程序,以创建jar的构建快照。
  2. 运行创建的jar。 (它有效!)
  3. 创建一个与rpmbuild一起使用的.spec文件。
  4. 使用rpmbuild创建rpm。
  5. 百胜本地安装rpm。
  6. 运行通过rpm安装的jar。 (它不起作用。)
  7. - 问题 -
    当试图通过rpm运行我的java jar时,我收到一个错误。

    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压缩罐子的方式有关。原因是当我使用 Gradle 构建我的java项目时,我能够运行我的jar就好了。但是,如果我尝试从我正在创建的rpmbuild运行jar,我会收到压缩异常。

    - 我的代码 -
    小背景,这里的想法是我正在使用 Gradle 来构建我的java jar然后我想从我创建的jar中创建一个RPM,以便我可以像rpm一样安装jar。

    由于我使用rpmbuild创建我的rpm,因此这些是我的spec文件:

    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版本,但是尝试运行通过rpm安装的jar版本会导致压缩异常。

    我理解很有可能创建不使用rpmbuild的RPM的其他方法,但我正在尝试学习如何使用rpmbuild。在过去,我能够创建简单的rpm,只执行基本的“Hello World”指令,但Spring Framework似乎给我带来了麻烦。

0 个答案:

没有答案