2011-06-30 8 views
3

私はMavenの依存システムを考えていましたが、私は自分自身に質問しました.Webアプリケーション(* warファイル)に依存する可能性はありますか? 私はアプリケーションのコアモジュールを通常のWebアプリケーションとして維持したいと思います。より具体的な実装では、コアを依存関係として使用して拡張します。顧客2 に対する顧客1つの WebアプリケーションへのMaven依存性

  • ConcreteProject2.war //フロントエンド用

    1. Core.war //バックエンド
    2. ConcreteProject1.war //フロントエンド:

      例えば、私は以下の持っています

    具体的なプロジェクトはCore.warに依存し、すべてのWebページ、他のリソース、ソースファイルなどを含むはずですが、コンテキストパス内で同じ名前のファイルが存在する場合、具体的なプロジェクトは元のプロジェクトを上書きする必要があります。そのようなファイルをマージすることができれば、さらにうれしいでしょう!たとえばクライアントの特別な処理のためにカスタムファイルとマージされるログ設定ファイル。それが本当に便利な多くのユースケースがあります。

    誰も私のビルドプロセスでこのような動作を得るために何ができるのかをヒントできますか?コアおよびWeb Module1を、あなたは彼らが最後の戦争で組み立て持っている必要があること -

  • +0

    !私は依存関係を今テストしましたが、いくつかのファイルのマージのようなものを定義することも可能ですか? database.propertiesにはusername、passwordなどが必要ですが、すべての設定は必要ありません。 –

    答えて

    2

    あなたはこれらの線に沿って何かを必要とする...

    は、次の2つのモジュールを持っていると言います。

    コアのPOM:

    <project> 
    
        <groupId>com.foo</groupId> 
        <artifactId>core</artifactId> 
        <packaging>war</packaging> 
    
        <build> 
         <plugins> 
          <plugin> 
           <groupId>org.apache.maven.plugins</groupId> 
           <artifactId>maven-war-plugin</artifactId> 
           <configuration> 
            <archiveClasses>false</archiveClasses> 
            <webXml>${basedir}/src/main/webapp/WEB-INF/web.xml</webXml> 
    
            <webappDirectory>${project.build.directory}/mywebapp</webappDirectory> 
           </configuration> 
          </plugin> 
    
         </plugins> 
        </build> 
    
    </project> 
    

    コアに依存モジュールのPOM:

    <project> 
    
        <modelVersion>4.0.0</modelVersion> 
    
        <groupId>com.foo</groupId> 
        <artifactId>web-module1</artifactId> 
        <packaging>war</packaging> 
    
        <build> 
         <plugins> 
          <plugin> 
           <groupId>org.apache.maven.plugins</groupId> 
           <artifactId>maven-war-plugin</artifactId> 
           <configuration> 
            <packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes> 
    
            <overlays> 
             <overlay> 
              <excludes> 
               <exclude>**/web.xml</exclude> 
              </excludes> 
             </overlay> 
            </overlays> 
           </configuration> 
          </plugin> 
    
         </plugins> 
        </build> 
    
        <dependencies> 
         <dependency> 
          <groupId>${project.groupId}</groupId> 
          <artifactId>core</artifactId> 
          <version>${project.version}</version> 
          <scope>provided</scope> 
          <type>war</type> 
         </dependency> 
        </dependencies> 
    
    </project> 
    

    アセンブリ:私はちょうどそれが実際に動作することを実現

    <project> 
    
        <modelVersion>4.0.0</modelVersion> 
    
        <groupId>com.foo</groupId> 
        <artifactId>web-assembly</artifactId> 
        <packaging>war</packaging> 
    
        <build> 
         <plugins> 
          <plugin> 
           <groupId>org.apache.maven.plugins</groupId> 
           <artifactId>maven-war-plugin</artifactId> 
           <configuration> 
            <archiveClasses>false</archiveClasses> 
            <webXml>${basedir}/src/main/webapp/WEB-INF/web.xml</webXml> 
    
            <webResources> 
             <resource> 
              <directory>${basedir}/src/main/webapp/WEB-INF</directory> 
              <includes> 
               <include>*.xml</include> 
              </includes> 
              <targetPath>WEB-INF</targetPath> 
             </resource> 
            </webResources> 
    
            <webappDirectory>${project.build.directory}/mywebapp</webappDirectory> 
            <packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes> 
    
            <overlays> 
             <overlay> 
              <excludes> 
               <exclude>**/web.xml</exclude> 
              </excludes> 
             </overlay> 
            </overlays> 
           </configuration> 
          </plugin> 
    
         </plugins> 
        </build> 
    
        <dependencies> 
         <dependency> 
          <groupId>com.foo</groupId> 
          <artifactId>core</artifactId> 
          <version>${project.version}</version> 
          <type>war</type> 
         </dependency> 
         <dependency> 
          <groupId>com.foo</groupId> 
          <artifactId>web-module1</artifactId> 
          <version>${project.version}</version> 
          <type>war</type> 
         </dependency> 
        </dependencies> 
    
    </project> 
    
    +0

    ありがとう、それは本当にいいね。 configsなどのファイルをマージする方法もありますか? –

    +0

    まあ、ある方法がありますが、私はそれを避けます。私が知っている限り、あなたは貨物のプラグイン、またはそのようなものを使用することができます。私が通常行っていることは、それぞれのモジュール内にリソースがあり、モジュールの設定だけに関係することです。アセンブリでは、私は完全な設定を持っています。たとえば、web.xmlの場合。 – carlspring