【问题标题】:importing a valid package is causing a java compiler error导入有效的包导致 java 编译器错误
【发布时间】:2017-06-30 06:49:04
【问题描述】:

我在编译 Order.java 文件时遇到编译器错误,即使它包含另一个打包类的导入语句。我不完全确定为什么会发生这种情况,但这是一个目录树,其中包含我拥有的一些文件:

  • com/my/domain/Order.java
    此文件中包含以下包和导入:

    package domain;
    import utils.MyDate;
    
  • com/my/utils/MyDate.java
    此文件中包含以下包和导入:

    package utils;
    

编译 Order.java 时出现编译器错误:

 Order.java:2: error: package com.my.utils does not exist
 import com.my.utils.MyDate;
               ^
 Order.java:5: error: cannot find symbol
  public MyDate orderDate;
       ^
  symbol:   class MyDate
  location: class Order

 Order.java:16: error: cannot find symbol
  public Order(MyDate d, double amt, String c, String p, int q){
             ^
 symbol:   class MyDate
 location: class Order

 Order.java:24: error: cannot find symbol
  public Order (MyDate d, double amt, String c) {
              ^
 symbol:   class MyDate
 location: class Order
4 errors

在尝试形成 cmets 后,我仍然不确定如何解决这个问题。这里有更多细节。

.bash_profile 中的现有语句:

 export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
 export CLASSPATH=${CLASSPATH}:/Users/3aCaGa/Desktop/Java-SE-8-Programs/SimplifiedDateClass/com/my

我是如何编译的?例如,我将转到目录中的 java 文件位置并运行命令:

 java Order.java

有关文件及其确切内容的更多详细信息,请参阅: https://github.com/gosem01/Java-SE-8-Programs/tree/master/SimplifiedDateClass/com/my

【问题讨论】:

  • 你的classpath是什么?
  • 基于com/my/utils/MyDate.java 可能是import com.my.MyDate;
  • 这是我的类路径:export PATH=$PATH/Users/3aCaGa/Desktop/Java-SE-8-Programs/SimplifiedDateClass/com 也将其更改为 import com.my.MyDate; 摆脱了错误,但现在我在编译 Order.java 时出现找不到符号错误:Order.java:2: error: cannot find symbol import com.my.MyDate;跨度>
  • 1- 这不是 CLASSPATH 它只是 PATH; 2-它缺少$PATH/Users/...之间的分隔符':'(假设非Windows)
  • 如果那是类路径,则缺少 my 文件夹

标签: java compiler-errors java-8 java-7


【解决方案1】:

您的 package 和 import 语句与您的目录结构不匹配。

你的 Order.class 应该有:

package com.my.domain;
import com.my.utils.MyDate;

Utils.class

package com.my.utils;

【讨论】:

    【解决方案2】:

    要编译,请转到您可以“看到” com 文件夹的目录并执行以下操作:

    *nix/MacOS

    javac -cp . com/my/domain/*.java com/my/utils/*.java
    

    Windows

    javac -cp . com\my\domain\*.java com\my\utils\*.java
    

    希望对你有帮助

    【讨论】:

    • 更像javac -cp com/my/ com/my/domain/*.java com/my/utils/*.java ...或cd com/myjavac -cp . domain/*.java utils/*.java
    • @P.J.Meisch 它不会移动到任何地方,只需使用 cp 参数指定类路径,您可以使用 man javac 验证它
    • 你是对的;我把cp 误认为是一个shell 命令;抱歉,刚刚删除了我之前的评论
    猜你喜欢
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多