写在前面
以下方法仅仅是解决我的问题并成功运行,如果你的问题没有解决请再查找其他原因。
环境
spring boot 2.7.0 + maven 3.8.4 + jdk 17
已经添加的配置
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version>
<configuration>
<source>17</source>
<target>17</target>
</configuration>
</plugin>
<finalName>${project.artifactId}</finalName>
</build>
没有解决,后给 spring-boot-maven-plugin 增加指定入口类,没有解决。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot-starter-parent.version}</version>
<configuration>
<mainClass>com.xx.xx.xxApplication</mainClass>
</configuration>
</plugin>
考虑无果,使用mvn clean package查看打出来的jar包发现问题。正常jar包的目录结构是:
我的jar包里面缺少BOOT-INF的文件夹,并且缺少xxx.jar.original这个文件,表明 spring-boot-maven-plugin
这个插件并没有被正确配置或者没有被Maven执行。因为 BOOT-INF
文件夹是Spring Boot 特有的,它包含了应用的字节码和依赖库。如果你的JAR文件中没有这个文件夹,那么可能是因为Maven没有执行spring-boot-maven-plugin
。
最终解决:将spring-boot-starter-parent依赖的方式改成父类继承
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
<relativePath/>
</parent>
<groupId>xx.xx.xx</groupId>
<artifactId>xx</artifactId>
<version>xx</version>
......
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version>
<configuration>
<source>17</source>
<target>17</target>
</configuration>
</plugin>
</plugins>
<finalName>${project.artifactId}</finalName>
</build>
</project>
其他没有BOOT-INF 文件夹可能的原因:
如果你在使用Spring Boot Maven插件打包应用程序时,生成的JAR文件中没有BOOT-INF
文件夹,这可能是因为spring-boot-maven-plugin
没有被正确配置或者没有被Maven执行。
BOOT-INF
文件夹是Spring Boot特有的,它包含了应用的字节码和依赖库。如果你的JAR文件中没有这个文件夹,那么可能是因为Maven没有执行spring-boot-maven-plugin
。
请确保你的pom.xml
文件中包含了以下配置:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
然后,你需要运行mvn clean package
或者mvn clean install
命令来打包你的应用。这些命令会执行spring-boot-maven-plugin
,生成包含BOOT-INF
文件夹的JAR文件。
如果你已经做了以上的步骤,但是仍然没有BOOT-INF
文件夹,那么可能是以下原因:
-
你的
pom.xml
文件有错误。检查你的pom.xml
文件,确保所有的标签都正确地关闭了,所有的插件都在<build><plugins>
部分中,所有的配置都在插件的<configuration>
部分中。 -
你的IDE没有正确地更新Maven项目。如果你正在使用IDE(如Eclipse或IntelliJ IDEA),尝试右键点击项目,然后选择"Maven -> Update Project"(Eclipse)或"Maven -> Reload project"(IntelliJ IDEA)。
-
你可能正在尝试运行的JAR文件不是由
spring-boot-maven-plugin
生成的。spring-boot-maven-plugin
会生成一个名为target/{project-name}-{version}.jar
的文件,其中{project-name}
是你的项目名,{version}
是你的项目版本。确保你正在运行的是这个文件,而不是其他的JAR文件。
如果以上的建议都无法解决问题,那么可能存在以下几种情况:
-
你的项目可能不是一个Spring Boot项目。如果你的项目不是Spring Boot项目,那么
spring-boot-maven-plugin
可能无法正确地打包你的应用。你可以检查你的pom.xml
文件,确保它包含了Spring Boot的父POM和依赖。 -
你可能在
pom.xml
文件中重写了Spring Boot Maven插件的默认配置。例如,如果你设置了<packaging>war</packaging>
,那么Maven将会生成一个WAR文件,而不是一个JAR文件。或者,如果你在spring-boot-maven-plugin
的配置中设置了<layout>ZIP</layout>
,那么插件将会生成一个ZIP布局的文件,而不是一个JAR布局的文件。 -
你可能在使用一个不兼容的Maven或Java版本。Spring Boot 2.x需要Java 8或更高版本,以及Maven 3.3或更高版本。你可以通过在命令行中运行
java -version
和mvn -v
来检查你的Java和Maven版本。 -
你的项目可能有其他的Maven插件,这些插件可能影响了
spring-boot-maven-plugin
的行为。你可以检查你的pom.xml
文件,看看是否有其他的插件可能影响到打包过程。 -
你的项目可能有其他的问题,这些问题导致了
spring-boot-maven-plugin
无法正确地打包你的应用。你可以查看Maven的输出,看看是否有其他的错误或警告信息。
如果以上的建议都无法解决问题,那么你可能需要寻求专业的帮助,例如在Stack Overflow上提问,或者联系Spring Boot的支持团队。在你寻求帮助时,记得提供尽可能多的信息,例如你的pom.xml
文件,你的Maven和Java版本,以及你在运行Maven命令时看到的完整输出。