设置: 在我们公司,我尝试将基于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中描述了目标,并且为单个模块构建了集群,但我不知道如何访问它们。有什么想法吗?
答案 0 :(得分:0)
将Implementation模块的模块类型更改为eager。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>nbm-maven-plugin</artifactId>
...
<configuration>
<moduleType>eager</moduleType>
...
</configuration>
</plugin>