2012-07-24 31 views
2

我想寫一個新的類,同時擴展Jan Berkel的Android插件,使用它我想提供將整個scala庫推送到根電話的功能。如何使用SBT下載用戶提供的Scala版本?

到目前爲止,我有一個使用斯卡拉的本地版本,你已經下載到您的計算機代碼,但是,我希望能夠下載一個版本的Scala的,如果它不存在。

這裏是代碼的相關部分:

def makePermission(version: String) { 
    val home = JSystem.getProperty("user.home") 
    val scalaFolder = new JFile(home + "/.sbt/boot/scala-" + version) 

    if (!scalaFolder.exists) { 
     // TODO: Try to download the Scala version in "version" 
    } 

    val permission = new JFile(scalaFolder, "scala-library.xml") 

    if (scalaFolder.exists && !permission.exists) { 
     val writer = new PrintWriter(permission) 
     writer.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>") 
     writer.println("") 
     writer.println("<permissions>") 
     writer.println(" <library") 
     writer.println("  name=\"scala-library-" + version + "\"") 
     writer.println("  file=\"/system/framework/scala-library-" + version + "\"") 
     writer.println(" />") 
     writer.println("</permissions>") 
     writer.close 
    } 
} 

例如,調用我的函數是這樣的:
makePermission("2.9.1")會看到,我有斯卡拉2.9.1,使階-library.xml在scala-2.9.1文件夾。

這樣做:
makePermission("2.8.1")會看到,我沒有做斯卡拉2.8.1,下載它,並讓斯卡拉-library.xml在scala-2.8.1文件夾中。

但是,這樣做:
makePermission("3.0.0")會看到我沒有Scala 3.0.0,嘗試下載它,但看到它不存在和跳過其餘的。

我納悶怎麼做TODO部分,所以任何幫助表示讚賞。 :d

回答

2

我試圖同時延長一月伯克爾的Android插件

這聽起來像是SBT 0.7編寫一個新的類,但讓我們假設你在SBT 0.12。 你可以依靠自身SBT說

> ++2.10.2 

然後你可以通過查看fullClasspath in Runtime得到斯卡拉 - library.jar的保持搶斯卡拉的任何發佈版本。從貝,它是:

> show runtime:full-classpath 
[info] List(Attributed(~/foo/app/target/scala-2.9.2/classes), Attributed(~/foo/library/target/scala-2.9.2/classes), Attributed(/~/foo/.sbt/0.12.0/boot/scala-2.9.2/lib/scala-library.jar)) 

使依賴於fullClasspath in Runtime任務,並提取在那裏的完整路徑斯卡拉 - library.jar。

相關問題