web-dev-qa-db-ja.com

実行中scalaアプリwith Java -jar

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

一体何? 2つ目ではなく最初のはたらく理由は何ですか? scalaをjarする方法は?

兄弟、よろしくお願いします。

33
paintcan

-jarを定義すると、-classpathは無視されます。

Javaマニュアル:

-jarこのオプションを使用すると、JARファイルがすべてのユーザークラスのソースとなり、他のユーザークラスパス設定は無視されます。

マニフェストメタデータ でクラスパスの依存関係を定義できます。

アプリを起動する最も簡単な方法は、scalaスクリプトを使用することです。

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

単に走る

scala scaaaaaaaaala-1.0.jar 

2.11.6で動作します

4
hgrey

実行可能jarの場合、クラスパスはjarのマニフェストにある必要があります。そのためのヘルプについては、 Stackoverflow:依存関係jarを使用して実行可能jarを作成する方法 への回答をご覧ください。

4
Don Roby

以下はScala Executable Jarを実行する方法です

  • システムにscalaをインストールする必要があります。

  • ここでは、最初にjarパスとjar名を指定します

  • コードに依存性jarが必要な場合、すべてのjarを1つのディレクトリに保持し、「:」の後に以下のようなコマンドでこのパスを指定します。

  • 最後に、クラス/オブジェクト名を指定します。

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

0
Nilesh Shinde