1

我正在将 linux 工具移植到 Windows。该工具在 linux 系统上运行良好,但现在在 windows 上我得到这个“找不到符号”错误。

我有这个小主课:

package foo;

import foo.bar;

public class Main {
    public static void main(String[] args) throws Exception {
        bar.getInstance();
    }
}

现在出现错误,同时执行 javac Main.java:

导入 foo.bar:找不到符号 ^ 符号:类栏位置:包 foo

Main.java 和 bar.java 位于同一目录中。我错过了什么?

4

3 回答 3

8

一方面,bar应该被称为Bar惯用语......

理想情况下,您应该从Main.java上方的目录编译,如下所示:

javac -d out foo/Main.java foo/Bar.java

这将创建一个名为“out”的目录,其中包含另一个目录“foo”,该目录将包含 Main.class 和 Bar.class。因此,再次从父目录中,您可以运行:

java -cp out foo.Main

源位置不必包结构匹配。您可以只从包含的目录中调用 javac Main.javaBar.java如下所示:

javac -cp out Main.java Bar.java

(然后以与以前相同的方式运行它)但是,根据包来构建源代码通常是一个更好的主意。

您可能会发现使用将为您处理所有编译等的 IDE(例如 Eclipse 或 NetBeans)更容易。如果您确实想从命令行构建一个真正的项目,您可能应该考虑使用完整的构建系统,例如 Ant 或 Maven。

(请注意,如果您尝试以相同的方式进行编译,您在 Linux 上会遇到与在 Windows 上相同的错误。)

于 2012-04-26T18:58:12.480 回答
1

我认为您需要在尝试编译 foo 之前正确编译类栏,即在正确的包结构中生成类文件。

于 2012-04-26T18:58:14.493 回答
0

如果你们中的任何人从事过 kotlin 项目,然后在 gradle 中没有 kotlin 支持的情况下从事完整的 Java 项目,并且您将 kotlin 中的类放入 Java 项目并尝试导入该 Kotlin 类,您将获得此导入问题。没有参考确切的问题,但有人可能会发现它有帮助。

示例:尝试在 MainActivity.java 中导入 SomeClass.kt 将引发此错误。

于 2021-07-29T11:04:44.203 回答