Java无法在父包中找到类

时间:2015-06-26 15:19:10

标签: java

我不确定这是否是类路径问题,语法问题或访问修饰符问题。我正试图在Java中第一次实现包,并且编译器没有在父包中找到类。

我知道包结构中没有任何层次关系,我明确地在子包类中导入父包类。

父包类的构造函数是公共的。

我认为两个目录都需要在类路径上但不确定。无论哪种方式,我都有类似路径上的两个dirs确定。

目录结构

home
|
|---java
    |
    |---src
        |
        |---com
            |
            |---inv
                |
                |---mail
                    |
                    |---SendMail.java
                |
                |---TeradataCon.java
                |
                |---ExcelWriter.java

CLASSPATH

(mdexter@server) /home/mdexter/java/src/com/inv/mail # echo $CLASSPATH
.:/storage/mdexter/java/lib/*:/usr/java6_64/jre/lib/*:/usr/java6_64/lib/*:/home/mdexter/java/src/com/inv/*:/home/mdexter/java/src/com/inv/mail/*

SendFile.java(已拆除)

package com.inv.mail;

import com.inv.TeradataCon;
import com.inv.ExcelWriter;

public class SendMail
{
    public static void main(String[] args)
    {
        TeradataCon teradata = new TeradataCon(some, args, here);
        ExcelWriter xls = new ExcelWriter(some, args, here);
    }
}

TeradataCon.java(剥离)

package com.inv;

public class TeradataCon
{
    public TeradataCon()
    {
        // stuff
    }
}

ExcelWriter.java(已拆除)

package com.inv;

public class ExcelWriter
{
    public ExcelWriter()
    {
        // stuff
    }
}

错误输出

(mdexter@server) /home/mdexter/java/src/com/inv/mail # javac *.java
StrategyVolumes.java:3: cannot find symbol
symbol  : class TeradataCon
location: package com.inv
import com.inv.TeradataCon;
              ^
StrategyVolumes.java:4: cannot find symbol
symbol  : class ExcelWriter
location: package com.inv
import com.inv.ExcelWriter;
              ^
StrategyVolumes.java:14: cannot find symbol
symbol  : class TeradataCon
location: class com.inv.mail.StrategyVolumes
                TeradataCon teradata = new TeradataCon(
                ^
StrategyVolumes.java:14: cannot find symbol
symbol  : class TeradataCon
location: class com.inv.mail.StrategyVolumes
                TeradataCon teradata = new TeradataCon(
                                           ^
StrategyVolumes.java:32: cannot find symbol
symbol  : class ExcelWriter
location: class com.inv.mail.StrategyVolumes
                ExcelWriter xls = new ExcelWriter(;
                ^
StrategyVolumes.java:32: cannot find symbol
symbol  : class ExcelWriter
location: class com.inv.mail.StrategyVolumes
                ExcelWriter xls = new ExcelWriter(;
                                      ^
6 errors

我尝试了什么

  • import com.inv。*; (不管怎么样?)
  • 来自/ home / java / src / com / inv的编译父类 - 工作
  • 来自/ home / java / src / com / inv的编译邮件/ * .java - 不起作用

1 个答案:

答案 0 :(得分:5)

对于初学者,我认为你误解了类路径。您没有将包目录放在类路径上 - 您只将输出目录的 root 放在那里。

我建议你从src目录编译,输出到bin或classes目录。例如,完全摆脱你的CLASSPATH环境变量(它很少有用,IME - 最好在必要时将其指定为命令行选项),然后使用类似的东西:

/home/mdexter/java/src # javac -d ../bin com/inv/mail/*.java

或者更好,将所有内容编译在一起,正如JB Nizet建议的那样:

/home/mdexter/java/src # javac -d ../bin `find . -name '*.java'`

(或者使用IDE和/或构建工具。)