我知道有十几个这样的问题,但我没有找到适合我案例的任何解决方案!
所以,我试图使用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>
答案 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文件进行了更新。