我不确定这是类路径问题,语法问题还是访问修饰符问题。我正在尝试使用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
我尝试过的
对于初学者来说,我认为您误解了类路径。您无需将包目录放在类路径上,而只将输出目录的根目录放在那里。
我建议您从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] 删除。
我来说两句