2014-08-27 19 views
8

Tôi đã làm việc trên một dự án yêu cầu tải thư viện gốc và cho đến nay, mọi sự phát triển đã bị hạn chế đối với Linux. Để run dự án của tôi, tôi chỉ đơn giản có thể cho phép forking và sửa đổi java.library.path như sau:SBT: Phương pháp đa nền tảng để đặt java.library.path?

javaOptions in run += "-Djava.library.path=some/common/path:lib/native/linux" 

Câu hỏi của tôi là: Làm thế nào tôi có thể làm như vậy một cách nền tảng, vì vậy mà tôi có thể chia sẻ build của tôi. sbt với nhà phát triển dựa trên Windows. Có nói riêng ba điều mà tôi không thể tìm ra cho đến nay:

  • Tôi biết rằng SBT cho phép để xây dựng đường nền tảng độc lập như "dir1"/"dir2", nhưng tôi không nhận thức được một cách nền tảng để tham gia nhiều đường dẫn (vì nó là : trên Linux và ; trên Windows).
  • Có thể nối thêm lib/native/linuxhoặclib/native/windows phụ thuộc vào nền tảng này không?
  • Cách tiếp cận của tôi ở trên ghi đè java.library.path - bạn có thể nối thêm thay thế không?

Trả lời

5

Vì bạn có thể sử dụng bất kỳ mã Scala, bạn có thể tất nhiên làm

val folderName = 
    if (System.getProperty("os.name").startsWith("Windows")) "windows" else "linux" 

val libPath = Seq("some/common/path", s"lib/native/$folderName").mkString(java.io.File.pathSeparator) 

javaOptions in run += s"-Djava.library.path=$libPath" 

mặc dù điều này không trả lời câu hỏi cuối cùng của bạn.

+0

Điều này có vẻ tốt. Tôi quên đề cập đến rằng tôi vẫn đang sử dụng SBT 0,12 và, nói chung, tôi đã hy vọng cho một giải pháp thuyết bất khả tri. Nhưng tôi nghĩ ý tưởng này cũng hoạt động ở mức 0,12. Tôi vẫn còn có một thời gian khó khăn để sử dụng cú pháp '/' của SBT mặc dù, vì không có chuyển đổi ẩn từ String thành (tôi đoán) File. Nhưng rõ ràng là luôn luôn có công việc xung quanh làm việc đó bằng tay với 'separatorChar'. Và cho mục đích gỡ lỗi: Bất kỳ ý tưởng nào tại sao 'hiển thị các tùy chọn java' luôn trả về' List() '? – bluenote10

+0

Có, điều này sẽ hoạt động tốt trong 0,12. Ngoại trừ, IIRC, nó sử dụng Scala 2.9 để xây dựng cấu hình, vì vậy nội suy chuỗi nên được thay thế bằng '+'. Đối với câu hỏi cuối cùng, tôi không biết. Có thể hỏi nó một cách riêng biệt? –

+2

Điều gì về 'System.getProperty (" java.library.path ")' và tự mình kết nối? –

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