我正在用2个提供者编写一个weather服务,weather-1和weather-2。我有两个Spring Controller类controller-1和controller-2,它们分别调用两个服务。
我的目的是在两个天气服务jars之间切换,比如如果我想从weather-1获取天气数据,那么controller-1必须使用weather-1.jar文件进行编译,而controller-2则保持不变。
我尝试了两个不同的Gradle文件,用于build-weather-1.gradle和build-weather-2.gradle这样的服务。
两者都有自己的jar依赖项。
build-weather-1.gradle
implementation 'com.xxx.weather:weather-1:0.0.1'build-weather-2.gradle
implementation 'com.xxx.weather:weather-2:0.0.1'我使用命令- gradle -b build-weather-1.gradle build运行了这个gradle -b build-weather-1.gradle build。不幸的是,这个构建文件也需要另一个服务类控制器。
error: package com.xxx.weather.weather-2 does not exist我已经排除了下面的方案,
sourceSets {
main {
java {
exclude 'com/xxxx/weatherservice/controller/Weather2Controller.java'
}
}
}但是这个接口(weather-2)在Application.java文件中被声明为一个bean,它抛出包没有找到错误。
如何解决此错误?
发布于 2021-01-28 04:14:45
您可以考虑以下模式:
WeatherService接口。WeatherService的实现。这是一个应用依赖反转原理的例子,来自固体原理。
高级模块不应依赖于低级别模块。两者都应该依赖于抽象(例如,接口)。抽象不应依赖于细节。细节(具体的实现)应该取决于抽象。
在您的应用程序中,控制器(实现)依赖于WeatherService接口(抽象),而不是特定的气象服务实现。
完成上述操作后,有许多用于部署控制器的选项,这些控制器使用了所需的天气服务实现。其中包括:
main()方法中或使用您选择的依赖注入方法:构造所需的天气服务实现的实例,并使用该实例构造控制器。WeatherService接口和控制器的核心JAR )。发布于 2020-12-15 14:20:22
在我看来,如果您的项目需要彼此独立构建,您应该将它们作为单独的项目(在这种情况下,您仍然可以通过其他项目所依赖的第三个库项目共享一些代码)。
如果您仍然希望将它们保存在相同的gradle结构中,那么您应该查看这个指南中提到的多模块设置,并在其自己的build.gradle文件中为每个子模块保留一个构建配置。
https://stackoverflow.com/questions/61320930
复制相似问题