簡體   English   中英

從 Spring 引導 jar 文件運行非主 class

[英]Run a non main class from Spring Boot jar file

我有一個 spring 啟動 jar 文件,里面有一個清單文件,如下所示

Manifest-Version: 1.0
Implementation-Title: myApp
Implementation-Version: 0.1
Built-By: me
Implementation-Vendor-Id: com.myApp
Spring-Boot-Version: 2.0.0.RELEASE
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.myApp.smartlight.BootMongoDBApp
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Created-By: Apache Maven 3.6.1
Build-Jdk: 1.8.0_151

里面是一個名為com.myApp.initiate.Initiator的 class 文件(打包在 jar 內的 BOOT-INF/classes 文件夾下) 我正在嘗試從 Windows 機器上的命令行運行啟動器 class 如下

java -cp myApp.jar com.myApp.initiate.Initiator

但沒有運氣。 我還嘗試在上面的命令中提到類路徑

java -cp "myApp.jar;BOOT-INF/*" com.myApp.initiate.Initiator

但它仍然不起作用。

我究竟做錯了什么?

發起者.java

package com.myApp.initiate.Initiator;

public class Initiator {

    public static void main(String... args) {

        System.out.print("hello");
    }
}

更新:

Initiator class 被打包在 BOOT-INF/classes 文件夾下。 當我在 jar 根目錄復制它並嘗試以下命令時,它起作用了

myApp.jar
|
|--org
|--BOOT-INF
|--META-INF
|--Initiator.class
java -cp myApp.jar Initiator
hello

運行 Spring 引導應用程序 jar 的標准方法是

java -jar myApp.jar

要運行不同的 class,您需要切換到使用org.springframework.boot.loader.PropertiesLauncher並將loader.main屬性添加到命令行以選擇不同的 class。

所以你的清單必須包含:

Main-Class: org.springframework.boot.loader.PropertiesLauncher

然后在命令行上:

java -jar myApp.jar -Dloader.main=com.myApp.initiate.Initiator

查看文檔以獲取更多信息: https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-executable-jar-format.html#executable-jar-property-啟動器功能

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM