2012-03-06 4 views
4

先週、私は依存モジュールを構築する方法について質問を出しました。その結果、MavenやIvyのようなビルドツールを使用することが推奨されました。私はMavenを使って私がやりたいことを達成しようと決めました。私のプロジェクトは基本的にTomcatに配備された単一のwarファイルを作成します。モジュール自体は最終的なwarファイルの一部です。ここでは、モジュールの構成例は、Maven - 複数のモジュールから単一のjava/servletベースのwarファイルを構築する

モジュール1

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

モジュール2

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

モジュール3

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 

あなたはおそらく見ることができるように、上記のすべてをまとめて1を形成しています応用。私がしたいのは、各モジュールのアーティファクトで終わることです。ファイルタイプ(jsp、css、java)が混在しているため、適切なアーティファクトが何であるか分かりません。下の図は、私が最終的に望むwarファイルの構造を示しています。

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 /クラス で終わるされている - customerModule用のJavaファイルは、WEB-INF/libに 内のjarファイルとして終わります - productModuleのjavaファイルは、WEB-INF/libのjarファイルとして終了する - すべてのjsps、cssはwarファイルのルートになります。

アーティファクトを保存する最良の方法は何ですかリポジトリ内のモジュールごとに?

  • jarファイル+ JSP、CSSファイルが含まれています(commonModuleを除く)各モジュールを、私はjarファイルを使用することができますが、これは、HTMLタイプのファイル(JSP、CSS、JSなど)を保持カント
  • 。私は、ビルドされたアーティファクトをzipファイルとして保存し、MyApp.warがwarファイルをビルドするためにビルドされるときにそれを抽出することを考えていますか?
  • web.xmlファイルが1つしかないのに、各モジュールのアーティファクトをwarファイルとして保存できますか?私はMavenの

    • 私はMavenを調査し、次の構造

      MyApp.pomでマルチモジュールプロジェクトを持つことが可能であるかもしれないことが判明しているが(使用してこれを実装するにはどうすればよい

    親プロジェクト) commonModule.pom customer.pom product.pom

  • 私はトンをzip形式で圧縮した場合彼はリポジトリ内のモジュールをどのように親プロジェクトから参照し、それらを解凍して最終的なwarファイルを作成しますか?

  • 子プロジェクトのいずれかがビルドされている場合、親プロジェクトのビルドを自動的にトリガーすることはできますか?
  • 私はそれぞれの子プロジェクトのバージョンを維持する方法を理解していません。私が顧客プロジェクトをビルドすると、親プロジェクトはリポジトリに新しいバージョンのcustomer.zip(または.jar)があることをどのように知っていますか?私は、customerModuleを再構築して、warファイルは、親プロジェクトをビルド購入再構築する場合、リポジトリを想定し
  • は現在、次の

    |-productModule.v.0.1.zip

    |-customerModule.v.0.1.zip

    |-commonModule.v.0.1.zip

が含まれています、mavenはchaを持っていなくてもリポジトリ内の他のすべてのモジュールを再構築しますnged?これはどのくらい正確に機能しますか?

上記の達成方法を示すサンプルプロジェクトはどこにありますか?上記の例を示すリンクやリソースは非常に便利です。

答えて

1

まず、あなたの構造が間違って見え、戦争のプロジェクトのデフォルトのフォルダのレイアウトを起こすようになります:あなたは同じwarファイルにすべてのモジュールで終わるしたいが、あなたが分離したい場合はさらに

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

それらは与えられたモジュールです。

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-戦争ポンポンで作る:最良の方法は次のようになり、マルチモジュールのビルドを作成することです。別のmod-1-VERSION.jarなどを含む単一のwarファイルにパッケージ化されます。このアーティファクト(warファイル)は、必要に応じて依存関係として使用できる適切なリポジトリに展開できます。

例としてhereを見ることができます。

+0

これは「オーバーレイ」と同じですか? – ziggy

+0

いいえ、オーバーレイは全く別の話です。オーバーレイの場合は、さまざまなwarファイルの "マージ"の一種を行います:http://maven.apache.org/plugins/maven-war-plugin/overlays.html – khmarbaise

+1

mod-1とmod-2にはjsp、html、cssファイルが含まれます。彼らはどのようにパッケージ化されますか? mod-1.jarにはmod-1モジュールのjsp、cssファイルが含まれていますか? – ziggy

1

あなたの状況で最善のことは、個々の戦争を含む.earファイルを作成することです。それ以外の場合、3つのすべての戦争のリソースを1つの戦争に実際に組み入れるには、それらを手動でマージする必要があります。 Java EEにはこのような戦争をマージするためのスペックはありません。たとえあなたがMavenプラグイン/ workAroundでそれをやっていても、まだそれは何かクッシャーではありません。

+1

TomcatでEARを使用してもうまくいきません;-)手動でマージするオプションは実際のオプションではありません。自動ビルドを失い、Mavenで解決できるからです。 – khmarbaise

+0

はい、それはいくつかのMavenの戦利品のプラグインを介して解決できますが、それは実際にJava EEに準拠していません。新しいMavenプロジェクトで3つの戦争のリソースを手動で単一の戦争にマージしても、Mavenの自動化は無効になりません。 –

+0

誤解。私はすべてのものを含む単一の戦争の創造を意味しました。あなたが正しいものからのものです。 – khmarbaise

関連する問題