2017-06-13 172 views
1

設置: 在我們公司,我嘗試將基於Ant的Netbeans應用程序遷移到Maven。 我有一個基於Maven的Netbeans平臺應用程序和兩個包含Netbeans模塊的Maven Module POM項目。Maven Netbeans應用程序未找到ServiceProvider

|API (POM project) 
|-APIModule 
    |-MyService.java 
|Implementation (POM project) 
|-ImplModule (dependency on APIModule) 
    |-MyServiceProvider.java (implements MyService) 
|Application (Maven Netbeans Platform Application) (dependency on API and Implementation) 
|-branding 
|-netbeans-app (the application) 
|-viewer 
    |-MyViewer.java (calls Lookup.getDefault().lookup(MyService.class) 

API和實現使用<packaging>pom</packaging>建成,並依賴使用

<dependencies> 
     <dependency> 
      <groupId>${project.groupId}</groupId> 
      <artifactId>mavenprojectapi</artifactId> 
      <version>${project.version}</version> 
      <type>pom</type> 
     </dependency> 
    </dependencies> 

這樣宣佈,我可以很容易地換出實現在API部分服務,並建立是否有新UI我不想再堅持Netbeans平臺。

問題:在MyViewer中,我打電話給Lookup.getDefault().lookup(MyService.class)

但它沒有找到MyService的實現。

我知道@ServiceProvider找到實現,如果它們被明確聲明(例如見here),但這不是我想要的。

問題:如何查找通過查找和ServiceProvider 定義的服務實現,這些實現是在其他模塊套件中定義的?

UPDATE:似乎傳遞依賴不會從Implementation項目加載。我可以做的是定義一個Netbeans聚合模塊,它對所有實現模塊都有明確的依賴關係,並將其聲明爲我的應用程序中的直接依賴項。這種方式傳遞性依賴被加載並找到了ServiceProviders。

雖然我在想要複製了基於Ant的項目中的「導入集羣」功能。在official NBM plugin documentation中描述了目標,並且爲單個模塊構建集羣,但我不知道訪問它們的方法。有任何想法嗎?

回答

0

將Implementation模塊的模塊類型更改爲eager。

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>nbm-maven-plugin</artifactId> 
    ... 
    <configuration> 
     <moduleType>eager</moduleType> 
     ... 
    </configuration> 
</plugin> 
+0

不幸的是,這並沒有擺脫這個問題。我編輯並更新了我的問題。 – sarathas