我的 spring 应用程序不断使用 maven-jar-plugin 而不是使用 spring-boot-maven-plugin 生成 jar。我还将 Spring Boot 2.7.14 升级到 3.3.3。
我的 pom.xml 中有这个插件:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>3.3.3</version>
<executions>
<execution>
<id>boot-repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
<execution>
<id>boot-build-info</id>
<goals>
<goal>build-info</goal>
</goals>
<configuration>
<additionalProperties>
<java.source>java.version</java.source>
<java.target>java.version</java.target>
</additionalProperties>
</configuration>
</execution>
</executions>
<configuration>
<mainClass>...myApplication</mainClass>
</configuration>
</plugin>
此外,jar 文件没有 boot-inf,仅包含我的应用程序类,没有依赖项。
jar 内的 MANIFEST.MF:
Manifest-Version: 1.0
Created-By: Maven JAR Plugin 3.4.2
Build-Jdk-Spec: 17
Implementation-Title: myApplication
Implementation-Version: 1.1.0-SNAPSHOT
我的应用程序在本地运行没有任何问题,但是当我尝试将其部署到测试环境时,部署失败,并出现 线程“main”java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication中的异常。
最初我的 pom.xml 中也有 maven-jar-plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.4.2</version>
<configuration>
<archive>
<manifest>
<mainClass>..myApplication</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
maven-jar-plugin 实际上是在 MANIFEST.MF 中添加了 mainClass,但后来我认为 spring-boot-maven-plugin 因此没有正确执行,所以我删除了 maven-jar-plugin,但即使删除了 maven- jar-plugin MANIFEST.MF 包含“Created-By: Maven JAR Plugin 3.4.2”。所以我认为由于 maven-jar-plugin,jar 无法使用 boot-inf/lib 和其他文件夹正确生成。即使我删除了 maven-jar-plugin,我也不确定它在项目中的情况。
看起来我在下面添加了 spring-boot-maven-plugin:
`
spring-boot-maven-插件
`当它应该低于 .现在我的 jar 已正确生成,只是不确定为什么 MANIFEST.MF 仍然有“Created-By: Maven JAR Plugin 3.4.2”。