2012-03-06 87 views
4

建立一個Java /基於servlet war文件我上週發佈了一個問題如何我可以建立相關的模塊,其結果是,有人建議我使用Maven的像常春藤或構建工具。我決定使用Maven來嘗試實現我想要做的事情。我的項目基本上建立了一個部署到Tomcat的war文件。模塊本身是最終戰爭文件的一部分。下面是模塊的結構的一例Maven的 - 從多個模塊

模塊1

customerModule 
    |-webapp 
     |-jsp 
      |-customer 
       |-findCustomer.jsp 
       |-addNewCustomer.jsp 
       |-deleteCustomer.jsp 
    |-src 
     |-com 
      |-mycompany 
       |-customer 
        |-FindCustomerAction.java 
        |-AddCustomerAction.java 
        |-DeleteCustomer.java 

單詞數

productModule 
    |-webapp 
     |-jsp 
      |-product 
       |-productCustomer.jsp 
       |-addNewProduct.jsp 
       |-deleteProduct.jsp 
    |-src 
     |-com 
      |-mycompany 
       |-product    
        |-FindProductAction.java 
        |-AddProductAction.java 
        |-DeleteProduct.java    

單詞數

commonModule 
    |-webapp 
     |-css 
      |-style.css 
     |-jsp 
      |-templates 
       |-coreTemplate.jsp 
    |-src 
     com 
      |-mycomany 
       |-common 
        |-Logger.java 
        |-Access.java 
    |-META-INF 
     |-MANIFEST.MF 
     |-context.xml 
    |-WEB-INF 
     |-lib 
      |-oraclejdbc.lib 
      |-log4j.lib 
      |-common.lib 
     |-struts-config.xml 
     |-tiles-def.xml 
     |-web.xml 

正如你可能看到的,上面將所有共同形成一個應用。我想要做的是以每個模塊的工件結束。由於文件類型的混合(jsp,css,java),我不太確定什麼是合適的工件。下圖顯示了我想結束的戰爭文件的結構。

MyApp.war 
    |-webapp 
     |-css 
      |-style.css 
     |-jsp 
      |-customer 
       |-findCustomer.jsp 
       |-addNewCustomer.jsp 
       |-deleteCustomer.jsp 
      |-product 
       |-productCustomer.jsp 
       |-addNewProduct.jsp 
       |-deleteProduct.jsp  
      |-templates 
       |-coreTemplate.jsp 
    |-META-INF 
     |-MANIFEST.MF 
     |-context.xml 
    |-WEB-INF 
     |-lib 
      |-oraclejdbc.lib 
      |-log4j.lib 
      |-common.lib 
      |-customerModule.jar 
      |-productModule.jar 
     |-classes 
      |-com 
       |-mycomany 
        |-common 
         |-Logger.class 
         |-Access.class 
     |-struts-config.xml 
     |-tiles-def.xml 
     |-web.xml 

有兩點要注意 - 在commonModule的Java文件是建立在結束了WEB-INF/classes中 - 爲customerModule最終成爲一個JAR文件的Java文件WEB-INF/lib目錄 - productModule的java文件最終以WEB-INF/lib中的jar文件結尾 - 所有jsps,css最終位於war文件的根目錄

什麼是我應該存儲工件的最佳方式對於存儲庫中的每個模塊?

  • 我可以用一個jar文件,但這個不能保存HTML類型的文件(JSP,CSS,JS等)
  • 每個模塊(除了commonModule)將包含一個jar文件+ jsp的,css文件。我正在考慮將構建的工件存儲爲zip文件,並在構建MyApp.war以構建war文件時將其解壓縮?
  • 我可以存儲每個模塊,即使只有一個有一個web.xml文件戰爭文件的神器?

我怎樣才能實現這個使用Maven

  • 我一直在調查Maven和發現,有可能有一個多模塊項目結構如下

    MyApp.pom(父項目) commonModule.pom customer.pom product.pom

  • 如果我拉上ŧ他在存儲庫中的模塊如何從父項目中引用它們並解壓縮以構建最終的war文件?

  • 是否有可能自動觸發父項目的構建,如果任何子項目都建?
  • 我還沒有想出如何保持每個子項目的版本。如果我建立客戶項目,如何父項目知道有信息庫中的customer.zip(或.jar)的新版本?
  • 假設庫目前包含以下

    |-productModule.v.0.1.zip

    |-customerModule.v.0.1.zip

    |-commonModule.v.0.1.zip

如果我重建中,customerModule然後重建WAR文件購買建築父項目maven是否重建了存儲庫中的所有其他模塊,即使它們沒有cha nged?這個工作到底如何?

是否有任何一個示例項目演示如何實現上述目標?顯示上述示例的任何鏈接或資源將非常有用。

回答

1

首先你的結構看起來錯誤,導致默認文件夾佈局戰項目的樣子:

+-- pom.xml (war packaging) 
    +-- src/main/java (java Sources) 
    +-- src/main/webapp (jsp pages etc.) 
    +-- src/main/resources (language bundles etc.) 

此外,如果你想用所有的模塊到同一個WAR文件結束了,但你想單獨那些給定的模塊。最好的方法是創建一個多模塊的構建,它看起來像:

root 
    +-- pom.xml (parent of all) 
    +-- mod-war (incl. pom.xml) 
    +-- mod-1 (incl. pom.xml) 
    +-- mod-2 (incl. pom.xml) 

,並依賴於MOD-1和MOD-2的MOD戰POM。這將導致它們被打包成一個單獨的war文件,其中包含單獨的mod-1-VERSION.jar等。這個工件(war文件)可以被部署到適當的存儲庫中,如果需要它本身可以用作依賴關係。

作爲一個例子,你可以看看here

+0

這與「覆蓋」相同嗎? – ziggy 2012-03-06 17:26:10

+0

No. Overlays是一個完全不同的故事。在覆蓋的情況下,你可以做一些不同的戰爭文件的「合併」,看看這裏:http://maven.apache.org/plugins/maven-war-plugin/overlays.html – khmarbaise 2012-03-06 17:48:47

+1

記住,兩者mod-1和mod-2將包含jsp,html,css文件。他們將如何包裝? mod-1.jar是否包含mod-1模塊中的jsp,css文件? – ziggy 2012-03-06 17:56:21

1

老實說,在你的情況下最好的做法是製作一個包含每個單獨戰爭的.ear文件。否則,如果你真的想把所有3次戰爭的資源都集中到一場戰爭中,你應該手動合併它們。 Java EE沒有像這樣合併戰爭的任何規格,所以即使你設法用一些Maven插件/ workAround來完成它仍然不是kusher。

+1

在Tomcat上使用EAR將無法正常工作;-)手動合併它們的選項不是一個真正的選項,因爲您將失去自動構建並且可以通過Maven解決。 – khmarbaise 2012-03-06 13:55:17

+0

是的,它可以通過一些Maven戰術技巧插件解決,但它並不真正符合Java EE。在新的Maven項目中手動合併3個戰爭的資源到一場戰爭中,不會禁用任何Maven自動化。 – 2012-03-06 13:56:58

+0

誤會。我的意思是創造一場包含所有......的單一戰爭。除此之外,你是對的。 – khmarbaise 2012-03-06 14:02:02