我有一个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
到底发生了什么事?
答案 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。