使用 java -jar 运行 Scala 应用程序
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/2930146/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
running scala apps with java -jar
提问by paintcan
I got some problems with the java. Check it out.
我在 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
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!
That's cool, right, but how bout this:
这很酷,对,但是如何:
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
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.accessscala -classpath target/scaaaaaaaaala-1.0.jar scaaalaaa.App Hello World!
0(URLClassLoader.java:58)
at java.net.URLClassLoader.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.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 the heck? Any idea why the first works and not the 2nd? How do I -jar my scala??
见鬼了?知道为什么第一个有效而不是第二个吗?我如何 -jar 我的 Scala?
My thanks in advance, brother.
我先谢谢你,兄弟。
采纳答案by Thomas Jung
If you define -jar the -classpath is ignored:
如果您定义 -jar,则 -classpath 将被忽略:
-jar When you use this option, the JAR file is the source of all user classes, and other user class path settings are ignored.
-jar 使用此选项时,JAR 文件是所有用户类的来源,其他用户类路径设置将被忽略。
You can define the classpath dependencies in the Manifest metadata.
您可以在Manifest 元数据中定义类路径依赖项。
The easiest way to start your app is using the scala scripts:
启动应用程序的最简单方法是使用 scala 脚本:
scala scaaaaaaaaala-1.0.jar
回答by Don Roby
For an executable jar, the classpath should be in the jar's manifest. For help on doing that, look through the answers to Stackoverflow: How to create an executable jar with dependancy jars.
对于可执行 jar,类路径应该在 jar 的清单中。有关这样做的帮助,请查看Stackoverflow: How to create an executable jar with dependency jars的答案。
回答by hgrey
Simply running
简单地运行
mainClass in (assembly) := Some("thepackage.TheMainClass")
assemblyJarName in assembly := "my_assembly.jar"
works for me with 2.11.6
2.11.6 对我有用
回答by Nilesh Shinde
Below is the way to execute the Scala Executable Jar
下面是执行 Scala Executable Jar 的方法
We need scala installed in your system.
Here first will give the jar path and jar name
If your code needs any dependency jar then keep all jar in one directory and give a path of this in command like below after the ":".
- At last give your class/object name.
我们需要在您的系统中安装 scala。
这里首先会给出jar路径和jar名称
如果您的代码需要任何依赖 jar,那么将所有 jar 保存在一个目录中,并在命令中的“:”之后给出一个路径,如下所示。
- 最后给出你的类/对象名称。
scala -cp "/your/jar/path/jar_name.jar:/your/dependency/jar/path/*" SampleCode
scala -cp "/your/jar/path/jar_name.jar:/your/dependency/jar/path/*" SampleCode
回答by Hartmut P.
use sbt-assembly
sbt plugin to produce a jar containing alldependencies
使用sbt-assembly
sbt 插件生成一个包含所有依赖项的 jar
e.g. add a line in project/plugins.sbt
:
例如添加一行project/plugins.sbt
:
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.10")
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.10")
adjust your build.sbt
with
调整你build.sbt
的
then build your assembled jar with
然后用
sbt assembly
sbt assembly
and launch it with
并启动它
java -jar ./target/scala-2.12/my_assembly.jar
java -jar ./target/scala-2.12/my_assembly.jar
Et voilà!
等等!