2015-02-05 32 views
1

我尝试使用sbt-osgi插件,但无法加载它的AutoPlugin,编译器拒绝编译我的代码。由于类型不匹配错误,无法加载SbtOsgi AutoPlugin

首先,我添加插件的最新版本project/plugins.sbt

resolvers += Classpaths.sbtPluginSnapshots 
addSbtPlugin("com.typesafe.sbt" % "sbt-osgi" % "0.8.0-SNAPSHOT") 

在那之后,我将在project/build.properties的SBT版本:

sbt.version=0.13.7 

然后,我创建project/Build.scala具有以下内容:

import sbt._ 
import com.typesafe.sbt.osgi.SbtOsgi 

object Build extends sbt.Build { 
    lazy val fooProject = Project("foo-project", file(".")) 
    .enablePlugins(SbtOsgi) 
} 

但是,这sults以下错误信息:

[info] Loading project definition from .../sbt-osgi-test/project 
[info] Compiling 1 Scala source to .../sbt-osgi-test/project/target/scala-2.10/sbt-0.13/classes... 
[error] .../sbt-osgi-test/project/Build.scala:10: type mismatch; 
[error] found : com.typesafe.sbt.osgi.SbtOsgi.type 
[error] required: sbt.Plugins 
[error]  .enablePlugins(SbtOsgi) 
[error]     ^
[error] one error found 
[error] (compile:compile) Compilation failed 

此错误消息没有任何意义,因为AutoPlugin延伸sbt.Plugins。可能是什么问题呢?

回答

1

的原因的问题是,该SBT-OSGi的插件的0.8.0-快照版本被打破:

% javap -cp ~/.ivy2/cache/scala_2.10/sbt_0.13/com.typesafe.sbt/sbt-osgi/jars/sbt-osgi-0.8.0-SNAPSHOT.jar com.typesafe.sbt.osgi.SbtOsgi$ 
Compiled from "SbtOsgi.scala" 
public final class com.typesafe.sbt.osgi.SbtOsgi$ implements sbt.Plugin { 
    public static final com.typesafe.sbt.osgi.SbtOsgi$ MODULE$; 
    public static {}; 
    public scala.collection.Seq<sbt.Init<sbt.Scope>.Setting<?>> settings(); 
    public scala.collection.Seq<sbt.Init<sbt.Scope>.Setting<?>> projectSettings(); 
    public scala.collection.Seq<sbt.Init<sbt.Scope>.Setting<?>> buildSettings(); 
    public scala.collection.Seq<sbt.Init<sbt.Scope>.Setting<?>> globalSettings(); 
    public com.typesafe.sbt.osgi.OsgiKeys$ OsgiKeys(); 
    public scala.collection.Seq<sbt.Init<sbt.Scope>.Setting<?>> osgiSettings(); 
    public scala.collection.Seq<sbt.Init<sbt.Scope>.Setting<?>> defaultOsgiSettings(); 
} 

人们可以看到,它扩展sbt.Plugin,而不是预期的sbt.Plugins。解决方案是等待上游修复程序。