2011-07-21 9 views
8

Estoy desarrollando una aplicación en Eclipse con Scala y me gustaría crear un .jar. He encontrado tuto para hacer eso, pero usa el paquete scala.tools.nsc y no sé dónde puedo encontrar esto.
Lo he intentado también, para generar el .class y luego con el comando jar cmf .... para generar el .jar pero cuando ejecuto el .jar, ocurre un error. (NoClassFound)
Con sbt lo he intentado también, pero cuando compilo mi proyecto que funciona con eclipse aparecen muchos errores.Generar .jar desde scala

Alguien me puede explicar cómo puedo simplemente crear un .jar con Eclipse u otras herramientas.

+0

corregí 'CMF java' a 'tarro de la recurrente, por favor revise si esto está bien. Y mira faq, meta y barra lateral, cómo editar tu publicación. Diseño, etc. En general, al preguntar debido a un error: ¿Qué hiciste exactamente? ¿Mando? Cut'n'paste it, para evitar errores de transferencia. Copie y pegue el mensaje de error exacto. ¿En qué directorio comenzó el comando, cuál es su estructura de archivos, qué nombre de proyecto eligió, la jerarquía de archivos corresponde a los directorios? ¿Usó 'jar' antes, por ejemplo con' Java' y con cuánto éxito? Gracias. –

Respuesta

3

tarros

Cuando se crea un tarro de sus clases, posiblemente, las dependencias no están incluidos en el frasco. Al ejecutar ese contenedor, debe colocar los archivos jar que contienen las dependencias en el classpath (con el modificador -cp en java). La dependencia más importante es el jar scala-library. Por supuesto, saber lo que NoClassDefFound no encuentra ayudaría.

Sbt

Cuando la construcción de tanques de lastre separado, tal vez no lo tiene dependencias que se han añadido manualmente al proyecto Eclipse? (Nota: no usé sbt).

Maven

He encontrado la manera más clara y sin dolor es ir con Maven solo, o posiblemente experto + IntelliJ IDEA (edición de la comunidad es libre) + Scala Plugin. Funciona muy bien.

Para experto, es necesario adaptar el arquetipo Scala disponible un poco desde las bibliotecas que se refiere no son la versión más reciente, pero aparte de eso, es muy fina.

Aquí es una pom.xml que estoy usando: https://gist.github.com/1096870

utilizar la estructura de carpetas experto estándar (raíz fuente es src/main/Scala) y luego mvn package crea la multa frasco.

+0

tanques para su respuesta .. – Snoopy

+0

@Snoopy: No decir 'gracias', pero Upvote respuestas útiles. Eso, que resuelve mejor su problema (si lo hay) debe marcarse como respuesta aceptada. –

11

Eclipse tiene una opción incorporada para generar jarras ejecutables, pero está bien escondida. Además, no reconoce las firmas principales() de Scala, por lo que deberá crear una clase Java con un método main().

  1. Cree una clase Java con un método main() que simplemente reenvía la llamada a su código Scala.

  2. Luego haga clic derecho en su clase Java recién creada y seleccione: Ejecutar como -> Aplicación Java. Esto creará una configuración ejecutable que luego se usará como parte de su jar ejecutable.

  3. Ahora ya está listo para desenterrar la opción frasco ejecutable desde el menú del Eclipse: Archivo -> Exportar -> Java -> archivo JAR Ejecutable

  4. En el cuadro de diálogo presentado seleccionar la configuración de lanzamiento que haya creado antes (en el paso 2), nombre su jar (myapp.jar), seleccione sus opciones de exportación de dependencia y haga clic en finalizar.

  5. El jar se creará en el espacio de trabajo de Eclipse de forma predeterminada.

  6. Ejecutar el frasco utilizando la línea: Scala myapp.jar

Su pregunta acerca de las imágenes que faltan: Eclipse requiere una actualización manual cuando se añaden o eliminan archivos. Haga clic derecho en su proyecto y seleccione Actualizar.

Esto concluye el tutorial en la interfaz altamente intuitiva de Eclipse.

Nota: Instrucciones para Eclipse versión 3.6.2.

+0

Gracias, pero no funciona ... He creado una clase java con main(). Luego creé el archivo .jar y cuando deseo iniciar el archivo jar, el nombre de mi aplicación aparece en el menú y en el terminal aparece este error: "lang.ClassNotFoundException: scala.ScalaObject" y "java.lang.reflect.InvocationTargetException" y cuando quiero poner en marcha con la línea: Scala myapp.jar tengo este error "permiso denegado" – Snoopy

+0

he instalado una nueva versión sobre el Scala, es por eso que tengo el error "permiso denegado" pero ahora tengo con el línea: scala myapp.jar este error: error: Error de IO durante la decodificación /Users/danymorard/Documents/workspace/myAppl1.jar con UTF-8 – Snoopy

+0

Se admite el lanzamiento de jar utilizando "scala myapp.jar" desde Scala 2.9.0. Parece que tienes instalada una versión anterior que intenta cargar el contenedor como un archivo de script. Intente ejecutar el jar con "java -cp $ SCALA_HOME/lib/scala-library.jar: myapp.jar mypackage.Mymain" – Lex

0
% cat a.scala 
package foo 

object Whee { 
    def main(args: Array[String]): Unit = { 
    println("I'm in a jar")  
    } 
} 
% scalac29 -d whee.jar a.scala 
% scala29 -cp whee.jar foo.Whee 
I'm in a jar 
% 
+0

tanques para la respuesta, pero entiendo nada de lo que está haciendo – Snoopy

+0

Esto no hace que un frasco runable para usted. Solo comprime tu código dentro de un archivo jar. Para hacerlo runable, necesitas hacerlo en un manifiesto, donde defines la clase principal. –

1

utilice los pasos siguientes para el tiempo de ser .Pero esto no es el solution.Better tiempo completo para ir a por SBT tarro de acumulación para la combinación de chispa Scala. Solución temporal usando la clase java, llamando a la clase principal scala. MainClass.java

public class MainClass { 
    public static void main(String[] args) { 
     SampleApp app=new SampleApp(); 
     app.main(args); } 
} 

SampleApp.scala

class SampleApp { 
    def main(args: Array[String]) { 
    println("First Scala SampleApp")} 
} 

exportarlo como un frasco mediante el uso normal de exportación jarra java eligiendo el método principal MainClass. nombre del archivo jar como Sample.jar ejecutarlo en el Cluster mediante el siguiente comando.

/spark/bin/spark-submit --class com.scala.MainClass SampleScala.jar

La salida se puede obtener como: Primera Scala SampleApp

+0

Esto lo hizo por mí. ¡Súper molesto porque Eclipse no reconoce los archivos principales de Scala! – StackG

+0

También tenga en cuenta que creé un nuevo proyecto Java y agregué las bibliotecas de Scala, como se recomienda aquí: http://stackoverflow.com/questions/11413888/exporting-scala-project-as-jar-from-eclipse – StackG