【发布时间】:2014-12-16 09:07:18
【问题描述】:
我有一个 OSGi 项目,我正在使用 Maven。在一个包中,我需要导入 org.osgi.util.tracker.ServiceTracker,并创建一个属性:
...
import org.osgi.util.tracker.ServiceTracker;
...
private ServiceTracker<Object, Object> serviceTracker;
我的依赖项中显然有 org.eclipse.osgi,如下所示(我的 pom.xml 的一部分)。
<dependencies>
<dependency>
<groupId>org.eclipse</groupId>
<artifactId>org.eclipse.osgi</artifactId>
<version>3.8.0.v20120529-1548</version>
<scope>provided</scope>
</dependency>
</dependencies>
在 Eclipse 中,我可以找到类的定义。
public class ServiceTracker<S, T> implements
ServiceTrackerCustomizer<S, T>
{
...
}
但是,当我通过 maven 命令编译我的项目时:
mvn clean install
我得到了错误:
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project <my project name>: Compilation failure: Compilation failure:
[ERROR] <link to my source code dir>/Activator.java:[75,27] type
org.osgi.util.tracker.ServiceTracker does not take parameters
到底发生了什么?
【问题讨论】:
-
你在 pom 或父 pom 中是否有任何其他依赖项?它似乎正在从某个地方获取旧版本的 ServiceTracker 类。
-
或者父pom中的一个依赖(不是托管的,而是直接的依赖)。顺便说一句:您应该使用 org.osgi.core 和 org.osgi.compendium 依赖项进行“提供”范围的编译,而不是实现规范的工件。
-
@NickWilson:一开始我也和你一样想,所以我尝试单独编译——新建一个独立项目,只声明依赖和属性,编译项目。但错误仍然存在。
-
@BalazsZsoldos:此捆绑包将与具有 Equinox 核心的 Karaf 一起部署。因此,在使用 org.osgi.core 编译包时可能会出现很多潜在的运行时错误
标签: java eclipse maven osgi osgi-bundle