簡體   English   中英

如何將特定的 compiled.class 文件(或多個文件)放入 META-INF/services

[英]How to place a particular compiled .class file (or files) into META-INF/services

我想將我編譯的類之一添加到我的 uber-jar 內的META-INF/services文件夾中。 是否需要在maven-shade-plugin中進行配置?

這是需要將文件放入META-INF/services的頁面: https://nightlies.apache.org/flink/flink-statefun-docs-release-3.2/docs/modules/embedded/#defining-an-embedded -模塊

這意味着每個 JAR 都應該在 META_INF/services 資源目錄中包含一個文件 org.apache.flink.statefun.sdk.spi.StatefulFunctionModule,其中列出了它提供的所有可用模塊。

MyClass實現了StatefulFunctionModule ,但我不確定我是否應該單獨放置它,或者將它放置為org/package1/package2/MyClass.class (假設它的 package 路徑是org.package1.package2

看起來META-INF/services中的所有文件都是根據其原始路徑 package 命名的,例如我的 class 將被命名為org.package1.package2.MyClass然后

META-INF/services不包含類,它包含文本文件(以 SPI - 服務提供商接口命名),其中列出了實現該 SPI 的 class 名稱。 這意味着您將擁有一個名為META-INF/services/org.apache.flink.statefun.sdk.spi.StatefulFunctionModule的文件,其內容為:

org.package1.package2.MyClass

或者 - 如果您有多個實現:

org.package1.package2.MyClass
org.package1.package2.MyOtherClass

(即每行一個 class 名字)

通常,您會在src/main/resources/META-INF/services中添加此文件,盡管可能有 Maven 插件可以為您生成它們(雖然我不確定)。

請注意,如果您使用模塊化 Java 項目,您(還)需要在module-info.java其定義為:

module your.modulename {
    // ...
    provides org.apache.flink.statefun.sdk.spi.StatefulFunctionModule
        with org.package1.package2.MyClass; 
}

暫無
暫無

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

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