2014-09-19 23 views
21

Come posso forzare SBT a compilare i file di classe Java 8. Ho aggiunto scalacOptions + = "-target: jvm-1.8", ma dà il seguente messaggio di errore:Come forzare SBT a utilizzare Java 8?

[error] 'jvm-1.8' is not a valid choice for '-target' 
[error] bad option: '-target:jvm-1.8' 
[error] (compile:compile) Compilation failed 

Sto usando SBT versione 0.15.5.

So che sto usando Java 8 per compilare come ho aggiunto questo a build.sbt, ma mi chiedo ancora perché lo scalacOptions fallisce e non so quale output produce scalac.

initialize := { 
    val _ = initialize.value 
    if (sys.props("java.specification.version") != "1.8") 
    sys.error("Java 8 is required for this project.") 
} 
+0

decompilazione uno dei miei Giocare con classi di visualizzazione rivela la versione del formato di essere 50 - che non è Java 8, quindi la mia risposta precedentemente pubblicato era sbagliata. –

risposta

32

È necessario quanto segue sul file build.sbt.

javacOptions ++= Seq("-source", "1.8", "-target", "1.8", "-Xlint") 

initialize := { 
    val _ = initialize.value 
    if (sys.props("java.specification.version") != "1.8") 
    sys.error("Java 8 is required for this project.") 
} 
+4

Perché è necessario ottenere il valore dell'impostazione 'initialize'? Solo buone pratiche nel caso in cui una build genitore abbia l'inizializzazione? (Nuovo da sbt qui.) –

+2

Lo sto vedendo molto, ma non è 'javacOptions' solo per compilare i file sorgenti Java, all'interno di sbt? 'scalacOptions' è ciò che conta per il compilatore scalac. – akauppi

+0

Probabilmente vuoi anche "' scalacOptions: = Seq ("- target: jvm-1.8") '", come sottolinea @akauppi. – Rich

18

Il supporto in scalac per jvm-1.8 è stato aggiunto in 2.11.4.

La versione di Scala (2.11.2) non supporta l'opzione -target:jvm-1.8.

$ scala -version 
Scala code runner version 2.11.2 -- Copyright 2002-2013, LAMP/EPFL 

$ scala -target 
Usage: -target:<target> 
where <target> choices are jvm-1.5, jvm-1.6, jvm-1.7 (default: jvm-1.6) 

bad option: '-target' 

Usage: scala <options> [<script|class|object|jar> <arguments>] 
    or scala -help 

All options to scalac (see scalac -help) are also allowed. 
+1

Sembra essere la risposta valida. Cosa succede se voglio usare una libreria Java compilata per Java 8 e funziona solo in Java 8, posso usarla dal mio bytecode Scala 7 generato? Immagino che la risposta sia sì. Spiacente, questa è una domanda diversa, ma sto cercando di utilizzare una libreria Java che funziona solo in Java 8 dal mio codice Scala. – Phil

Problemi correlati