Как импортировать проект с модулями в другой проект, чтобы не потерять свою инкапсуляцию? - PullRequest
1 голос
/ 04 ноября 2019

Я пытаюсь создать небольшой клиентский API погоды, который будет получать информацию о погоде с какого-либо веб-сайта. При этом я хотел бы иметь единую точку входа в мой проект (назовите ее WeatherClient).

Я разделил проект на разные пакеты (для простоты, скажем, у меня есть 2 пакета, «внешний» пакет и «внутренний» пакет).

Мне нужен только WeatherClient во внешнем пакете, и у меня есть открытый класс во внутреннем пакете (WeatherClientBuilderImpl с public builder()).

То, чего я пытаюсь добиться - это скрыть WeatherClientBuilderImpl при импорте проекта. Из того, что я прочитал о модулях, кажется, что это как раз одно из их основных преимуществ, но я, к сожалению, не смог ничего найти о том, как этого добиться

Я попробовал несколько вещей:

  1. Я попытался создать 2 модуля: внутренний и внешний. Я попытался просто импортировать внутренний файл .jar (чей pom включает в себя зависимость для модуля). Основная проблема, с которой я здесь сталкиваюсь, это получение исключения ClassNotFound во время выполнения.

  2. Я пыталсясоздание 1 модуля и экспорт только внешнего пакета. Это не работает (я предполагаю, потому что «экспорт» экспортирует модуль, а не пакеты). Здесь я в конечном итоге могу реализовать любой из классов, который противоречит моей цели.

Это мое текущее дерево и более или менее то, что мне хотелось бы иметь (я пытался сделатьнекоторые вещи с модулями, поместив мой WeatherClient во «внешний» пакет, а затем создав 2 модуля (один для внешних, один для внутренних).

.
|-- WeatherClient.java
|-- internal
|   |-- DarkKey.java
|   |-- DarkSkyClient.java
|   |-- InvalidParametersException.java
|   |-- WeatherBuilderImpl.java
|   `-- handlers
|       |-- JsonBodyHandler.java
|       `-- JsonBodyHandlerTwo.java
`-- model
    |-- DateTimeFormatException.java
    |-- DateValidator.java
    `-- WeatherRequest.java

Чтобы было ясно, чего я пытаюсь достичь, так этоимпортировать этот проект в отдельный проект таким образом, чтобы клиент мог быть создан только с помощью класса WeatherClient.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...