2013-05-14 3 views
1

Когда я упаковываю свой код scala в банку с помощью Eclipse, я не могу запустить указанный файл jar. У меня есть:Запуск Scala Jar

object Hello extends App{ 
     println("Hello World!") 
    } 

и:

public class Runner { 
     public static void main(String[] args) { 
      Hello.main(args); 
     } 
    } 

Я использую затмение упаковать это в работоспособный банку под названием hello.jar. Java -jar hello.jar затем дает:

Exception in thread "main" java.lang.NoClassDefFoundError: scala/App 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:634) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277) 
at java.net.URLClassLoader.access$000(URLClassLoader.java:73) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:212) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
at Hello.main(Hello.scala) 
at Runner.main(Runner.java:4) 
Caused by: java.lang.ClassNotFoundException: scala.App 
at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
... 13 more 

ответ

1

Это потому, что затмение не грузят SCALA-библиотеку с кодом. Более того, вы должны убедиться, что все зависимости находятся в файле манифеста для исполняемого банку. Вот аналогичный вопрос из stackoverflow: running scala apps with java -jar

3

Ваше приложение имеет зависимость от библиотек времени исполнения Scala. Они должны быть доступны, когда приложение запущено, и в настоящее время это не так.

Есть два способа исправить это:

  1. Укажите путь к классу при запуске JAR - удобный как одноразово, но неуклюжий. Запустите java -jar /path/to/yourapp.jar из командной строки и добавьте параметр -cp, который включает в себя путь к библиотеке JAR Scala.
  2. Пакет библиотеки библиотеки Scala в вашем собственном JAR и модифицируйте манифест для ссылки на этот JAR (добавив атрибут - see here). Это требует большей работы с процессом сборки, но тогда это означает, что приложение можно запустить, просто дважды щелкнув по полученному JAR.
Смежные вопросы