2012-01-27 21 views
12

¿Cómo se crea el proyecto Scala SWT en SBT?Proyecto Scala SWT con SBT

sé que se puede utilizar repositorios GIT:

RootProject(uri("http://git.eclipse.org/gitroot/platform/eclipse.platform.swt.binaries.git")) 

Pero no sé cómo y si es posible con SWT.

Gracias de antemano, Etam.

EDITAR:

tuve que descargar manualmente. Se compila pero durante la ejecución de recibo no válida error de acceso hilo:

***WARNING: Display must be created on main thread due to Cocoa restrictions. 
[error] (run-main) org.eclipse.swt.SWTException: Invalid thread access 

Incluso si uso:

javaOptions := Seq("-XstartOnFirstThread", "-d64") 

Esta es la clase principal:

import org.eclipse.swt._ 
import org.eclipse.swt.layout._ 
import org.eclipse.swt.widgets._ 

object Main extends App { 
    val display = new Display 
    val shell = new Shell(display) 
    shell.setLayout(new GridLayout()) 
    shell.pack 
    shell.open 
    while (!shell.isDisposed) { 
     if (!display.readAndDispatch) 
      display.sleep 
    } 
    display.dispose 
} 

Gracias de nuevo, Etam.

+0

¿Encontró una solución a este problema? – mariosangiorgio

Respuesta

6

Creo que la manera más fácil es descargar el archivo jar SWT de su plataforma de destino, ponerlo en la carpeta lib/, y funcionará bien.

+0

Estoy tratando de evitar esta solución;). Pero gracias. – Etam

+2

Ahora tengo un problema con el error de acceso a hilos no válido ... ¿Podría ver mi edición? – Etam

2

Encontré el mismo error de acceso al subproceso que usted. Parece provenir de sbt lanzar su aplicación como un subproceso en la misma JVM que el mismo sbt.

Lo resuelto mediante la construcción de un frasco, y luego pasando la aplicación manualmente:

scala -classpath "target/scala-2.9.1/foobar-0.0.1.jar:lib/swt-debug.jar" -J"-XstartOnFirstThread" foo.bar.HelloWorld 

Puede haber una solución más elegante, pero al menos me consiguió en cuanto a ser capaz de ejecutar mi aplicación.

10

Agregar a su build.sbt:

resolvers += "swt-repo" at "http://maven-eclipse.github.io/maven" 

libraryDependencies += { 
    val os = (sys.props("os.name"), sys.props("os.arch")) match { 
    case ("Linux", _) => "gtk.linux.x86" 
    case ("Mac OS X", "amd64" | "x86_64") => "cocoa.macosx.x86_64" 
    case ("Mac OS X", _) => "cocoa.macosx.x86" 
    case (os, "amd64") if os.startsWith("Windows") => "win32.win32.x86_64" 
    case (os, _) if os.startsWith("Windows") => "win32.win32.x86" 
    case (os, arch) => sys.error("Cannot obtain lib for OS '" + os + "' and architecture '" + arch + "'") 
    } 
    val artifact = "org.eclipse.swt." + os 
    "org.eclipse.swt" % artifact % "4.6.1" 
} 

En primer lugar, se sumará un dispositivo de resolución para el repositorio SWT artefacto. A continuación, detectará su versión de SO y descargará un JAR apropiado para ello.

En cuanto al problema de acceso al hilo, lo solucioné en Mac OS X utilizando el JDK 1.6 con él - cuando especifico -XstartOnFirstThread allí, funciona bien. No he encontrado una solución para JDK 1.7.

+0

¿Puede decirme cómo debería configurar la versión correcta de JDK? Cuando 'sbt' comienza, recibo este mensaje' Bienvenido a Scala versión 2.9.1.final (Java HotSpot (TM) 64-Bit Server VM, Java 1.6.0_35) .' pero todavía no funciona para mí. Agregué la dependencia que sugirió y configuré 'javaOptions: = Seq (" - XstartOnFirstThread "," -d64 ")'. – mariosangiorgio

+0

Normalmente lo hago en el nivel bash, tengo un script que hace esto por mí: 'JAVA_HOME =/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home' ' JDK_HOME = $ JAVA_HOME' 'PATH = $ JAVA_HOME/bin: $ PATH', por lo que cuando 'sbt' se ejecuta, recoge el Java predeterminado de' PATH'. – axel22

+0

Sin embargo, parece que ya está usando Java 1.6. No estoy seguro, pero es posible que '-XstartOnFirstThread' no se recoja de' javaOptions'. Normalmente ejecuto mi aplicación por separado a través de script, y no a través de sbt, así que no tuve este problema. ¿Dónde configuras 'javaOptions',' build.sbt' o en el directorio 'project'? – axel22

Cuestiones relacionadas