Примечание: Я могу успешно скомпилировать все остальное, кроме RegisterTest. java
У меня следующая структура проекта. Я хочу скомпилировать это, используя javac, без инструментов сборки, без IDE. Каждый файл находится в пакете, соответствующем их структуре каталогов, например, Drink.java
находится в Kassensystem / AbstractProducts, что переводится как package Kassensystem.AbstractProducts;
Структура проекта
Все аннотации Продукты реализуют общий интерфейс Product, который находится в папке Interfaces, поэтому они естественно import Kassensystem.Interfaces.*
. Наконец, Продукты являются конкретными классами, производными от абстрактных классов продуктов, поэтому они в свою очередь import Kassensystem.AbstractProducts.*
. Наконец, класс Register просто рассчитывает некоторые цены и зависит только от интерфейса Product. RegisterTest должен проверить всю систему, создать несколько конкретных классов и передать их в Register.
Таким образом, иерархия зависимостей выглядит следующим образом: Иерархия зависимостей
У меня возникли проблемы компилируя это, как мне нужно установить classpath для получения правильного порядка зависимостей (заметьте, я не использую jar-файлы)? Я попытался установить путь к классу таким образом, чтобы на первом месте стояли самые абстрактные классы (Интерфейсы -> Абстрактные классы -> Конкретные продукты -> Регистрация), но в выражениях import всегда жалуется, что пакет не существует.
$ javac -cp "Interfaces/*.class:AbstractProducts/*.class:Products/*.class" RegisterTest.java
RegisterTest.java:3: error: package Kassensystem.Products does not exist
import Kassensystem.Products.*;
^
RegisterTest.java:4: error: package Kassensystem.Interfaces does not exist
import Kassensystem.Interfaces.*;
^
RegisterTest.java:8: error: cannot find symbol
var products = new Product[] { new Tomato(), new TomatoJuice() };
^
symbol: class Product
location: class RegisterTest
RegisterTest.java:8: error: cannot find symbol
var products = new Product[] { new Tomato(), new TomatoJuice() };
^
symbol: class Tomato
location: class RegisterTest
RegisterTest.java:8: error: cannot find symbol
var products = new Product[] { new Tomato(), new TomatoJuice() };
^
symbol: class TomatoJuice
location: class RegisterTest
RegisterTest.java:10: error: cannot find symbol
double total = Register.scan(products);
^
symbol: variable Register
location: class RegisterTest
6 errors