1

我试图更改 Spring Boot 类加载器.. 但它不起作用,只打印此消息:

错误:无法找到或加载主类 com.example.MyMainClass

我试过这个解决方案:https ://github.com/dkublik/spring-boot-loader-play

4

3 回答 3

1

如果您使用的是 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.originaltarget中。

另外,我建议看一下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加载您的项目。

欲了解更多信息:

在 JAR 文件中打包程序

Spring Boot Maven 插件

Spring中的控制反转和依赖注入

于 2019-06-04T22:03:55.197 回答
0

尝试创建一个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>
于 2018-03-12T04:45:44.070 回答
-2

不会:

java -jar application.jar

为你工作?

于 2018-01-17T02:57:21.937 回答