2012-07-24 2 views
2

얀 버켈 (Jan Berkel)의 안드로이드 플러그인을 확장하면서 새로운 클래스를 작성하려고합니다.이 플랫폼을 사용하여 전체 스칼라 라이브러리를 루팅 된 휴대 전화로 푸시하는 기능을 제공하고 싶습니다.SBT를 사용하여 사용자가 제공 한 스칼라 버전을 다운로드하는 방법은 무엇입니까?

지금까지 컴퓨터에 이미 다운로드 한 스칼라의 로컬 버전을 사용하는 코드가 있지만 거기에 없으면 스칼라 버전을 다운로드 할 수 있기를 바랍니다. 예를 들어

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있는 것으로 확인하고 scala-2.9.1 폴더에 스칼라 - Library.xml에 만들 것 여기

코드의 관련 부분입니다 .
makePermission("2.8.1") 것은 내가 스칼라 2.8.1이 다운로드 및 scala-2.8.1 폴더에 스칼라 - Library.xml에하지 않는 것을 볼 수 있습니다 : 이렇게

. 이 일을하지만

:
makePermission("3.0.0") 것은 내가 스칼라 3.0.0이없는 것을 볼 수, 다운로드하지만 NAD 나머지를 건너 존재하지 않는 참조하려고합니다.

나는 어떻게 도와 드릴까요? TODO 부분을 어떻게 처리하는지 궁금합니다. : D

답변

2

을 나는 0.7 SBT 같은 소리 얀 베르 켈의 안드로이드 플러그인

을 확장하면서 새로운 클래스를 작성하려고하지만, 이제 당신은 SBT 0.12에있어 가정하자하고있다. 당신은

> ++2.10.2 

이 그럼 당신은 fullClasspath in Runtime보고 스칼라 - library.jar의 보류를 얻을 수 있습니다 말함으로써 스칼라의 게시 된 버전을 잡아 SBT 자체에 의존 할 수 있습니다. 쉘에서,는 다음과 같습니다

> 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의 전체 경로를 추출합니다.

관련 문제