Компиляция java проекта с несколькими директориями и иерархией зависимостей - PullRequest
0 голосов
/ 06 февраля 2020

Примечание: Я могу успешно скомпилировать все остальное, кроме 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
...