Я пытаюсь создать небольшой клиентский API погоды, который будет получать информацию о погоде с какого-либо веб-сайта. При этом я хотел бы иметь единую точку входа в мой проект (назовите ее WeatherClient).
Я разделил проект на разные пакеты (для простоты, скажем, у меня есть 2 пакета, «внешний» пакет и «внутренний» пакет).
Мне нужен только WeatherClient во внешнем пакете, и у меня есть открытый класс во внутреннем пакете (WeatherClientBuilderImpl
с public builder()
).
То, чего я пытаюсь добиться - это скрыть WeatherClientBuilderImpl при импорте проекта. Из того, что я прочитал о модулях, кажется, что это как раз одно из их основных преимуществ, но я, к сожалению, не смог ничего найти о том, как этого добиться
Я попробовал несколько вещей:
Я попытался создать 2 модуля: внутренний и внешний. Я попытался просто импортировать внутренний файл .jar (чей pom включает в себя зависимость для модуля). Основная проблема, с которой я здесь сталкиваюсь, это получение исключения ClassNotFound во время выполнения.
Я пыталсясоздание 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.