如何解决什么是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类似。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。