gpt4 book ai didi

java - Maven Netbeans 应用程序找不到 ServiceProvider

转载 作者:太空宇宙 更新时间:2023-11-04 11:24:34 25 4
gpt4 key购买 nike

设置:在我们公司,我尝试将基于 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)

API 和实现是使用 <packaging>pom</packaging> 构建的,并且依赖项使用

声明
    <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 定义在其他模块套件中定义的 Service 实现?

更新:似乎传递依赖项没有从实现项目中加载。我能做的是定义一个对所有实现模块具有显式依赖关系的 Netbeans 聚合模块,并将其声明为我的应用程序中的直接依赖关系。通过这种方式加载传递依赖项并找到 ServiceProvider。

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

最佳答案

将实现模块的模块类型更改为 eager。

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

关于java - Maven Netbeans 应用程序找不到 ServiceProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44522777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com