2014-04-25 29 views
6

Tôi muốn in các lọ phụ thuộc để tôi có thể đặt chúng trong một biến classpath.Làm thế nào để in lọ phụ thuộc để sử dụng trong một biến môi trường?

Tôi có thể tìm nạp chuỗi classpath cho tệp jar phụ thuộc.

Curenttly, tôi có thể sử dụng compile:dependencyClasspath nhưng nó trả về một định dạng cần được chuyển đổi thủ công thành chuỗi đường dẫn lớp.

$ sbt "show compile:dependencyClasspath" 

[info] Set current project to scala-snippets (in build file:/home/tuxdna/work/learn/mine/scala-snippets/) 
[info] List(Attributed(/home/tuxdna/.ivy2/cache/org.apache.lucene/lucene-core/jars/lucene-core-3.0.1.jar), Attributed(/home/tuxdna/.ivy2/cache/com.netflix.rxjava/rxjava-scala/jars/rxjava-scala-0.15.0.jar), Attributed(/home/tuxdna/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.10.4-RC1.jar), Attributed(/home/tuxdna/.ivy2/cache/com.netflix.rxjava/rxjava-core/jars/rxjava-core-0.15.0.jar), Attributed(/home/tuxdna/.ivy2/cache/com.typesafe.akka/akka-actor_2.10/jars/akka-actor_2.10-2.2.3.jar), Attributed(/home/tuxdna/.ivy2/cache/com.typesafe/config/bundles/config-1.0.2.jar), Attributed(/home/tuxdna/.ivy2/cache/org.scala-lang.modules/scala-async_2.10/bundles/scala-async_2.10-0.9.0-M2.jar), Attributed(/home/tuxdna/.ivy2/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.10.3.jar), Attributed(/home/tuxdna/.ivy2/cache/org.scala-lang/scala-actors/jars/scala-actors-2.10.2.jar)) 
[success] Total time: 0 s, completed Dec 17, 2013 4:00:05 PM 

Đây là cách tôi biến nó thành một chuỗi classpath

$ sbt "show compile:dependencyClasspath" | grep -B1 'success' | head -1 | ruby -e 's = STDIN.read; puts s[(s =~ /Attributed(.*?,)/)..-1].split(", ").map { |x| x.sub("Attributed(","").gsub(")", "")}.join(":")' 

/home/tuxdna/.ivy2/cache/org.apache.lucene/lucene-core/jars/lucene-core-3.0.1.jar:/home/tuxdna/.ivy2/cache/com.netflix.rxjava/rxjava-scala/jars/rxjava-scala-0.15.0.jar:/home/tuxdna/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.10.4-RC1.jar:/home/tuxdna/.ivy2/cache/com.netflix.rxjava/rxjava-core/jars/rxjava-core-0.15.0.jar:/home/tuxdna/.ivy2/cache/com.typesafe.akka/akka-actor_2.10/jars/akka-actor_2.10-2.2.3.jar:/home/tuxdna/.ivy2/cache/com.typesafe/config/bundles/config-1.0.2.jar:/home/tuxdna/.ivy2/cache/org.scala-lang.modules/scala-async_2.10/bundles/scala-async_2.10-0.9.0-M2.jar:/home/tuxdna/.ivy2/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.10.3.jar:/home/tuxdna/.ivy2/cache/org.scala-lang/scala-actors/jars/scala-actors-2.10.2.jar 

Làm thế nào chức năng tương tự có thể đạt được bằng SBT?

Ngoài ra, tôi đã cố gắng sử dụng sbt consoleProject để thử và tạo một SBT Task.

Sau đây là cách:

$ sbt 
sbt> consoleProject 
scala> val dcc = (dependencyClasspath in Compile) 
dcc: sbt.TaskKey[sbt.Keys.Classpath] = [email protected] 

Bây giờ tôi không thể tìm ra cách để sử dụng SBT API để lấy danh sách các tập tin. Tôi đã cố gắng hiểu Classpath từ số page này.

Bất kỳ ý tưởng nào về cách tìm nạp danh sách tệp?

Trả lời

14

Mọi tác vụ có thể xác định luồng nhật ký riêng biệt (có tên export) và đổ thông tin vào đó. Tất cả các nhiệm vụ classpath đều làm như vậy.

sbt "export compile:dependencyClasspath" 

sbt "export <...>" > foo sẽ hoạt động, trừ khi bạn có plugin ghi trực tiếp thay vì nhật ký.

Điều này đã bị hỏng trước khi sbt 0.13.2 hoặc 0.13.5 IIRC, nhưng nó sẽ hoạt động ngay bây giờ.

Các vấn đề liên quan