【问题标题】:How o run a NetBeans-built Scala application jar from command line outside IDE?如何从 IDE 外部的命令行运行 NetBeans 构建的 Scala 应用程序 jar?
【发布时间】:2010-09-12 21:03:10
【问题描述】:

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

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

【问题讨论】:

  • @alexey-romanov,我从那里开始,它没有帮助。我对清单一无所知,我使用 NetBeans IDE(它本身使用 Ant)并依赖它来构建。

标签: scala netbeans


【解决方案1】:

java命令的-jar-classpath是互斥的:你不能做java -jar YourScalaProg.jar -classpath scala-library.jar

如果您想使用 java -jar 运行应用程序,则必须在 jar 清单的 Class-Path 部分中指定完整的类路径。

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

【讨论】:

  • 说“...Java.lang.ClassNotFoundException: Main...”。我的主类(对象)是 Main。
  • 您是否使用了该类的规范名称?规范名称是带有包名的类的名称:org.blah.Main。此外,根据您的操作系统,您必须使用 :; 作为类路径分隔符。
  • 似乎我的 i686 Arch Linux 使用 ':' (因为使用 ';' 会导致打印 java 帮助)。使用规范的主类名称没有帮助。
  • 您使用的确切命令行是什么,您得到的确切错误信息是什么?
  • 我已经成功了。感谢您指出错误消息已更改的事实。解决方案是在类路径中列出所有使用的库。但是我不能只指向一个目录(包含比需要更多的 jar,包括源和 doc jar)吗?
【解决方案2】:

您是否按照Adventures with Scala 博客文章中的说明使用scala-library.jar

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 相同。

【讨论】:

  • 应用程序的主类(对象)是“Main”,带有“main”功能。该项目是“Foobar”。您给出的行既不适用于“Main”,也不适用于“main”,也不适用于“YourClass”的“Foobar”或“foobar”。
  • 我已经成功了。解决方案是在类路径中列出所有使用的库。但是我不能只指向一个目录(包含比需要更多的 jar,包括源和 doc jar)吗?
猜你喜欢
  • 2011-05-16
  • 2022-12-09
  • 1970-01-01
  • 2012-11-19
  • 2013-09-25
  • 1970-01-01
  • 2013-09-25
  • 1970-01-01
  • 2020-04-17
相关资源
最近更新 更多