加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 18:14:01 所属栏目:安全 来源:网络整理
导读:我尝试将我的项目导出为带有IntelliJ 9.0的jar.我的项目在Intellij中编译并运行没有任何问题,但是当我将它写入.jar并打开它时,它将显示错误. 我的主要课程类似于: package Main//Importsobject Main{ def main(args: Array[String]) { println("Main: Hello
我尝试将我的项目导出为带有IntelliJ 9.0的jar.我的项目在Intellij中编译并运行没有任何问题,但是当我将它写入.jar并打开它时,它将显示错误.

我的主要课程类似于:

package Main

//Imports

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

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

>主要Clas:Main.Main
>类路径: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

我已经仔细检查过所有这些类都在项目中并且是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

我知道它没有找到scala类,但我确保它们在那里.还有什么可能是问题,我该如何解决?

解决方法

我说两件事中有一件出了问题:

> scala-library.jar不在你的jar中;要么
>运行时的类路径不包括scala-library.jar.

我不知道IntelliJ如何构建你的jar:它是否解压所有库jar并将它们与你的代码一起放入一个大jar中,或者它是否将库jar添加到你的大jar中并操纵类路径以获取罐子里的罐子里?

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

刚想到第二部分:你能构建一个打印出System.getProperty(“java.class.path”)的简单Java主类吗?即使没有Scala类,Java类也应该能够在该jar中运行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读