Sku*_*uge 4 executable scala jar intellij-idea executable-jar
我尝试将我的项目导出为带有IntelliJ 9.0的jar.我的项目在Intellij中编译并运行没有任何问题,但是当我将它写入.jar并打开它时,它将显示错误.
我的主要课程类似于:
package Main
//Imports
object Main{
def main(args: Array[String]) {
println("Main: Hello, world!")
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
现在,在工件窗口中,我创建了一个带有以下内容的.jar:
Main.Mainlib/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我已经仔细检查过所有这些类都在项目中并且是onnly类.请注意它包括lib/scala-compiler.jar和lib/scala-library.jar.
建立项目:java -jar myScalaApp.jar我得到:
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
Run Code Online (Sandbox Code Playgroud)
我知道它没有找到scala类,但我确保它们在那里.还有什么可能是问题,我该如何解决?
我说两件事中有一件出了问题:
scala-library.jar不在你的罐子里; 要么scala-library.jar.我不知道IntelliJ如何构建你的jar:它是否解压所有库jar并将它们与你的代码一起放入一个大jar中,或者它是否将库jar添加到你的大jar中并操纵类路径以获取罐子里的罐子里?
第一点很容易检查:jar -tvf yourJar.jar用于列出jar的内容,或者使用归档查看器以图形方式查看它.请注意,a .jar基本上是a .zip,因此您可以重命名扩展,然后使用可以查看.zip文件的工具.
刚想到第二部分:你能构建一个打印出来的简单Java主类System.getProperty("java.class.path")吗?即使没有Scala类,Java类也应该能够在该jar中运行.
| 归档时间: |
|
| 查看次数: |
3719 次 |
| 最近记录: |