2014-08-27 16 views
8

Stavo lavorando su un progetto che richiede il caricamento di librerie native e, finora, tutto lo sviluppo era limitato a Linux. Al fine di run mio progetto, ho potuto attivare i biforcazione e modificare java.library.path come segue:SBT: modo multipiattaforma per impostare java.library.path?

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

La mia domanda è: come posso fare la stessa cosa in un modo cross-platform, in modo che possa condividere la mia build. sbt con uno sviluppatore basato su Windows. Vi sono in particolare tre cose che non riuscivo a capire finora:

  • so che SBT permette di costruire percorsi indipendenti dalla piattaforma, come "dir1"/"dir2", ma io non sono a conoscenza di un modo cross-platform per unire percorsi multipli (poiché è : su Linux e ; su Windows).
  • È possibile aggiungere lib/native/linuxolib/native/windows in base alla piattaforma?
  • Il mio approccio sopra sovrascrive java.library.path - è possibile aggiungere invece?

risposta

5

Dal momento che è possibile utilizzare qualsiasi codice Scala, si può ovviamente fare

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" 

anche se questo non risponde alla tua ultima domanda.

+0

Questo è bello. Ho dimenticato di dire che sto ancora usando SBT 0.12 e, in generale, speravo in una versione agnostica. Ma penso che questa idea funzioni anche in 0.12. Ho ancora difficoltà ad usare la sintassi '/' di SBT, dal momento che non esiste alcuna conversione implicita da String a (credo) File. Ma ovviamente c'è sempre la soluzione per farlo manualmente con 'separatorChar'. E a scopo di debug: Qualche idea sul perché 'show java-options' restituisca sempre' List() '? – bluenote10

+0

Sì, questo dovrebbe funzionare bene in 0.12. Tranne che IIRC, usa Scala 2.9 per la configurazione di build, quindi l'interpolazione delle stringhe dovrebbe essere sostituita con '+'. Per l'ultima domanda, non lo so. Forse chiedilo separatamente? –

+2

E riguardo 'System.getProperty (" java.library.path ")' e fai da solo la concatenazione? –

Problemi correlati