2009-12-30 28 views
7

Tôi đã gặp khó khăn để có được Buildr để biên dịch dự án Scala 2.8 của tôi và tôi hy vọng một người nào đó có thể đã tìm ra điều này.Biên dịch mã Scala 2.8.x với Apache Buildr

Hiện nay tôi có ứng dụng HelloWorld tiêu chuẩn với một buildfile như sau:

ENV['JAVA_HOME'] = 'C:\Program Files (x86)\Java\jdk1.6.0_17' 
ENV['SCALA_HOME'] = 'C:\scala-2.8.0.Beta1-RC6' 

define "HelloWorld" do 

    #artifact_ns['Buildr::Compiler::Scalac'].library = '2.8.0' 
    require 'buildr/scala' 

    puts Scala.version 

end 

Khi tôi chạy buildr tôi nhận được kết quả như sau:

(trong C:/Users/Travis/eclipse_ws/HelloWorld, phát triển)
2.7.5
Xây dựng HelloWorld
Biên dịch HelloWorld thành C:/Users/Travis/eclipse_ws/HelloWorld/target/classes
Buildr bị hủy bỏ!
← [31mScala biên dịch hỏng:
# ← [0m

Vấn đề đầu tiên là NoClassDefFoundError - nó không thể tìm thấy lớp học chính trình biên dịch scala của. Vấn đề thứ hai là Scala.version đang in ra 2.7.5. Điều này là không chính xác vì đường dẫn SCALA_HOME đang trỏ đến bản phát hành 2.8.

Cuối cùng, việc sử dụng cờ --trace cho tôi thấy rằng Buildr đang tạo ra một lệnh scalac hơi đúng và khi tôi chạy lệnh đó theo cách thủ công, mọi thứ biên dịch. Tôi nói nó phần nào chính xác chỉ vì một số mục cp được nhân đôi. Xem phần sau:

scalac -classpath C: /scala-2.8.0.Beta1-RC6/lib/scala-library.jar; C: /scala-2.8.0.Beta1-RC6/lib/scala -compiler.jar; C: /scala-2.8.0.Beta1-RC6/lib/scala-library.jar; C: /scala-2.8.0.Beta1-RC6/lib/scala-compiler.jar -sourcepath C:/Users/Travis/eclipse_ws/HelloWorld/src/main/scala -d C:/Người dùng/Travis/eclipse_ws/HelloWorld/target/classes -verbose -g C:/Người dùng/Travis/eclipse_ws/HelloWorld/src/main/scala /hw/HelloWorld.scala

Một điều nữa tôi đã cố gắng (nhưng errored ra xây dựng) được thiết lập như sau (mà tôi nghĩ là không cần thiết w/sự hiện diện của SCALA_HOME):

#artifact_ns['Buildr::Compiler::Scalac'].library = '2.8.0' 

Vì vậy, bất kỳ ý tưởng nào?

Dưới đây là danh sách những thông tin hệ thống của tôi: Win 7 64 bit JDK 6 32 bit thiết lập tại địa phương cho buildr nhưng JDK 6 64 bit system-wide Ruby 1.8.6 32 bit Buildr 1.3.5 32 bit Scala 2.8.0.Beta1-RC6

Một điều nữa tôi đang nghĩ đến là cài đặt lại JDK 32 bit của mình và lấy nó ra khỏi thư mục với tên (x86). Tôi đã tìm thấy rằng ốc vít với các tập tin bat Scala mặc dù tôi không chắc chắn nếu điều này là có liên quan đến vấn đề hiện tại của tôi.

Cảm ơn trước!

+0

Tôi không thấy PATH thành Scala nhị phân (tập lệnh, thực sự) đang được đặt. –

+0

Nó được thiết lập trên toàn cầu như là một biến hệ thống mà nên có sẵn bên trong kịch bản ... Tôi sẽ kiểm tra thiết lập nó cục bộ trong kịch bản khi tôi trở lại máy tính ở nhà của tôi. Cảm ơn đã phản ứng nhanh chóng! –

+0

Ngay cả khi tôi chèn dòng sau vào tệp buildfile của tôi, sự cố vẫn tồn tại. ENV ['PATH'] = ENV ['SCALA_HOME'] + '\ bin;' + ENV ['JAVA_HOME'] + '\ bin;' + ENV ['PATH'] –

Trả lời

3

Đã tìm ra. Vấn đề ngớ ngẩn. Trong Buildr (hoặc có thể là tổng quát hơn trong Ruby?), Lời gọi phương thức require phải nằm ở phía trên cùng của tệp (hoặc ít nhất không nằm trong khối xác định).

require 'buildr/scala'

Vì vậy, cả hai NoClassDefFoundError và phiên bản không chính xác hiển thị bởi puts Scala.version được sửa chữa bằng cách này. Sau đây là những gì kịch bản của tôi nên đã xem xét như:

require 'buildr/scala' 

ENV['JAVA_HOME'] = 'C:\Program Files (x86)\Java\jdk1.6.0_17' 
ENV['SCALA_HOME'] = 'C:\scala-2.8.0.Beta1-RC6' 

define 'HelloWorld' do 

    puts Scala.version 

end 

BTW: Buildr có vẻ là khá ngọt ngào (nhanh, ngắn gọn, quy ước về cấu hình, vv) khi bạn tìm những gì bạn đang làm :-)

+0

Tôi rất vui vì bạn đã tìm ra điều này. Cảm ơn bạn đã đăng bài. Tôi đã làm việc này cho một dự án thử nghiệm trên OS X với JRuby và Buildr 1.4.0 (RC) . –

1

Buildr 1.4 có hỗ trợ Scala 2.8 và 1.4.2 sẽ sử dụng 2.8 theo mặc định.

2

Với phiên bản 1.4, tại thời điểm này bạn có thể làm

Buildr.settings.build['scala.version'] = "2.8.0" 
require 'buildr/scala' 

Và nó sẽ sử dụng scala 2.8.

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