由于"无法打开嵌套条目"无法运行Spring-Boot jar文件

时间:2017-01-20 04:15:12

标签: java maven spring-boot

我知道有十几个这样的问题,但我没有找到适合我案例的任何解决方案!

所以,我试图使用Maven为一个Spring-Boot项目打包一个jar文件。我使用IntelliJ IDEA创建了整个项目,它在IDE下运行。为了构建包,我从命令行使用mvn package

生成的.jar文件也可以在我的开发机器上运行,但是当我将.jar文件复制到某个原始docker容器时,它会发出以下错误:

Exception in thread "main" java.lang.IllegalStateException: Unable to open nested entry 'BOOT-INF/lib/lucene-highlighter-5.4.1.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

这是我的pom.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>project</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>2.2.0</version>
        </dependency>
    </dependencies>

</project>

2 个答案:

答案 0 :(得分:3)

事实证明,它与Maven和/或Spring-Boot无关。如果其他人可能面临同样的问题,我所做的就是导致这个问题:

作为部署过程的一部分,我将解压缩jar文件,修改config.properties并再次压缩它。似乎由于某种原因(我自己不知道),生成的.jar文件不可执行并导致上述错误。

我的解决方法是不解压缩.jar文件,而只是使用单个命令替换config.properties,例如zip ./project.jar ./config.properties,而project.jar已经在当前路径中。这个有效!

答案 1 :(得分:0)

我也遇到了这个问题,并尝试了以下对我有用的方法。

注意:不要提取并再次构建新的jar。只需提取并更新具有已修改文件的现有jar。

例如,在lab_directory中有一个jar,即myjar.jar

i)移至lab_directory并解压缩myjar.jar(具有dir1 / config.properties文件)
ii)将提取的文件夹中的dir1复制到lab_directory文件夹
iii)修改lab_directory / dir1 / config.properties
iv)在lab_directory中运行以下命令
jar -uf myjar.jar dir1 / config.properties

就是这样。现有的myjar.jar已通过修改后的config.properties文件进行了更新。