什么是Scala类路径?

问题描述

我一直在尝试在项目中使用名为PasswordHash.jar的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

此罐子是由没有package语句的Java文件构建的。

编辑:

Scala文件:

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

package com.michael.fileshare.shared
import  com.michael.fileshare.shared.PasswordHash

Java文件:

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

package com.michael.fileshare.shared

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

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

如果有帮助,我将专注于Ubuntu。

解决方法

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

“在此源文件中,任何时候只要提及类型为x,就假定它读为foo.bar.x”,这就是全部。这并不意味着在import语句为“运行”时(实际上,import语句根本不是在“运行”)从磁盘加载文件,并且如果您从不提及x,则它实际上是无操作的

在scala中,大部分内容都是相同的,尽管像隐式之类的东西都是经过IIRC处理的。

您所有的import x.jar声明绝对是错误的,import根本不是您的操作方式。您只需输入快捷方式名称即可,仅此而已。查找具有该类型表示形式的类文件的工作不是源文件的一部分-它是构建的一部分,即传递给javac或scalac的参数。

好的,有什么解决方案?

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

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

所以,如果您有:

import com.foo.PassHash;

public class Example {
    PassHash hash = new PassHash();
}

,并且您的类路径为:javac -cp whatever/x.jar Example.java,则whatever/x.jar必须存在,必须是一个jar文件(或目录),并且在该jar文件或目录中,必须有一个名为com,包含一个名为foo的目录,包含一个名为PassHash.class的文件。一旦有了它,上面的代码就可以很好地编译,并且与scala类似。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...