错误:类型org.osgi.util.tracker.ServiceTracker不接受参数

时间:2014-10-21 08:00:00

标签: java eclipse maven osgi osgi-bundle

我有一个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

到底发生了什么事?

1 个答案:

答案 0 :(得分:2)

我怀疑您正在使用Java 7编译代码.OSGi发布了使用未记录的-target jsr14标志编译的类文件。 Javac 7拒绝识别这些类文件中的通用签名。请参阅http://blog.osgi.org/2012/10/43-companion-code-for-java-7.html

此外,您不应该针对Equinox实现进行编译,而是针对OSGi伴随代码jar进行编译。您将需要4.3.1或更高版本。请参阅http://search.maven.org/#artifactdetails|org.osgi|osgi.core|4.3.1|jar