2009-12-30 31 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。