【问题标题】:javac "cannot find symbol" error with command linejavac“找不到符号”命令行错误
【发布时间】:2012-11-15 23:21:05
【问题描述】:

我有两个类 Owning 和 OwningAccessor。这些文件位于同一目录中。

public class Owning {
    String _name = "";
    public void printBanner()
    {
    }
    public void printOwning(double amount)
    {
        printBanner();

        //print details
        System.out.println("name:" + _name);
        System.out.println("amount:" + amount);
    }
}


public class OwningAccessor {
    public void access()
    {
        Owning o = new Owning();
        o.printOwning(500);
    }
}

当我尝试用javac -cp . OwningAccessor.java 编译OwningAccessor 时,出现编译错误。

symbol  : class Owning
location: class smcho.OwningAccessor
        Owning o = new Owning();
        ^
OwningAccessor.java:6: cannot find symbol
symbol  : class Owning
location: class smcho.OwningAccessor
        Owning o = new Owning();
                   ^

这有什么问题?代码在eclipse IDE下编译良好。

【问题讨论】:

  • 他们在同一个目录吗?显示你的源路径目录结构
  • 它们在同一个目录中。
  • 没有复制,在这里工作。如果你先编译Owning.java是否有效?
  • 你不需要this吗?
  • @Daniel:不,即使我编译 Owning.java 来获取类文件,它也不起作用。

标签: java javac


【解决方案1】:

好的,假设您将代码分布在文件中,如下所示

myproject
├── out
└── src
    ├── OwningAccessor.java
    └── Owning.java

转到您的命令提示符,并将目录更改为 myproject。在那里发出以下命令:

javac -d out -sourcepath src src/OwningAccessor.java

我刚刚测试了它,它工作得很好。您编译的类将位于out 文件夹中:

.
├── out
│   ├── OwningAccessor.class
│   └── Owning.class
└── src
    ├── OwningAccessor.java
    └── Owning.java

编译一个类将触发所有其他依赖类的编译。编译器会自动在src 文件夹中查找它们。

【讨论】:

  • 这只是符合程序,我想知道为什么我没有在 CMD 中得到 systme.out.print 的输出?
  • 最好的方法是创建一个 jar,它会处理所有这些,并且相当简单。
【解决方案2】:

确保同时编译 Owning.java 和 OwningAccessor.java,如下所示:

javac -cp . Owning.java OwningAccessor.java

Eclipse 会为您编译所有必要的文件,这就是为什么在那里工作的原因。

【讨论】:

  • Java 自己不知道依赖关系吗?
  • 如果您在编译器中使用 -sourcepath 标志,它会这样做
  • Sourcepath 应该可以解决问题,不幸的是我无法测试它,因为我的机器上的 javac 在我尝试编译的任何东西上都会崩溃并出现 ACCESS_VIOLATION...
  • @Kninnug:-sourcepath 不起作用。我不明白为什么一次编译所有源代码有效,而一个接一个却不行。
  • 好吧,就像我说的,我现在不能测试它(除了在 Eclipse 中,这是我们不想要的)。但显然 javac 本身并不寻找必要的文件。您也可以输入javac -cp . *.java,它将编译该目录中的所有 .java 文件。
【解决方案3】:

尝试做一个正确的源路径示例:

javac -d temp -sourcepath c:\awork\JavaProjects\singleton\src\ c:\JavaProjects\singleton\src\com\company\MySingleton.java javac -d temp -sourcepath c:\awork\JavaProjects\singleton\src\ c:\JavaProjects\singleton\src\com\company\Main.java

在“temp”中,我们分配资源并用 -sourcepath 指示 .java 文件的位置。

【讨论】:

    【解决方案4】:

    因此,在名为 D:\Automation 的目录中,有一个文件 Demo.java 抛出此错误,在 cmd 中,当您在 D:\Automation 中时,您需要: - 1) cd.. //将把你从自动化目录中拉出来。 在 D:> 2) javac Automation\Demo.java

    这将编译您的文件 - Demo.java

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-07
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      相关资源
      最近更新 更多