Java在父包中找不到类

马特·德克斯特(Matt Dexter)

我不确定这是类路径问题,语法问题还是访问修饰符问题。我正在尝试使用Java首次实现程序包,并且使编译器无法在父程序包中找到类。

我了解包结构中没有任何层次关系,并且我正在子包类中显式导入父包类。

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

我的印象是两个目录都必须位于类路径上,但不确定。无论哪种方式,我都可以肯定在classpath上有两个目录。

目录结构

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

类路径

(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

我尝试过的

  • 导入com.inv。*; (没关系吧?)
  • 从/ home / java / src / com / inv编译的父类-Works
  • 来自/ home / java / src / com / inv的已编译邮件/*.java-不起作用
乔恩·斯基特

对于初学者来说,我认为您误解了类路径。您无需将包目录放在类路径上,而只将输出目录目录放在那里。

我建议您从src目录进行编译,并将输出转到abin或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和/或构建工具。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java致命错误:在类路径或引导类路径中找不到包java.lang

来自分类Dev

在包中运行Java类->错误:找不到或加载主类

来自分类Dev

java ant compile在同一包中的同一目录中找不到类

来自分类Dev

找不到Java包

来自分类Dev

Java错误找不到或加载主类包

来自分类Dev

Junit(JAVA)中找不到类异常

来自分类Dev

在Java中找不到主类?

来自分类Dev

在ForkJoinPool Java中找不到JAXB类

来自分类Dev

在ForkJoinPool Java中找不到JAXB类

来自分类Dev

在Java中找不到主类?

来自分类Dev

在Java Web Start中找不到类

来自分类Dev

Java - 在类定义中找不到错误

来自分类Dev

如果主类不在顶级包中,则找不到@RestController

来自分类Dev

Scala classpath在本地目录中找不到默认的包类

来自分类Dev

IntelliJ 在当前包中找不到类

来自分类Dev

在 laravel 包中找不到类“Pusher\Pusher”

来自分类Dev

Java找不到类

来自分类Dev

一个Java类在同一包中找不到另一个

来自分类Dev

找不到OSGi捆绑包的Activator类

来自分类Dev

Java在Linux中的.jar文件中找不到类

来自分类Dev

Java在Linux中的.jar文件中找不到类

来自分类Dev

Java找不到类文件

来自分类Dev

找不到Java类SingularMatrixException

来自分类Dev

Java:找不到符号类

来自分类Dev

Java - 找不到主类

来自分类Dev

在AAR中找不到类

来自分类Dev

在Laravel中找不到类

来自分类Dev

错误:在Java类中找不到主要方法

来自分类Dev

在类中找不到 JMETER Beanshell ( java.lang.String )