spring-boot - 从 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
运行此命令以在集成类上执行代码后,如何从命令行运行集成文件?
如果您需要有关此问题的其他信息,请告诉我。
解决方案
但是编辑 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")
推荐阅读
- github - 如何转义“#”,使其不会引用 GitHub 评论中的问题?
- ios - AVAsset(url: url).isPlayable 减慢集合视图
- html - Html CSS列表项目符号到图像不起作用
- java - API 'variant.getJavaCompile()' 已过时
- angular - Angular 表单控件不只更新 UI 的值
- google-cloud-functions - 未能配置触发器提供程序/cloud.firestore/eventTypes/document.update
- javascript - React Redux - 减速器突变
- c++ - 为什么常量引用变量不能分配给引用变量但函数可以?
- java - 无法通过 minio 生成的上传链接上传文件
- php - 使用 SSL 刷新页面后会话过期