java 由于“无法打开嵌套条目”,无法运行Spring-Boot jar文件

3qpi33ja  于 2022-12-17  发布在  Java
关注(0)|答案(3)|浏览(454)

我知道有十几个这样的问题在那里,但我没有找到任何他们的解决方案适合我的情况!
所以,我尝试使用Maven为Spring-Boot项目打包一个jar文件。我使用IntelliJ IDEA创建了整个项目,它在IDE下运行。为了构建包,我从命令行使用mvn package
生成的.jar文件也可以在我的开发机器上运行,但是当我将.jar文件复制到一些raw 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>
nfeuvbwi

nfeuvbwi1#

事实证明,这与Maven和/或Spring-Boot无关。如果其他人可能面临同样的问题,下面是我所做的导致这个问题的事情:
作为部署过程的一部分,我会解压缩jar文件,修改config.properties并再次压缩,似乎由于某种原因(我自己不知道),生成的.jar文件不可执行,并导致上述错误。
我的解决方法不是解压缩.jar文件,而是config.properties用单个命令(如zip ./project.jar ./config.properties)替换www.example.com,而project.jar已经在当前路径中。

tvmytwxo

tvmytwxo2#

我也面对这个问题,并尝试了以下方法,对我来说效果很好.
注意:不要再次提取并构建新的jar。只需提取并使用修改后的文件更新现有jar即可。
例如,lab_directory中有一个jar文件myjar.jar
i)移动到lab_目录并解压缩myjar.jar(其中包含dir 1/config.properties文件)
ii)将解压缩文件夹中的dir 1复制到lab_directory文件夹
iii)修改实验室目录/目录1/config.properties
iv)在lab_directory中运行以下命令
jar -uf我的jar文件. jar目录1/config.properties
就是这样。现有的myjar.jar已经用修改过的config.properties文件更新了。

68de4m5k

68de4m5k3#

  • 它已被压缩,嵌套的jar文件必须在不压缩的情况下存储。请检查用于创建可执行jar文件的机制 *

这只是意味着我们应该通过如下命令使用no compression
jar -uvf 0示例应用程序.警告目录到添加
其中“0”表示不使用压缩。
请参见以下位置的“0”选项:https://docs.oracle.com/javase/7/docs/technotes/tools/windows/jar.html#options
这样的方法帮助我添加了包含文件的目录,并且运行Java时没有像主题中那样的错误。

相关问题