2016-12-29 73 views
1

我將現有的spring項目拆分爲多個模塊項目,其中每個模塊僅依賴於常用模塊,並創建除創建戰爭的最後一個之外的jar文件文件。帶有單個war文件的Spring Multi模塊項目,其中所有模塊僅依賴於通用模塊

下面是項目結構

parent  - packaging -POM, defines module sequence 
common_mod - common java code i.e. interface , base classes 
jar-Mod-1  - depends on common 
jar-Mod-2  - depends on common 
jar-Mod-3  - depends on common 
war-Mod  - depends only on common, this contains java and webapp code 

每個項目都有自己的Spring上下文。最後一個模塊將它們中的每一個導入例如

<import resource="classpath*:common-config.xml"/> 

現在我想創建一個所有模塊在它的jar但沒有定義每個模塊中最後的戰爭模塊依賴單一的戰爭。如果我指定相同的話,那麼開發人員也可以在戰爭模塊中寫出特定於模塊的代碼(比如說Jar Mod 1模塊),這也是我想避免的。

現在,當我創建戰爭時,它僅包含通用模塊的jar,因爲它在war模塊中被指定爲dependency。

所以當我運行這個項目時,它會抱怨從其他模塊找不到的bean,這是顯而易見的,因爲war不包含其他模塊的罐子。

+2

如果要將JAR置於WAR中,則必須定義WAR取決於JAR。這就是它的工作原理。我看過你有異議,但我不完全明白這個反對意見。無論如何,我預計這個反對意見被高估了,因爲當B依賴於A時,沒有什麼能阻止你在B中編寫與A相關的代碼。也許Jigsaw會停下來。 – michaldo

+0

所有這些模塊都是獨立的,所以在任何時候您都應該能夠註釋掉父pom中的任何模塊,並且代碼仍然應該編譯。如果您將單個模塊的代碼放入最後一個模塊中,那麼它將不會編譯。所以即使B依賴於A,它也是通過通用模塊而不是直接的。 –

+1

我不知道你是否知道範圍'運行時'的依賴關係:http://stackoverflow.com/questions/12272499/maven-what-is-the-runtime-scope-purpose –

回答

2

感謝阿爾喬姆比蘭的答案,

你將不得不加入戰爭模塊的模塊依賴,但如果你想在編譯時忽略他們,但需要在最後的戰爭該模塊的罐子(其正是我想要的),你必須將該依賴的範圍定義爲runtime

Maven : what is the "runtime" scope purpose?

相關問題