2017-06-13 6 views
1

Die Einrichtung: In unserer Firma versuche ich eine Ant-basierte Netbeans-Anwendung auf Maven zu migrieren. Ich habe eine Maven-basierte Netbeans-Plattform-Anwendung und zwei Maven-Modul-POM-Projekte mit Netbeans-Modulen.Maven Netbeans Anwendung findet nicht 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 und Implementierung gebaut werden mit <packaging>pom</packaging>, und die Abhängigkeiten deklariert

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

Auf diese Weise verwendet wird, kann ich tauschen leicht aus Implementierungen für Dienstleistungen im API Abschnitt, und bauen eine neue Benutzeroberfläche, wenn Ich möchte nicht mehr bei der Netbeans Platform bleiben.

Das Problem: In MyViewer rufe ich .

Aber es findet keine Implementierung von MyService.

Ich weiß, dass @ServiceProvider Implementierungen findet, wenn sie explizit deklariert wurden (siehe zum Beispiel here), aber das ist nicht was ich will.

Die Frage: Wie kann ich Service-Implementierungen finden, die durch Lookup und ServiceProvider definiert sind, die in anderen Modul-Suites definiert sind?

UPDATE: Es scheint, dass die transitiven Abhängigkeiten nicht aus dem Implementierungsprojekt geladen werden. Was ich tun kann, ist ein Netbeans-Aggregatmodul zu definieren, das explizite Abhängigkeiten zu allen Implementierungsmodulen hat und es als direkte Abhängigkeit in meiner Anwendung deklariert. Auf diese Weise werden transitive Abhängigkeiten geladen und die ServiceProvider gefunden.

Was ich wollen obwohl, ist die "Cluster-Funktionalität importieren" in Ant-basierten Projekten. Es gibt Ziele, die in der official NBM plugin documentation beschrieben werden, und Cluster werden für einzelne Module gebaut, aber ich kenne keine Möglichkeit, auf sie zuzugreifen. Irgendwelche Ideen?

Antwort

0

Ändern Sie den Modultyp des Implementierungsmoduls in eiager.

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

Leider wurde das Problem nicht gelöst. Ich habe meine Frage bearbeitet und aktualisiert. – sarathas

Verwandte Themen