我知道有十几个这样的问题在那里,但我没有找到任何他们的解决方案适合我的情况!
所以,我尝试使用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>
3条答案
按热度按时间nfeuvbwi1#
事实证明,这与Maven和/或Spring-Boot无关。如果其他人可能面临同样的问题,下面是我所做的导致这个问题的事情:
作为部署过程的一部分,我会解压缩jar文件,修改config.properties并再次压缩,似乎由于某种原因(我自己不知道),生成的.jar文件不可执行,并导致上述错误。
我的解决方法不是解压缩.jar文件,而是config.properties用单个命令(如
zip ./project.jar ./config.properties
)替换www.example.com,而project.jar已经在当前路径中。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文件更新了。
68de4m5k3#
这只是意味着我们应该通过如下命令使用no compression:
jar -uvf 0示例应用程序.警告目录到添加
其中“0”表示不使用压缩。
请参见以下位置的“0”选项:https://docs.oracle.com/javase/7/docs/technotes/tools/windows/jar.html#options
这样的方法帮助我添加了包含文件的目录,并且运行Java时没有像主题中那样的错误。