我正在尝试构建一个小型天气客户端API,该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类创建客户端。