2017-06-03 326 views
1

我想在maven項目中的不同模塊之間使用ServiceLoader服務。我有一個名爲iMage的父模塊。在父模塊中有一個名爲jmjrst.main的模塊,它有一個名爲'JmjrstPlugin'的公共抽象類。Maven中不同模塊之間的ServiceLoader和META-INF/services發生器?

然後還有另一個模塊叫做prizm-plugin,它帶有以下類: 公共類HelloWorldPlugin擴展了JmjrstPlugin {...}。我將jmjrst.main添加爲prizm-plugin和vica的依賴項。

爲了使用ServiceLoader,我想使用META-INF/services generator。 添加以下行PRIZM,插件的pom.xml中:

<dependency> 
    <groupId>org.kohsuke.metainf-services</groupId> 
    <artifactId>metainf-services</artifactId> 
    <version>1.1</version> 
    <optional>true</optional> 
</dependency> 

和類HelloWorldPlugin開始這樣的:

@MetaInfServices(JmjrstPlugin.class) 
public class HelloWorldPlugin extends JmjrstPlugin{ ... } 

在上META-INF/services generator網站雲:「當你使用javac在JavaSE6中,META-INF/services/*文件是自動生成的,不需要額外的編譯器開關,該庫也可以正確處理增量編譯。

在我的情況下,什麼都沒有生成。有人可以幫助我嗎?

回答

0

從您的類HelloWorldPlugin的代碼片段中不清楚哪個接口是「合同」。並在您提供的鏈接中:

如果您有多個接口和/或基本類型,則庫無法推斷合同類型。在這種情況下,明確地給它@MetaInfServices所以首先指定合同類型..

你必須確保你希望哪個合同履行,如果父類(ES)實現幾下即可您需要明確指出@MetaInfServices註釋中的哪一個。

這是首先要檢查我的想法。

+0

那裏只有一種基本類型。但我已經試過這種方式: @MetaInfServices(JmjrstPlugin.class) 公共類HelloWorldPlugin擴展JmjrstPlugin {...} 現在仍然成功 –

相關問題