запуск приложений scala с помощью java -jar - PullRequest
33 голосов
/ 28 мая 2010

У меня есть некоторые проблемы с Java. Проверьте это.

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!

Это круто, верно, но как насчет этого:

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

Какого черта? Есть идеи, почему первое работает, а не второе? Как я могу проклясть мою скалу ??

Заранее спасибо, брат.

Ответы [ 4 ]

40 голосов
/ 28 мая 2010

Если вы определили -jar, -classpath игнорируется:

Руководство по Java:

-jar Когда вы используете эту опцию, файл JAR является источником всех пользователей классы и другие пользовательские пути классов настройки игнорируются.

Вы можете определить зависимости classpath в метаданных Manifest .

Самый простой способ запустить приложение - использовать скрипты scala:

scala -classpath target/scaaaaaaaaala-1.0.jar scaaalaaa.App Hello World!
4 голосов
/ 17 августа 2016

Просто работает

scala scaaaaaaaaala-1.0.jar 

у меня работает с 2.11.6

4 голосов
/ 28 мая 2010

Для исполняемого фляги путь к классу должен быть в манифесте фляги. Для получения справки по этому вопросу просмотрите ответы на Stackoverflow: как создать исполняемый файл jar с зависимостями jars .

0 голосов
/ 10 октября 2018

Ниже приведен способ выполнения исполняемого фляги Scala

  • Нам нужна программа Scala, установленная в вашей системе.

  • Здесь сначала дадут путь кувшина и имя кувшина

  • Если вашему коду нужен какой-либо jar зависимостей, сохраните все jar в одном каталоге и укажите путь к нему в команде, как показано ниже после ":".

  • Наконец, дайте имя вашему классу / объекту.

scala -cp "/your/jar/path/jar_name.jar:/your/dependency/jar/path/*" SampleCode

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...