Pregunta ejecutar aplicaciones scala con java -jar


Tengo algunos problemas con el java. Echale un vistazo.

sebastian@sebastian-desktop:~/scaaaaaaaaala$ java -cp /home/sebastian/.m2/repository/org/scala-lang/scala-library/2.8.0.RC3/scala-library-2.8.0.RC3.jar:target/scaaaaaaaaala-1.0.jar scaaalaaa.App

Hello World!

Eso es genial, claro, pero ¿qué tal esto?

sebastian@sebastian-desktop:~/scaaaaaaaaala$ java -cp /home/sebastian/.m2/repository/org/scala-lang/scala-library/2.8.0.RC3/scala-library-2.8.0.RC3.jar -jar target/scaaaaaaaaala-1.0.jar

Exception in thread "main" java.lang.NoClassDefFoundError: scala/Application
 at java.lang.ClassLoader.defineClass1(Native Method)
 at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
 at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
 at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
 at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
 at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
 at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
 at scaaalaaa.App.main(App.scala)
Caused by: java.lang.ClassNotFoundException: scala.Application
 at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
 ... 13 more

Wat el diablos? ¿Alguna idea de por qué la primera funciona y no la segunda? ¿Cómo puedo -jar mi scala?

Gracias de antemano, hermano.


32
2018-05-28 15:07


origen


Respuestas:


Si define -jar el -classpath se ignora:

Manual de Java:

-jar Cuando usas esta opción, el archivo JAR es la fuente de todos los usuarios   clases y otra ruta de clase de usuario   las configuraciones son ignoradas

Puede definir las dependencias classpath en Metadatos manifiestos.

La forma más fácil de iniciar su aplicación es usar los scripts de scala:

scala -classpath target/scaaaaaaaaala-1.0.jar scaaalaaa.App Hello World!

36
2018-05-28 15:18



Para un jar ejecutable, el classpath debe estar en el manifiesto del jar. Para obtener ayuda sobre cómo hacerlo, repase las respuestas a Stackoverflow: Cómo crear un contenedor ejecutable con tarros de dependencia.


4
2018-05-28 15:33



Simplemente corriendo

scala scaaaaaaaaala-1.0.jar 

funciona para mí con 2.11.6


4
2017-08-17 19:27