使用java -jar运行scala应用程序

pai*_*can 33 java scala 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!
Run Code Online (Sandbox Code Playgroud)

这很酷,对,但这有什么结果:

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
Run Code Online (Sandbox Code Playgroud)

哎呀?知道为什么第一个工作而不是第二个?我怎么 - 我的scala?

先生,谢谢,兄弟.

Tho*_*ung 42

如果定义-jar,则忽略-classpath:

Java手册:

-jar使用此选项时,JAR文件是所有用户类的源,并忽略其他用户类路径设置.

您可以在Manifest元数据中定义类路径依赖项.

启动应用程序的最简单方法是使用scala脚本:

scala -classpath target/scaaaaaaaaala-1.0.jar scaaalaaa.App Hello World!
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢个人的笛卡尔或牛顿.:-) (14认同)

Har*_* P. 6

使用sbt-assemblysbt 插件生成包含所有依赖项的jar

\n\n

sbt 组装 github

\n\n

例如添加一行project/plugins.sbt

\n\n

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.10")

\n\n

调整你的build.sbt例如

\n\n
mainClass in (assembly) := Some("mypackage.mysubpackage.MyMainClass")\nassemblyJarName in assembly := "my_assembly.jar"\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后构建你组装的罐子

\n\n

sbt assembly

\n\n

并启动它

\n\n

java -jar ./target/scala-2.12/my_assembly.jar

\n\n

等瞧\xc3\xa0,不再需要这个和那个类路径了。只有 1 罐。

\n


hgr*_*rey 5

只需运行

scala scaaaaaaaaala-1.0.jar 
Run Code Online (Sandbox Code Playgroud)

适用于我2.11.6

  • 这不是问题。当然,您可以使用scala运行它。问题是如何在不使用scala的情况下运行它。 (4认同)