Scala 类路径是什么?

Not*_* me 0 java scala jar classpath

我一直在尝试使用我的项目中调用的 jar PasswordHash.jar。我正在使用sbt,所以我把罐子放进去lib/。现在它在类路径中,但我不知道这意味着什么。

我试过了:

  • import PasswordHash
  • import PasswordHash.jar
  • import com.PasswordHash
  • import com.PasswordHash.jar
  • import org.PasswordHash
  • import org.PasswordHash.jar
  • import java.PasswordHash
  • import java.PasswordHash.jar
  • import jar.PasswordHash

该 jar 是从一个没有package声明的 Java 文件构建的。

编辑:

斯卡拉文件:

~/FileShare/shared/src/main/scala/com/michael/fileshare/shared/Collatz.scala

package com.michael.fileshare.shared
import  com.michael.fileshare.shared.PasswordHash
Run Code Online (Sandbox Code Playgroud)

Java文件:

~/FileShare/shared/src/main/java/com/michael/fileshare/shared/PasswordHash.java

package com.michael.fileshare.shared
Run Code Online (Sandbox Code Playgroud)

错误信息: object PasswordHash is not a member of package com.michael.fileshare.shared

Scala 文件尝试导入 Java 文件失败,但另一个 Scala 文件成功导入此 Scala 文件。

如果有帮助的话,我会关注 Ubuntu。

rzw*_*oot 5

import foo.bar.x;意思是非常非常简单的事情:

“在这个源文件中,任何时候只要提到一个类型x,就假设它是foo.bar.x”,这就是它的全部含义。这并不意味着当导入语句为“运行”时从磁盘加载文件(事实上,导入语句根本不是“运行”),并且如果您从未提及 x,则它是字面上的无操作。

在 scala 中,它基本上是相同的,尽管像隐式这样的东西会被处理 IIRC。

你所有的import x.jar说法绝对是错误的,import根本不是你这样做的方式。您只需命名类型快捷方式即可。定位具有该类型表示的类文件的工作不是源文件的一部分- 它是构建的一部分,即传递给 javac 或 scalac 的参数。

好吧,解决办法是什么?

你在这里犯了多个错误。第一个是无包类根本无法导入。您必须有一个包声明。

第二个是,当您编译 scala 文件时,类文件必须位于类路径中。类路径的规则如下:类路径中的每个条目要么是一个目录,要么是一个 jar 文件。然后,包遵循目录。

所以,如果你有:

import com.foo.PassHash;

public class Example {
    PassHash hash = new PassHash();
}
Run Code Online (Sandbox Code Playgroud)

你的类路径是,比如说:javac -cp whatever/x.jar Example.java,那么whatever/x.jar必须存在,必须是一个 jar 文件(或目录),并且在该 jar 文件或目录中,需要有一个名为 的目录com,包含一个名为 的目录foo,包含一个名为 的文件PassHash.class。一旦你有了这个,上面的代码就会编译得很好,这在 scala 中是类似的。