[英]How to compile multiple jars that uses same application file with different controllers
我正在使用 2 個提供者weather-1
和weather-2
編寫weather
服務。 我有兩個Spring Controller
類controller-1
和controller-2
分別調用這兩個服務。
我的意圖是在兩個氣象服務 jars 之間切換,就像如果我想從weather-1
獲取氣象數據,那么controller-1
必須使用weather-1.jar
文件進行編譯,而controller-2
保持不變。
我已經為build-weather-1.gradle
和build-weather-2.gradle
等服務嘗試了兩個不同的Gradle
文件。
兩者都將擁有自己的jar
依賴項。
構建天氣 1.gradle
implementation 'com.xxx.weather:weather-1:0.0.1'
構建天氣 2.gradle
implementation 'com.xxx.weather:weather-2:0.0.1'
我使用命令運行build-weather-1.gradle
- gradle -b build-weather-1.gradle build
。 不幸的是,這個構建文件也需要其他服務 class controller。
error: package com.xxx.weather.weather-2 does not exist
我已經排除了 package 如下,
sourceSets {
main {
java {
exclude 'com/xxxx/weatherservice/controller/Weather2Controller.java'
}
}
}
但是這個接口( weather-2
)在 Application.java 文件中被聲明為一個 bean,它會拋出 package not found 錯誤。
如何解決此錯誤?
您可以考慮以下模式:
WeatherService
接口。WeatherService
的實現。這是一個應用依賴倒置原則的例子,來自SOLID 原則:
高級模塊不應該依賴於低級模塊。 兩者都應該依賴於抽象(例如,接口)。 抽象不應該依賴於細節。 細節(具體實現)應該依賴於抽象。
在您的應用程序中,controller(實現)依賴於WeatherService
接口(抽象),而不是特定的天氣服務實現。
完成上述操作后,有許多選項可用於部署使用所需天氣服務實現的控制器。 這些包括:
main()
方法中或使用您選擇的依賴注入方法:構建所需天氣服務實現的實例,並使用該實例構建您的 controller。WeatherService
接口和控制器的核心 JAR)。在我看來,如果您的項目需要彼此獨立構建,您應該將它們作為單獨的項目保留(在這種情況下,您仍然可以通過其他項目可能依賴的第三個庫項目共享一些代碼)。
如果您仍然希望將它們保留在相同的 gradle 結構中,您應該查看本指南中提到的多模塊設置,並將每個子模塊的構建配置保留在其自己的 build.gradle 文件中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.