Maven Netbeans应用程序找不到ServiceProvider

时间:2017-06-13 13:20:37

标签: java maven netbeans

设置: 在我们公司,我尝试将基于Ant的Netbeans应用程序迁移到Maven。 我有一个基于Maven的Netbeans平台应用程序和两个包含Netbeans模块的Maven模块POM项目。

|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)

使用<packaging>pom</packaging>构建API和实现,并使用

声明依赖项
    <dependencies>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>mavenprojectapi</artifactId>
            <version>${project.version}</version>
            <type>pom</type>
        </dependency>
    </dependencies>

这样,我可以在API部分轻松交换服务实现,如果我不想再坚持使用Netbeans平台,可以构建一个新的UI。

问题:在MyViewer中,我呼叫Lookup.getDefault().lookup(MyService.class)

但它没有找到MyService的实现。

我知道@ServiceProvider找到实现,如果它们是显式声明的(参见例如here),但这不是我想要的。

问题:我怎样才能找到通过其他模块套件中定义的Lookup和ServiceProvider 定义的服务实现

UPDATE :似乎未从Implementation项目加载传递依赖项。我能做的是定义一个Netbeans聚合模块,它对所有实现模块有明确的依赖关系,并在我的Application中将其声明为直接依赖关系。这样就可以加载传递依赖项并找到ServiceProviders。

想要但是,它与基于Ant的项目中的“导入集群”功能重复。 official NBM plugin documentation中描述了目标,并且为单个模块构建了集群,但我不知道如何访问它们。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

将Implementation模块的模块类型更改为eager。

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