首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从scala文件创建可执行jar的问题

从scala文件创建可执行jar的问题
EN

Stack Overflow用户
提问于 2010-07-21 07:45:49
回答 2查看 3.8K关注 0票数 4

我试着用IntelliJ 9.0作为一个jar输出我的项目。我的项目在Intellij中编译和运行没有问题,但是当我将它写入.jar并打开它时,它将显示一个错误。

我的主要课程是:

代码语言:javascript
运行
复制
package Main

//Imports

object Main{
  def main(args: Array[String]) {
    println("Main: Hello, world!")
    //do stuff
}

现在,在工件窗口中,我使用以下内容创建了一个.jar:

  1. 主要Clas:Main.Main
  2. 类路径:lib/javacsv lib/scala-compiler.jar lib/scala-library.jar lib/scalatest-1.0-test.jar lib/scalatest-1.0.jar lib/tools.jar lib/jtds-1.2.2.jar lib/flex-messaging-common.jar lib/flex-messaging-core.jar lib/spring.jar lib/mysql-connector-java-5.1.7-bin.jar lib/ojdbc14.jar lib/commons-logging.jar lib/postgresql-8.4-701.jdbc3.jar lib/log4j-1.2.15.jar lib/poi-3.6-20091214.jar lib/poi-ooxml-3.6-20091214.jar lib/dom4j-1.6.1.jar lib/poi-ooxml-schemas-3.6-20091214.jar lib/geronimo-stax-api_1.0_spec-1.0.jar lib/xmlbeans-2.3.0.jar lib/rt.jar lib/ifxjdbc.jar lib/db2jcc4.jar

我已经检查了所有这些类是否都在项目中,并且都是项目中唯一的类。注意,它包含lib/scala-compiler.jarlib/scala-library.jar

构建项目:java -jar myScalaApp.jar和我得到:

代码语言:javascript
运行
复制
Exception in thread "main" java.lang.NoClassDefFoundError: scala/ScalaObject
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:675)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:316)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:288)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:374)
    at Main.Main.main(Main.scala)
Caused by: java.lang.ClassNotFoundException: scala.ScalaObject
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:316)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:288)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:374)
    ... 13 more

我知道它没有找到scala类,但我确保了它们的存在。还能有什么问题,我该怎么解决呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-21 07:57:55

我想说的是,有两件事出了问题:

  • scala-library.jar不在你的罐子里;或者
  • 运行时的类路径不包括scala-library.jar

我不知道IntelliJ是如何构建您的jar的:它是将所有的库jar解压到一起,并将它们与您的代码一起发送到一个大jar中,还是将库jar添加到您的大jar中,并操作类路径以获取jar中的jar?

第一点很容易检查:要么使用jar -tvf yourJar.jar列出jar的内容,要么使用存档查看器以图形方式查看它。请注意,.jar基本上是一个.zip,因此您可以重命名扩展名,然后使用一个可以查看.zip文件的工具。

刚刚对第二部分有了一个想法:您能构建一个打印出System.getProperty("java.class.path")的简单Java类吗?即使Scala类不能运行,Java类也应该能够在该jar中运行。

票数 5
EN

Stack Overflow用户

发布于 2011-03-17 11:59:06

至少有三种方法可以做到这一点。(适用于Netbeans,但也应在理念上进行工作)

  • 使用扎贾尔作为解释这里
  • 此页上使用这种思想(不太优雅,但最简单)--从Scala . jar中解压scala目录,并将这个目录添加到jar中。
  • 此页上使用这个思想(对于NB) --实际上是在项目库中添加“scala.for”。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3297188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档