2014-12-30 23 views
6

Scala 2.10 ve SBT 0.13.2 ile oluştururken, -language:_ olmasını istiyorum, ancak bu Scala 2.9 tarafından tanınmıyor. Çapraz derleme (Conditional scalacOptions with SBT) için farklı scalacOptions ayarları hakkında bir soru var, ancak yaklaşık build.sbt. Çok projeli bir yapı yapıyorum çünkü Build.scala kullanıyorum.Build.scala'yı kullanarak çapraz derleme yaparken Scala sürümü başına farklı scalacOptions nasıl ayarlanır?

Bunu denedim:

def scalacOptionsVersion(v: String) = { 
    Seq(
     "-unchecked", 
     "-deprecation", 
     "-Xlint", 
     "-Xfatal-warnings", 
     "-Ywarn-dead-code", 
     "-target:jvm-1.7", 
     "-encoding", "UTF-8") ++ (
    if (v.startsWith("2.9")) Seq() else Seq("-language:_")) 
    } 

    override val settings = super.settings ++ Seq(
    ..., 
    scalaVersion := "2.10.4", 
    scalacOptions <++= scalaVersion(scalacOptionsVersion), 
    crossScalaVersions := Seq("2.9.2", "2.10.4", "2.11.4"), 
    ... 
) 

ama bir hata alıyorum:

[error] /Users/benwing/devel/lemkit/scala/project/build.scala:29: type mismatch; 
[error] found : sbt.Def.Initialize[Equals] 
[error] required: sbt.Def.Initialize[sbt.Task[?]] 
[error] Note: Equals >: sbt.Task[?], but trait Initialize is invariant in type T. 
[error] You may wish to define T as -T instead. (SLS 4.5) 
[error]  scalacOptions <++= scalaVersion(scalacOptionsVersion), 
[error]         ^
[error] one error found 

Yardım?

SBT yılında
+0

Ne versiyonu? – monkjack

+0

Projem 0.13.2 için tasarlanmıştır. Belki 'build.sbt' kullanarak çok-proje yapıları yapmanın bir yolu var ama nasıl yapılacağını bilmiyorum ve cevap, tüm yapı senaryonuzu değiştirmeyi gerektirmemelidir. –

+0

Sadece söz konusu SBT sürümüne dahil. –

cevap

10

0.13+ bu çalışacaktır: sbt ait

def scalacOptionsVersion(scalaVersion: String) = { 
    Seq(
    "-unchecked", 
    "-deprecation", 
    "-Xlint", 
    "-Xfatal-warnings", 
    "-Ywarn-dead-code", 
    "-target:jvm-1.7", 
    "-encoding", "UTF-8" 
) ++ CrossVersion.partialVersion(scalaVersion) match { 
     case Some((2, scalaMajor)) if scalaMajor == 9 => Nil 
     case _ => Seq("-language:_") 
     } 
} 


val appSettings = Seq(
    scalacOptions := scalacOptionsVersion(scalaVersion.value) 

    // other settings... 
) 
+0

Vay, biz aslında sbt-scoverage kullanıyoruz! Ya da en azından, bu proje içindeydik, ama 2.9 çapraz derleme için yorumlamak zorunda kaldım. Bu sorunun nasıl çözüleceği hakkında herhangi bir fikriniz yoksa sbt-kapsamı 2.9'u desteklemiyor mu? –

+0

sbt eklentisi 0.13 + destekler, skart scalac eklentisi sadece 2.11'i destekler (ve çoğunlukla 2.10'da çalışır ancak resmi desteklenmez). 1.0+ sürümünde, komut satırından etkinleştirirsiniz, bu yüzden seçmeli olarak nasıl etkinleştireceğimi bilmiyorum, düşünmeme izin verin. – monkjack

+0

Teşekkürler! Tahmin edebileceğiniz gibi, sbt-scoverage 0.x kullanıyorum (özellikle 0.99.7.1); ayrıca sbt-tulumlar 0.99.0. Bunlar "addSbtPlugin" kullanılarak eklenir. –