如何使用SBT下载用户提供的Scala版本?

时间:2012-07-24 06:47:34

标签: scala dependencies version sbt sbt-android-plugin

我正在尝试编写一个新类,同时扩展Jan Berkel的Android插件,我希望使用它来提供将整个scala库推送到root用户手机的功能。

到目前为止,我已经使用了已经下载到您计算机的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")会看到我有Scala 2.9.1并在scala-2.9.1文件夹中创建scala-library.xml。

这样做:
makePermission("2.8.1")会看到我没有Scala 2.8.1,下载它并在scala-2.8.1文件夹中创建scala-library.xml。

然而,这样做:
makePermission("3.0.0")会看到我没有Scala 3.0.0,尝试下载它但看到它不存在然后跳过其余部分。

我很困惑如何做TODO部分,所以任何帮助都会受到赞赏。 :D

1 个答案:

答案 0 :(得分:2)

  

我正在尝试编写一个新类,同时扩展Jan Berkel的Android插件

这听起来像是0.7,但我们假设你是在0.12。 你可以依靠sbt本身来获取任何已发布的Scala版本

> ++2.10.2

然后你可以通过查看fullClasspath in Runtime来获取scala-library.jar。从shell开始,它是:

> 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的任务,并在那里提取scala-library.jar的完整路径。