2014-09-19 23 views
21

Làm cách nào để buộc SBT biên dịch sang các tệp lớp Java 8. Tôi thêm scalacOptions + = "-target: JVM-1.8" nhưng nó mang lại thông báo lỗi sau:Làm thế nào để buộc SBT sử dụng 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 

Tôi đang sử dụng phiên bản 0.15.5 SBT.

Tôi biết tôi đang sử dụng Java 8 để biên dịch khi tôi thêm tệp này vào build.sbt, nhưng tôi vẫn tự hỏi tại sao scalacOptions không thành công và tôi không biết đầu ra của scalac.

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

Việc biên dịch một trong các lớp chế độ xem Play của tôi cho biết phiên bản định dạng là 50 - không phải là Java 8, vì vậy câu trả lời đã đăng trước đó của tôi sai. –

Trả lời

32

Bạn cần những điều sau đây trên tệp build.sbt của mình.

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

Tại sao cần thiết để nhận giá trị của cài đặt 'initialize'? Chỉ cần thực hành tốt trong trường hợp xây dựng cha mẹ đã khởi tạo? (Mới đến sbt ở đây.) –

+2

Tôi thấy điều này rất nhiều, nhưng không phải là 'javacOptions' chỉ để biên dịch các tệp nguồn Java, trong sbt? 'scalacOptions' là những gì quan trọng đối với trình biên dịch scalac. – akauppi

+0

Bạn cũng có thể muốn "' scalacOptions: = Seq ("- target: jvm-1.8") '", như @akauppi chỉ ra. – Rich

18

Hỗ trợ trong scalac cho jvm-1.8 được thêm vào 2.11.4.

Phiên bản Scala (2.11.2) không hỗ trợ tùy chọn -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

Dường như là câu trả lời hợp lệ. Điều gì sẽ xảy ra nếu tôi muốn sử dụng một thư viện Java được biên dịch cho Java 8 và chỉ hoạt động trong Java 8, tôi có thể sử dụng nó từ mã bytecode Scala 7 đã tạo của mình không? Tôi đoán câu trả lời là có. Xin lỗi đây là một câu hỏi khác nhưng tôi đang cố gắng sử dụng một thư viện Java mà chỉ hoạt động trong Java 8 từ mã Scala của tôi. – Phil

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