2

我試圖將幾個子模塊項目轉換爲Maven,但我想我有點困惑如何做到這一點。有點有點Maven的雙向依賴或我只是困惑?

這是一個包含war包裝的webapp。因此,這裏是我們的項目結構:

  • core(帶彈簧,休眠等)
  • module1
  • module2
  • module3

module取決於core,因爲core提供數據庫訪問和一些基本功能。 Maven中的話,我會把

<dependency> 
    <groupId>a.b.c</groupId> 
    <artifactId>core</artifactId> 
</dependency> 

modulepom.xml內。

下一個:module3也取決於module1。所以,我把

<dependency> 
    <groupId>a.b.c</groupId> 
    <artifactId>module1</artifactId> 
</dependency> 

module3pom.xml內。


直到這裏的一切看起來非常簡單和正常的,我認爲(?!)。 現在混亂的東西:

  • core是Web應用程序。所以最後我會編譯core項目。
  • 那些modules將爲Web應用
    • 一些額外的功能,這意味着:core某種程度上取決於每個module
  • 將來的版本可能不包含module2而是module2b,這實際上繼承的類module2,但可以添加/覆蓋某些功能

此刻我們有一個屬性(和一個額外的xml)f其中包含core項目中的modules。這個文件的內容告訴Spring爲Controllers和Beans掃描更多的包。

另外有一個Ant任務,這與文件系統路徑的工作原理:

<path id="libs.projects"> 
    <dirset dir="${basedir}/../."> 
     <include name="libprefix*"/> 
     <exclude name="moduleprefix*"/> 
    </dirset> 
</path> 

它掃描與libprefixmoduleprefix和編譯他們開始文件夾。之後,它會從目標目錄和其他一些文件(html,jsp,js,css等)中生成jar文件,並將它們複製到core項目目錄中。


的問題是很清楚,我想:

  • 什麼(特別是關於那些未來的版本)
  • 是雙向的項目依賴正確的方式優化項目佈局?

也許有其他方式使用Maven父模塊與pom包裝?我從來沒有使用過這個,也不知道它的能力。但我希望你們知道如何解決這個問題;)

謝謝!

回答

1

在Maven中,如果你想讓你的未來變得簡單,你將會讓每個Maven項目產生一件事情。一個罐子。一場戰爭。一件事。

將現有項目轉換到Maven時,這很少容易。 Maven的問題與現有的可能從未有過依賴性結構的項目不同。它可能已經被部分依賴於其他部分的子部分等等所折服。它看起來可能是循環的,但這通常只是以一種有用的方式正確地分析和細分比特。現有的項目可能有點像我的車庫。我可以找到任何東西,但我肯定無法描述它是如何組織給任何人的。這可能適用於車庫或小型單人項目,但對於代碼執行有價值服務的大型項目來說,這樣做並不合適。 Maven讓你難以離開它。任何構建工具都可以在組織時使用它。

你不這樣做一個項目/一個神器的事情,我想,根據你說:

  1. 「核心」包含的模塊和使用的共享代碼「核心」是webapp(聽起來像它可能有兩個目的)
  2. 有一個Ant任務生成一個jar並將其複製到核心項目(jar應該由其自己的項目創建,核心將依賴於該項目)。

一些可能的解決方案。

  • Ant任務需要是自己的項目,可以生成自己的jar文件而核心項目依賴於該jar。
  • 還有另一個戰爭項目,收集各個模塊中生成的罐子和創建Web應用程序的核心。
  • 也許你需要多戰項目,如果你的有關模塊2B的討論意味着存在使用模塊2B代替模塊2
  • 也許有關模塊2B的討論解決與模塊如果版本的Web應用程序的另一個版本當您轉向使用模塊2b時,您退出使用模塊2。

它得到重新思考作爲一個頂級神器(一戰,也許)依賴於一些低級別的文物(模塊罐子和核心罐子,也許)。然後這些低級別工件依賴於其他低級別工件。一切都可以依靠第三方罐子。

+0

聽起來不錯。所以,如果我理解正確:**一** **與Spring(和網絡的東西)項目,這取決於具有休眠的'jar'項目'數據庫'。然後,每個「模塊」將取決於「數據庫」項目。 「戰爭」項目將取決於所有需要的「模塊」? ...然後,如果我們想要第二次發佈具有不同配置的應用程序,我們將創建第二個「war」項目,該項目取決於所需的所有模塊。對? –

+0

但是現在還剩下一件事:每個'module'都有自己的'Entities'和'DAOs'。這意味着它們必須包含在'persistence.xml'中。但我不想將它們包含在'數據庫'項目中。數據庫項目**應該環顧這些類的其他模塊。這可能嗎? –

+0

這是否有幫助:http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/orm.html#orm-jpa-multiple-pu –