设置: 在我们公司,我尝试将基于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中描述了目标,并且为单个模块构建集群,但我不知道访问它们的方法。有任何想法吗?
不幸的是,这并没有摆脱这个问题。我编辑并更新了我的问题。 – sarathas