2014-09-19 2 views
21

Как заставить SBT скомпилировать файлы классов Java 8. Я добавил scalacOptions + = "-target: JVM-1,8", но он дает следующее сообщение об ошибке:Как заставить SBT использовать 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 

Я использую SBT версии 0.15.5.

Я знаю, что я использую Java 8 для компиляции, поскольку я добавил это в build.sbt, но я все еще удивляюсь, почему сбой scalacOptions не получается, и я не знаю, что производит результат.

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

Декомпиляция одного из моих классов просмотра Play показывает, что версия формата должна быть 50 - это не Java 8, поэтому мой ранее опубликованный ответ был неправильным. –

ответ

32

В файле 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

Почему необходимо получить значение параметра 'initialize'? Просто хорошая практика в случае инициализации родительской сборки? (Новое для sbt здесь.) –

+2

Я вижу это много, но не 'javacOptions' только для компиляции исходных файлов Java, в sbt? 'scalacOptions' - это то, что важно для компилятора scalac. – akauppi

+0

Вы также, вероятно, хотите «' scalacOptions: = Seq («- target: jvm-1.8») ', как указывает @akauppi. – Rich

18

Поддержка в scalac для jvm-1.8 была добавлена ​​в 2.11.4.

Версия Scala (2.11.2) не поддерживает -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

Кажется, это правильный ответ. Что делать, если я хочу использовать библиотеку Java, которая скомпилирована для Java 8 и работает только на Java 8, могу ли я использовать ее из моего сгенерированного байт-кода Scala 7? Я думаю, что да. Извините, это другой вопрос, но я пытаюсь использовать библиотеку Java, которая работает только в Java 8 из моего кода Scala. – Phil

Смежные вопросы