首页 > 解决方案 > 从 Spring Boot jar 运行类文件

问题描述

我有一个 Spring Boot 应用程序 jar

BOOT-INF/  
  classes/  
     com.package.name/  
        SpringEntry.class  
        integration/  
             Integration.class   
  lib/  
     MANIFEST.MF  
META-INF/ 

org.springframework.boot.loader/

这两个文件都有 main 方法。我正在尝试从命令行执行 Integration.class。

清单文件有以下几行

Manifest-Version: 1.0
Implementation-Title: *****
Implementation-Version: 1.0-SNAPSHOT
Built-By: ****
Implementation-Vendor-Id: *****
Spring-Boot-Version: 2.0.3.RELEASE
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.package.name.SpringEntry
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_181
Implementation-URL: *****

部署代码后,我想运行集成文件。从命令行。我无法使用 API 来执行这些功能,因为它是一个非 Web 应用程序。

要运行 springapplication.jar,我必须运行

java -jar springapplication.jar

运行此命令以在集成类上执行代码后,如何从命令行运行集成文件?

如果您需要有关此问题的其他信息,请告诉我。

标签: spring-boot

解决方案


但是编辑 JAR 并更改清单内容(不建议这样做,因为不可重现且容易出错),您不能。

您在这里指定:

开始类:com.package.name.SpringEntry

所以 Spring Boot 将该类用作 Spring Boot 启动类。
创建 JAR 后,您没有已知参数可以从命令行指定另一个类。

作为快速替代方案,您可以在 spring boot maven 插件重新打包您的应用程序时指定此信息:

mvn clean package -Dspring-boot.run.main-class=integration.Integration.class

您还可以使用 Maven 配置文件来更改构建的 jar 名称以清楚地区分它们。

一种更健壮且在运行时配置的替代方法是将这些 Spring Boot 类中定义的特定声明/逻辑移动到依赖于@Profile:@Profile("default")@Profile("integration")或更简单的配置类@Profile("!integration")@Profile("integration")


推荐阅读