[英]No .class file in the jar when adding a META-INF/services directory
[英]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.