使用 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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 14:35:49  来源:igfitidea点击:

running scala apps with java -jar

javascalajar

提问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.access
scala -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 将被忽略:

Java manual:

Java手册:

-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-assemblysbt plugin to produce a jar containing alldependencies

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

sbt-assembly github

sbt-assembly github

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.sbtwith

调整你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à!

等等!