如何从IDE以外的命令行运行NetBeans构建的Scala应用程序jar?

问题描述:

我的程序(用Scala 2.8编写)通过NetBeans IDE启动时运行良好。但是,当我尝试从外部运行它时,使用“java jar”,它说“线程中的异常”main“java.lang.NoClassDefFoundError:scala/ScalaObject ...”。把所有的图书馆,包括。与运行的jar相同的目录下的Scala运行时没有帮助。如果我尝试使用scala本身运行jar,它会抱怨它无法将其解码为utf-8(我认为它期望的是scala源而不是jar)。那么我该如何运行一个Scala应用程序呢?如何从IDE以外的命令行运行NetBeans构建的Scala应用程序jar?

更新:对于那些稍后来到这里有同样问题的人,我建议阅读barjak的回答下的评论(包括隐藏的最新内容),答案就在那里。 VonC也提供了一些关于这个主题的有趣链接。

+0

查看http://stackoverflow.com/questions/809138/creating-a-jar-file-from-a-scala-file – 2010-09-12 21:17:59

+0

@ alexey-romanov,我从那里开始,没有帮助。我对清单一无所知,我使用NetBeans IDE(本身使用Ant)并依靠它来构建。 – Ivan 2010-09-12 21:43:31

-jar和java命令的-classpath是相互排斥的:如果你想运行与java -jar您的应用程序,那么全类路径必须在罐子的的Class-Path部分中指定你不能做java -jar YourScalaProg.jar -classpath scala-library.jar

表现。

您可以仅使用-classpath运行您的应用程序,如下所示:java -classpath YourScalaProg.jar:scala-library.jar your.package.MainClass

+0

说“... Java.lang.ClassNotFoundException:Main ...”。我的主类(对象)是Main。 – Ivan 2010-09-12 21:29:32

+0

您是否使用过该类的规范名称?规范名称是前缀包名称的类名称:'org.blah.Main'。另外,根据您的操作系统,您必须使用':'或';'作为类路径分隔符。 – barjak 2010-09-13 08:06:02

+0

似乎我的i686 Arch Linux使用':'(因为使用';'导致java帮助被打印)。使用规范的主类名称没有帮助。 – Ivan 2010-09-13 09:34:24

您是否使用scala-library.jar,如Adventures with Scala博客文章中所述?

java -classpath scala-library.jar:. YourClass 

或:

java -classpath scala-library.jar:yourApp.jar YourClass 

哪里YourClass是是你scalac编译Scala代码。

在SO问题“Creating a jar file from a Scala file”(或博客文章“the not so elegant way of creating an executable jar from scala code”)中可以找到相同的scala-library.jar

+0

该应用程序的主类(对象)是“主”与“主”功能。该项目是“Foobar”。您给出的这些行既不是“Main”,也不是“Main”,也不是“Foobar”,也不是“YourClass”的“foobar”。 – Ivan 2010-09-12 21:24:04

+0

我已经管理。解决方案是在classpath中列出所有使用的库。但是我不能只是指向一个dirctory(包含比需要更多的jar,包括源文件和doc文件)? – Ivan 2010-09-13 12:06:49