2009-12-30 72 views
7

我一直在努力讓Buildr編譯我的Scala 2.8項目,我希望有人可能已經知道了這一點。編譯Scala 2.8.x代碼與Apache Buildr

目前,我有像構建文件標準的HelloWorld應用程序如下:

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 

當我運行buildr我得到以下的輸出:

(在C:/用戶/特拉維斯/ eclipse_ws/HelloWorld,開發)
2.7.5
構建HelloWorld
編譯HelloWorld到C:/ Users/Travis/eclipse_ws/HelloWorld/target/classes
Buildr中止!
←[31mScala編譯器崩潰:
#←[0米

的第一個問題是NoClassDefFoundError的 - 它不能找到Scala編譯器的主類。第二個問題是Scala.version打印出2.7.5。這是不正確的,因爲SCALA_HOME路徑指向2.8版本。

最後,使用--trace標誌顯示Buildr正在生成一個正確的scalac命令,並且當我手動運行該命令時,所有編譯都會生效。我說這只是因爲一些cp條目被複制纔有點正確。參閱以下內容:

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:/ Users/Travis/eclipse_ws/HelloWorld/target/classes -verbose -g C:/ Users/Travis/eclipse_ws/HelloWorld/src/main/scala /hw/HelloWorld.scala

還有一件事我試圖(但出錯了製造商)的設置以下的(我認爲是不需要瓦特/ SCALA_HOME的存在):

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

那麼有什麼想法?

這裏是我的系統信息的快速列表: Win 7的64位 JDK 6的32位本地的buildr設置,但JDK 6的64位全系統 的Ruby 1.8.6 32位 Buildr 1.3.5 32位 Scala 2.8.0.Beta1-RC6

我想要做的另一件事是重新安裝我的32位JDK,並將其與(x86)名稱中的目錄取出。雖然我不確定這是否與當前問題相關,但我發現了Scala bat文件的螺絲。

在此先感謝!

+0

我沒有看到設置Scala二進制文件(腳本,實際上)的路徑。 –

+0

它被全局設置爲一個系統變量,它應該在腳本中可用......我將在我回到家用電腦時測試在腳本中將其設置爲本地。感謝您及時的回覆! –

+0

即使我將以下行插入到我的構建文件中,問題仍然存在。 ENV ['PATH'] = ENV ['SCALA_HOME'] +'\ bin;' + ENV ['JAVA_HOME'] +'\ bin;' + ENV ['PATH'] –

回答

3

想通了。愚蠢的問題。在Buildr中(或者更常見的是Ruby?),require方法調用必須位於文件的頂部(或者至少不在define塊內)。

需要'buildr/Scala的

所以無論是NoClassDefFoundError的和看跌期權Scala.version顯示不正確的版本被修正這個問題。下面是我的腳本應該看起來像:

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似乎是非常甜蜜(快速,簡潔,約定優於配置等),一旦你計算你在做什麼:-)

+0

我很高興你明白了這一點。感謝發佈。我用JRuby和Buildr 1.4.0(RC)爲OS X上的測試項目工作, 。 –

1

Buildr 1.4支持Scala 2.8和1.4.2默認會使用2.8。

2

隨着1.4版本,此刻,你可以做

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

它將使用Scala的2.8。