2012-07-24 84 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。

相关问题