2009-12-30 10 views
7

He estado luchando para que Buildr compile mi proyecto Scala 2.8 y esperaba que alguien ya lo haya descubierto.Compilar el código de Scala 2.8.x con Apache Buildr

Actualmente tengo la aplicación HelloWorld de serie con un BuildFile como la siguiente:

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 

Cuando corro Buildr me sale el siguiente resultado:

(en C:/Users/Travis/eclipse_ws/HelloWorld, desarrollo)
2.7.5
Edificio HelloWorld
Compilación HelloWorld en C:/Users/Travis/eclipse_ws/HelloWorld/target/classes
Buildr abortado!
← [31mScala compilador estrellado:
# ← [0m

El primer problema es la NoClassDefFoundError - que no puede encontrar la clase principal del compilador de Scala. El segundo problema es que Scala.version está imprimiendo 2.7.5. Esto es incorrecto porque la ruta SCALA_HOME está apuntando a una versión 2.8.

Finalmente, el uso del indicador --trace me muestra que Buildr está generando un comando de scalac algo correcto y cuando ejecuto ese comando manualmente todo se compila. Digo que es algo correcto solo porque algunas entradas de cp están duplicadas. Véase el siguiente:

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

Una cosa más trataba (pero con errores cabo constructor) se ponía lo siguiente (lo cual pensé que no era necesario w/presencia de SCALA_HOME):

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

¿Alguna idea?

Aquí está una lista rápida de la información de mi sistema: Win 7 64 bits JDK 6 32 bit puesto a nivel local para Buildr pero JDK 6 64 bits de Ruby 1.8.6 de todo el sistema de 32 bits Buildr 1.3.5 de 32 bits Scala 2.8.0.Beta1-RC6

Una cosa más que estoy pensando hacer es reinstalar mi JDK de 32 bits y sacarlo del directorio con el (x86) en el nombre. He encontrado los tornillos con los archivos de Scala bat, aunque no estoy seguro de si esto es relevante para mis problemas actuales.

¡Gracias de antemano!

+0

No veo los archivos binarios PATH to Scala (scripts, en realidad) configurados. –

+0

Se establece globalmente como una variable del sistema que debería estar disponible dentro de la secuencia de comandos ... Probaré la configuración local en la secuencia de comandos cuando regrese a la computadora de mi casa. ¡Gracias por la rápida respuesta! –

+0

Incluso cuando inserte la siguiente línea en mi archivo de compilación, el problema persiste. ENV ['PATH'] = ENV ['SCALA_HOME'] + '\ bin;' + ENV ['JAVA_HOME'] + '\ bin;' + ENV ['PATH'] –

Respuesta

3

Lo descubrí. Tonto problema En Buildr (¿o quizás de forma más genérica en Ruby?), La llamada al método require debe aparecer en la parte superior del archivo (o al menos no dentro del bloque de definición).

requieren 'Buildr/Scala'

Así pues, tanto la NoClassDefFoundError y la versión incorrecta mostrada por pone Scala.version fueron corregidos por esto. Lo que sigue es lo que mi script debe haber parecido:

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 

Por cierto: Buildr parece ser bastante dulce (rápida, concisa, la convención sobre configuración, etc.) una vez que averiguar lo que está haciendo :-)

+0

Me alegro de que hayas descubierto esto. Gracias por publicar. Conseguí que esto funcione para un proyecto de prueba en OS X con JRuby y Buildr 1.4.0 (RC) . –

1

Buildr 1.4 tiene soporte para Scala 2.8 y 1.4.2 usará 2.8 de manera predeterminada.

2

Con la versión 1.4, en el momento en que puede hacer

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

y usará Scala 2.8.

Cuestiones relacionadas