2

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-library.xmlが作成されていることがわかりscala-2.9.1ます。

これ
makePermission("2.8.1")を行うと、Scala 2.8.1がないことがわかります。ダウンロードして、scala-2.8.1フォルダーにscala-library.xmlを作成します。

ただし、これ
makePermission("3.0.0")を行うと、Scala 3.0.0がないことがわかります。ダウンロードしてみてください。ただし、Scala 3.0.0が存在しないことを確認し、残りをスキップしてください。

私はそのTODO部分をどのように行うのか困惑しているので、どんな助けでもありがたいです。:D

4

1 に答える 1

2

Jan BerkelのAndroidプラグインを拡張しながら、新しいクラスを作成しようとしています

これはsbt0.7のように聞こえますが、sbt0.12を使用していると仮定しましょう。公開されているScalaのバージョンを取得するには、sbt自体に依存することができます。

> ++2.10.2

次に、を見てscala-library.jarを入手できますfullClasspath in Runtime。シェルから、それは次のとおりです。

> 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へのフルパスを抽出します。

于 2013-08-22T17:51:30.267 に答える