【问题标题】:Scala Import and Packages errorScala 导入和包错误
【发布时间】:2012-08-04 07:05:58
【问题描述】:

我想从 scala 对象导入和调用一个 java 类(来自外部包)。我的代码是这样的

Java 代码:

package com.test.services.account;

public class MyMain {
    public static void main(String[] args) {
        System.out.println("coming into main");
    }
}

Scala 代码:

package com.newtest.newservice.scala
import _root_.com.test.services.account.MyMain

object scalatest {
  def main(args: Array[String]) {
    println("Hello, world! " + args.toList)
    // Deployer.main(args)
    val  de:MyMain  = new MyMain()
    println(de.toString())
  }
}

当我使用 scalac scalatest.scala 编译它时,它给出了一个错误

scalatest.scala:2: 错误:对象测试不是包 com 的成员 导入 root.com.test.services.account.MyMain ^ 发现一个错误

谁能指导我如何将我的 java 类导入 scala 代码?

谢谢 苏雷什

【问题讨论】:

  • 您确定 Java 类在 Scala 编译器的类路径中吗? (如果你还没有使用它:Sbt 大大简化了这些事情,通常是一个不错的选择。)

标签: java scala import package


【解决方案1】:

如果你不想使用像 sbt 这样的东西,你应该首先决定你的 CLASSPATH 在哪里。由于您有两个不同的类文件(一个由 Java 生成,一个由 Scala 生成),因此您至少需要一个目录来存放您的类文件。假设是d:\myclasses

在这种情况下,您可以使用以下命令编译 java 文件:

d:\mycode> javac -d d:\myclasses MyMain.java

这将在d:\myclasses 的适当包结构中生成您的Java 类文件。然后你会像这样编译scala文件

scalac -classpath d:\myclasses -d d:\myclasses scalatest.scala

除了将类路径作为 scalac 命令行的一部分传递之外,您还可以将 CLASSPATH 环境变量设置为 d:\myclasses

【讨论】:

  • 嗨 Rajesh,我做到了,但是当我运行 scala 类时,我得到了这个异常
  • 我这样做了,当我运行 scala 类时出现错误:C:>scala com\newtest\newservice\scala\scalatest 线程“main”中的异常 java.lang.NoClassDefFoundError: com\newtest\ newservice\scala\scalatest(错误名称:com/newtest/newservice/scala/scalatest) scalatest 是我的 coimplied scala 类知道如何解决这个问题吗?
  • 你又犯了同样的错误。 Scala(也是JVM)不知道你的类路径是什么,所以它不知道在哪里可以找到你的类。或者像 scalac 命令一样在命令行上传递它,或者设置 CLASSPATH 环境变量。阅读 en.wikipedia.org/wiki/Classpath_%28Java%29 以了解 CLASSPATH 是什么以及为什么它很重要。
猜你喜欢
  • 1970-01-01
  • 2017-06-07
  • 2012-02-06
  • 2020-10-18
  • 1970-01-01
  • 2017-04-25
  • 1970-01-01
  • 2013-02-02
  • 1970-01-01
相关资源
最近更新 更多