我們正在開發Mavenizing我們的java項目,並且我們希望爲每個模塊在接口和實現之間設置一個乾淨的分隔。 爲了做到這一點,我們希望將每個模塊分成兩個子模塊,一個用於接口和數據對象,另一個用於實現。 例如:maven - 用於接口和用Spring實現的獨立模塊
+commons
+commons-api
+commons-impl
的模塊的多金屬氧酸鹽將被構造成使得沒有模塊依賴於IMPL子模塊。這樣,一個模塊中的任何代碼都不能「看到」另一個模塊的實現細節。
我們遇到的問題是在哪裏放置我們的spring XML。 在我們的項目中,我們使用通配符進口自動進口彈簧XML文件,如
<import resource="classpath*:**/*-beans.xml"/>
這樣春天個XML的位置並不重要,在運行時,所有的模塊得到加載到相同的類加載器和,POM中嚴格的單向依賴關係規則不適用。
然而,在開發過程中,我們希望IDE - 我們使用IntelliJ IDEA的 - 承認從春天個XML引用的實現類。 我們也希望IDEA識別在其他模塊中定義的bean。
如果我們把API子模塊春天個XML - 他們不會「看見」在IMPL子模塊的實現類。 如果我們將它們放在impl子模塊中,它們的bean將不會從其他模塊「看到」。 也許可以將IDEA項目配置爲從沒有依賴關係的模塊中識別spring XML,但我們更喜歡我們的POM保存所有項目結構信息,而不依賴於IDEA項目文件。
我們考慮建立第三子模塊剛剛舉行春季個XML(或許冬眠個XML以及)。例如:
+commons
+commons-api
+commons-impl
+commons-config
外部模塊將取決於兩個公地-API和公地配置和公地配置將取決於兩個公地-API和公地IMPL,依賴於commons-impl標記爲「提供」(以防止傳遞性解析)。
然而,這似乎是一個複雜而尷尬的解決方案,我們覺得必須有一個更好 - 更簡單的方式來實現與Maven和Spring接口/ IMPL分離。
很好的問題,但沒有答案呢?真是可惜.. – cirit 2015-07-15 12:18:04
@cirit同意 - 開始賞金 – drewmoore 2015-10-01 12:06:56