7

我一直在努力让 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

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

(在 C:/Users/Travis/eclipse_ws/HelloWorld,开发中)
2.7.5
构建 HelloWorld 将 HelloWorld
编译到 C:/Users/Travis/eclipse_ws/HelloWorld/target/classes
构建器中止!
←[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'

那么有什么想法吗?

这是我的系统信息的快速列表: Win 7 64 bit JDK 6 32 bit set local for buildr but JDK 6 64 bit system-wide Ruby 1.8.6 32 bit Buildr 1.3.5 32 bit Scala 2.8.0.Beta1-RC6

我正在考虑做的另一件事是重新安装我的 32 位 JDK 并将其从名称中带有 (x86) 的目录中取出。尽管我不确定这是否与我当前的问题有关,但我发现 Scala bat 文件存在这些问题。

提前致谢!

4

3 回答 3

3

弄清楚了。愚蠢的问题。在 Buildr 中(或者在 Ruby 中更通用?),require 方法调用必须出现在文件的顶部(或者至少不在定义块内)。

需要“建设者/斯卡拉”

因此,NoClassDefFoundError 和 puts 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

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

于 2009-12-31T02:08:33.227 回答
2

使用 1.4 版,目前您可以

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

它将使用 scala 2.8。

于 2010-09-15T23:12:41.753 回答
1

Buildr 1.4 支持 Scala 2.8,1.4.2 默认使用 2.8。

于 2010-08-01T11:38:30.683 回答