我试图更改 Spring Boot 类加载器.. 但它不起作用,只打印此消息:
错误:无法找到或加载主类 com.example.MyMainClass
我试过这个解决方案:https ://github.com/dkublik/spring-boot-loader-play
我试图更改 Spring Boot 类加载器.. 但它不起作用,只打印此消息:
错误:无法找到或加载主类 com.example.MyMainClass
我试过这个解决方案:https ://github.com/dkublik/spring-boot-loader-play
如果您使用的是 Spring Boot 2.1.5.RELEASE,以下应该可以工作:
java -cp "yourfile.jar" org.springframework.boot.loader.JarLauncher
请注意,spring-boot-maven-plugin
在 maven 的构建阶段重新打包了原始 jar 文件package
,这会导致 jar 具有不同的内部文件结构。在这个新的/重新打包的 jar 中,您可以在里面找到项目中的类BOOT-INF/classes/
,这与原始 jar 不同,您可以在文件结构的第一级找到它们。该插件将原始 jar 文件保留在文件yourfile.jar.original
夹target
中。
另外,我建议看一下META-INF/MANIFEST.MF
重新打包的 jar 中的文件,它反映了上面的描述。如果您打开此文件,您应该会看到类似于以下内容的内容:
Manifest-Version: 1.0
Implementation-Title: yourproject
Implementation-Version: 1.0.0-SNAPSHOT
Start-Class: com.example.MyMainClass
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Build-Jdk-Spec: 1.8
Spring-Boot-Version: 2.1.5.RELEASE
Created-By: Maven Archiver 3.4.0
Main-Class: org.springframework.boot.loader.JarLauncher
请注意,Main-Class
重新打包的 jar 中的标头的值将始终为org.springframework.boot.loader.JarLauncher
,将其定义为 jar 的入口点。稍后,Spring 将查找标头,从而通过IoC (Inversion of Control)Start-Class
加载您的项目。
欲了解更多信息:
fat jar
. 这样你就可以运行你的application with
java -cp example.jar
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
<configuration>
<finalName>example</finalName>
</configuration>
</plugin>
不会:
java -jar application.jar
为你工作?