2012-09-27 16 views
5

के साथ सशर्त स्केलैकऑप्शन I एसबीटी का उपयोग करते हुए स्कैला 2.8, 2.9 और (उम्मीद है कि) 2.10 के लिए क्रॉस-बिल्ड के साथ एक प्रोजेक्ट का उपयोग कर रहा हूं। 2.10 के साथ संकलन करते समय मैं -feature विकल्प जोड़ना चाहता हूं।एसबीटी

दूसरे शब्दों में, जब मैं एक संस्करण 2.10.0 की तुलना में छोटे के साथ संकलन, मैं के रूप में संकलक विकल्प सेट करना चाहते हैं:

scalacOptions ++= Seq("-deprecation", "-unchecked") 

और जब 2.10.0 से अधिक संस्करण या बराबर के साथ संकलन :

scalacOptions ++= Seq("-deprecation", "-unchecked", "-feature") 

क्या यह हासिल करने का कोई तरीका है?

+0

scalaz [निर्माण] पर एक नज़र डालें (https://github.com तो scalaVersion के आधार पर चाल करना चाहिए /scalaz/scalaz/blob/master/project/ScalazBuild.scala#L125) – 4e6

उत्तर

6

क्रॉस-बिल्डिंग के दौरान, स्कैलावर्सन वर्तमान में आपके प्रोजेक्ट के संस्करण के संस्करण को दर्शाता है।

val scalaVersionRegex = "(\\d+)\\.(\\d+).*".r 
... 
scalacOptions <++= scalaVersion { sv => 
    sv match { 
    case scalaVersionRegex(major, minor) if major.toInt > 2 || (major == "2" && minor.toInt >= 10) => 
     Seq("-deprecation", "-unchecked", "-feature") 
    case _ => Seq("-deprecation", "-unchecked") 
} 
6

मैंने पाया यह था यह कर के त्वरित और संक्षिप्त तरीके:

scalaVersion := "2.10.0" 

crossScalaVersions := "2.9.2" :: "2.10.0" :: Nil 

scalacOptions <<= scalaVersion map { v: String => 
    val default = "-deprecation" :: "-unchecked" :: Nil 
    if (v.startsWith("2.9.")) default else default :+ "-feature"    
}