2014-09-19 3 views
21

어떻게 SBT를 Java 8 클래스 파일로 강제 컴파일 할 수 있습니까? 나는 scalacOptions 추가 + = "-target : JVM-1.8"하지만 다음과 같은 오류 메시지가 있습니다 : 나는 SBT 버전 0.15.5을 사용하고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 

합니다.

build.sbt에 추가 한대로 Java 8을 사용하여 컴파일하는 것을 알고 있지만 왜 scalacOptions가 실패하고 왜 scalac이 생성하는 출력을 모르는지 궁금합니다.

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

내 Play 뷰 클래스 중 하나를 디 컴파일하면 형식의 버전이 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' 설정 값을 얻는 것이 왜 필요한가? 부모 빌드가 초기화되어있는 경우에 대비하면됩니다. (New to sbt here.) –

+2

나는 이것을 많이보고 있지만, sbt 내에서 Java 소스 파일을 컴파일하기위한'javacOptions'가 아닌가? 'scalacOptions'는 scalac 컴파일러에서 중요합니다. – akauppi

+0

@akauppi가 지적한 것처럼 "scalacOptions : = Seq ("- target : jvm-1.8 ")'"을 원할 수도 있습니다. – Rich

18

jvm-1.8 용 scalac의 지원이 2.11.4에 추가되었습니다.

스칼라 버전 (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 8 용으로 컴파일 된 Java 라이브러리를 사용하고 Java 8에서만 작동하는 경우 생성 된 Scala 7 바이트 코드에서 사용할 수 있습니까? 나는 그 대답이 '예'라고 생각한다. 죄송합니다 다른 질문이지만 내 스칼라 코드에서만 Java 8에서 작동하는 Java 라이브러리를 사용하려고합니다. – Phil

관련 문제