Я не уверен, что это проблема с classpath, проблема синтаксиса или проблема с модификатором доступа. Я пытаюсь реализовать пакеты в первый раз в Java и имея с компилятором не поиск классов в родительском пакете.Java не может найти классы в родительском пакете
Я понимаю, что в структурах пакетов нет иерархических отношений, и я явно импортирую родительские классы пакетов в класс дочерних пакетов.
Конструкторы классов родительских пакетов являются общедоступными.
Я под впечатлением, что оба каталога должны быть на пути к классам, но не уверены в этом. В любом случае, у меня есть оба пути на пути к классу, чтобы быть уверенным.
Структура каталогов
home
|
|---java
|
|---src
|
|---com
|
|---inv
|
|---mail
|
|---SendMail.java
|
|---TeradataCon.java
|
|---ExcelWriter.java
CLASSPATH
([email protected]) /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
}
}
Выход ошибки
([email protected]) /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
- Скомпилированная почта/*. Java from/home/java/src/com/inv - doesn ' t work
Хорошо, что вы скомпилировали 'ExcelWriter' заранее? Как правило, вы компилируетесь из каталога 'src', например, с помощью' javac -d ../bin com/inv/mail/*. Java'. –
И самый простой и безопасный способ - всегда скомпилировать все сразу. Изучение работы javac - это хорошо, но как только вы это поняли, реальный инструмент построения, такой как gradle, является обязательным. –
Да - я скомпилировал inv/java. * Заранее. OK - да, я бы определенно хотел бы скомпилировать все классы в com сразу, что было бы предпочтительнее. Попробуй это. К сожалению, Ant/Gradle и т. Д. Не является вариантом в моем случае, по крайней мере, насколько мне известно, но я тоже буду исследовать это. –