使用Apache Buildr编译Scala 2.8.x代码

Tra*_*ger 7 scala buildr

我一直在努力让Buildr编译我的Scala 2.8项目,我希望有人可能已经想到了这一点.

目前我有标准的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
Run Code Online (Sandbox Code Playgroud)

当我运行buildr时,我得到以下输出:

(在C:/ Users/Travis/eclipse_ws/HelloWorld,开发中)
2.7.5
构建HelloWorld将HelloWorld
编译到C:/ Users/Travis/eclipse_ws/HelloWorld/target/classes
Buildr中止了!
←[31mScala编译器崩溃:
#←[0m

第一个问题是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'
Run Code Online (Sandbox Code Playgroud)

那么任何想法?

下面是我的系统信息的快速列表: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文件中的螺丝.

提前致谢!

Tra*_*ger 3

弄清楚了。愚蠢的问题。在 Buildr 中(或者更一般地在 Ruby 中?),require 方法调用必须位于文件顶部(或者至少不在 Define 块内)。

需要“构建器/scala”

因此,NoClassDefFoundError 和 gets 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
Run Code Online (Sandbox Code Playgroud)

顺便说一句:一旦你弄清楚你在做什么,Buildr 似乎就很不错(快速、简洁、约定优于配置等):-)