プライマリ・コンテンツに移動
Oracle® Fusion Middleware継続的統合によるアプリケーションの開発
12c (12.2.1.2)
E82652-01
目次へ移動
目次

前
次

15 Mavenを使用した実際のアプリケーションのビルド

多くの実際のアプリケーションには、様々なランタイム環境にデプロイすることを目的としたモジュールが含まれています。たとえば、Coherenceキャッシュに格納されているデータを使用するWebアプリケーションがあります。

この章では、そのようなWebアプリケーションのビルド方法について説明します。

内容は次のとおりです。

15.1 Mavenアプリケーション例の紹介

この章でビルドするアプリケーション例では、Webページ上にユーザーのリストが名前と年齢とともに表示されます。新規個人を追加することもできます。人々の詳細はCoherenceキャッシュに格納されます。

このアプリケーションには、次の要素があります。

  • ポータブル・オブジェクトに組み込む必要があるPerson POJO (Plain Old Java Object)、キャッシュにアクセスするためのユーティリティ・クラス、およびCoherenceキャッシュ定義が含まれるCoherence GARプロジェクト。

  • サーブレットとデプロイメント・ディスクリプタが含まれた、WARに組み込む必要があるJava EE Webアプリケーション

  • GARおよびWARをEARにアセンブルし、そのEARをWebLogic Serverにデプロイするプロジェクト

この例では、モジュール間に依存性がある複数モジュールのMavenプロジェクトをビルドする方法、アプリケーション全体が含まれたデプロイ可能EARファイルにアプリケーション・コンポーネントをアセンブルする方法を確認できます。

この章の目的は、Mavenを使用してアプリケーション全体をビルドする方法を示すことであり、WebアプリケーションまたはCoherenceアプリケーションの記述方法をデモンストレーションすることではないため、例自体の内容は、サーブレットおよびcoherenceコードの観点から見れば非常に基本的なものです。詳細は、Mavenを使用したWebLogic ServerのJava EEプロジェクトのビルドと、Mavenを使用したOracle Coherenceプロジェクトのビルドを参照してください。

15.2 複数モジュールのMavenプロジェクトについて

Mavenを使用すると、複数のモジュールを持つプロジェクトを作成できます。各モジュールは、別のMavenプロジェクトで有効です。最上位レベルには、モジュールに関する情報をMavenに示し、アプリケーション全体を1つのMavenコマンドでビルドできるPOMファイルがあります。

各モジュールは、最上位プロジェクトのルートのサブディレクトリに配置されます。この例では、最上位プロジェクトはmy-real-appと呼ばれ、3つのモジュールはmy-real-app-garmy-real-app-warおよびmy-real-app-earです。プロジェクトのMaven座標は、次のとおりです。

GroupId ArtifactId バージョン パッケージ化

org.mycompany

my-real-app

1.0-SNAPSHOT

pom

org.mycompany

my-real-app-gar

1.0-SNAPSHOT

gar

org.mycompany

my-real-app-war

1.0-SNAPSHOT

war

org.mycompany

my-real-app-ear

1.0-SNAPSHOT

ear

アプリケーションを構成しているファイルは、次のとおりです。

pom.xml

my-real-app-gar/pom.xml
my-real-app-gar/src/main/resources/META-INF/pof-config.xml
my-real-app-gar/src/main/resources/META-INF/coherence-application.xml
my-real-app-gar/src/main/resources/META-INF/cache-config.xml
my-real-app-gar/src/main/java/org/mycompany/CacheWrapper.java
my-real-app-gar/src/main/java/org/mycompany/Person.java

my-real-app-war/pom.xml
my-real-app-war/src/main/webapp/WEB-INF/web.xml
my-real-app-war/src/main/java/org/mycompany/servlets/MyServlet.java

my-real-app-ear/pom.xml
my-real-app-ear/src/main/application/META-INF/weblogic-application.xml

最上位レベルでは、POMファイルは3つのモジュールを指しています。

  • my-real-app-garディレクトリには、Coherence GARプロジェクトが含まれています。独自のPOM、Coherence構成ファイル、POJO/POFクラス定義(Person.java)、キャッシュへのアクセスに必要なユーティリティ・クラス(CacheWrapper.java)が含まれています。

  • my-real-app-warディレクトリには、Webアプリケーションが含まれています。独自のPOM、サーブレットおよびデプロイメント・ディスクリプタが含まれています。このプロジェクトは、my-real-app-garプロジェクトに依存します。

  • my-real-app-earディレクトリには、EARファイルのデプロイメント・ディスクリプタ、およびEARをビルドおよびデプロイするためのPOMファイルが含まれています。

15.3 Mavenプロジェクトのビルド

サンプル・プロジェクトをビルドするには、ディレクトリを作成し、GAR、WARおよびEARプロジェクトを作成します。

この項には次のトピックが含まれます:

15.3.1 プロジェクトのディレクトリの作成

次のコマンドを使用して、プロジェクトを保持するためのディレクトリを作成します。

mkdir my-real-app

この章の残りの部分では、このディレクトリに対する相対パスが示されます。

15.3.2 GARプロジェクトの作成

この項には次のトピックが含まれます:

15.3.2.1 初期GARプロジェクトの作成

Maven原型からのCoherenceプロジェクトの作成で説明しているように原型を使用するか、またはディレクトリおよびファイルを手動で作成して、GARプロジェクトを作成できます。

  • 原型を使用するには、次のコマンドを実行します。

    mvn archetype:generate
        -DarchetypeGroupId=com.oracle.coherence.archetype
        -DarchetypeArtifactId=gar-maven-archetype
        -DarchetypeVersion=12.2.1-0-0
        -DgroupId=org.mycompany
        -DartifactId=my-real-app-gar
        -Dversion=1.0-SNAPSHOT
    
  • プロジェクトを手動で作成するには、次のコマンドを使用して、必要なディレクトリを作成します。

    mkdir -p my-real-app-gar/src/main/resources/META-INF
    mkdir -p my-real-app-gar/src/main/java/org/mycompany

15.3.2.2 POMファイルの作成または変更

原型を使用する場合、POMファイルはすでに存在します。次の例に一致するようにファイルを変更します。プロジェクトを手動で作成する場合は、次の内容のPOMファイル(my-real-app-gar/pom.xml)を作成します。

<project xmlns="http://maven.apache.org/POM/4.0.0"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.mycompany</groupId>
  <artifactId>my-real-app-gar</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>gar</packaging>
  <parent>
    <groupId>org.mycompany</groupId>
    <artifactId>my-real-app</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <dependencies>
    <dependency>
      <groupId>com.oracle.coherence</groupId>
      <artifactId>gar-maven-plugin</artifactId>
      <version>12.2.1-0-0</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>com.oracle.coherence</groupId>
          <artifactId>gar-maven-plugin</artifactId>
          <version>${coherence.version}</version>
          <extensions>true</extensions>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>com.oracle.coherence</groupId>
        <artifactId>gar-maven-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
            <generatePof>true</generatePof>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

POMファイルを調べて、ファイルの各部分について理解します。

  • このプロジェクトのMaven座標は、次のように設定されます。

      <groupId>org.mycompany</groupId>
      <artifactId>my-real-app-gar</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>gar</packaging>
    

    Coherence Mavenプラグインを使用してこのプロジェクトをCoherence GARファイルにビルドするため、パッケージ化がgarであることに注意してください。

  • 親プロジェクトの座標が設定されます。これらの座標は、最上位プロジェクトを指します。最上位プロジェクトのPOMを後の手順で作成する必要があります。

      <parent>
        <groupId>org.mycompany</groupId>
        <artifactId>my-real-app</artifactId>
        <version>1.0-SNAPSHOT</version>
      </parent>
    
  • dependenciesセクションは、このプロジェクトが持っている依存性を示しています。この場合、Coherenceライブラリ、つまりcom.oracle.coherence:coherence:12.2.1-0-0にのみ依存します。スコープprovidedは、このライブラリが単にコンパイル用であり、ランタイム環境ですでに提供されているため、ビルドするアーティファクト(GARファイル)でパッケージ化する必要がないことを意味します。

      <dependencies>
        <dependency>
          <groupId>com.oracle.coherence</groupId>
          <artifactId>gar-maven-plugin</artifactId>
          <version>12.2.1-0-0</version>
          <scope>provided</scope>
        </dependency>
      </dependencies>
    
  • pluginManagementセクションは、このプラグインの拡張を有効にするようMavenに示します。MavenでGARファイルをターゲット・アーティファクト・タイプとして認識できるようにする必要があります。

      <pluginManagement>
          <plugins>
            <plugin>
              <groupId>com.oracle.coherence</groupId>
              <artifactId>gar-maven-plugin</artifactId>
              <version>${coherence.version}</version>
              <extensions>true</extensions>
            </plugin>
          </plugins>
        </pluginManagement>
    
  • pluginsセクションには、Coherence GARプラグインに渡す必要がある情報が含まれています。この場合、generatePoftrueに設定して、プラグインでPOF注釈付きPOJOが検索され、必要なアーティファクトが生成されるようにする必要があります。

      <plugins>
          <plugin>
            <groupId>com.oracle.coherence</groupId>
            <artifactId>gar-maven-plugin</artifactId>
            <extensions>true</extensions>
            <configuration>
                <generatePof>true</generatePof>
            </configuration>
          </plugin>
        </plugins>

15.3.2.3 Coherenceの構成ファイルの作成または変更

GARプロジェクトに必要なCoherence構成ファイルは3つあります。原型を使用する場合、ファイルはすでに存在しますが、次の例に一致するように変更する必要があります。プロジェクトを手動で作成する場合は、次に示す場所にこれらのファイルを作成します。

my-real-app-gar/src/main/resources/META-INF/pof-config.xml
my-real-app-gar/src/main/resources/META-INF/coherence-application.xml
my-real-app-gar/src/main/resources/META-INF/cache-config.xml
  • pof-config.xmlファイルの内容を次の例に示します。

    <?xml version="1.0"?>
    <pof-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xmlns="http://xmlns.oracle.com/coherence/coherence-pof-config"
                xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-pof  -config coherence-pof-config.xsd">
    <user-type-list>
      <!-- by default just include coherence POF user types -->
      <include>coherence-pof-config.xml</include>   
    </user-type-list>
    </pof-config>
    

    このファイルは、原型を使用して作成した場合、変更する必要がほとんどないか、またはまったくありません。

  • coherence-application.xmlファイルの内容を次の例に示します。

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <coherence-application xmlns="http://xmlns.oracle.com/weblogic/coherence-application">
      <cache-configuration-ref>META-INF/cache-config.xml</cache-configuration-ref>
      <pof-configuration-ref>META-INF/pof-config.xml</pof-configuration-ref>
    </coherence-application>
    

    このファイルは、原型を使用して作成した場合、変更する必要がほとんどないか、またはまったくありません。

  • 原型を使用した場合、cache-config.xmlファイルを更新する必要があります。

    このファイルでは、Peopleという名前のキャッシュおよびreal-distributed-garという名前のキャッシュ・スキームを作成し、(ローカル・バッキング・スキームを使用し、自動的に開始される)RealDistributedCacheという名前のサービスを作成します。これらの用語に詳しくない場合は、Mavenを使用したOracle Coherenceプロジェクトのビルドを参照してください。ファイルの例を次に示します。

    <?xml version="1.0"?>
    <cache-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xmlns="http://xmlns.oracle.com/coherence/coherence-cache-config"
                  xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config coherence-cache-config.xsd">
    
    <caching-scheme-mapping>
        <cache-mapping>
          <cache-name>People</cache-name>
          <scheme-name>real-distributed-gar</scheme-name>
        </cache-mapping>
      </caching-scheme-mapping>
    
    <caching-schemes>
        <distributed-scheme>
          <scheme-name>real-distributed-gar</scheme-name>
          <service-name>RealDistributedCache</service-name>
          <backing-map-scheme>
            <local-scheme/>
          </backing-map-scheme>
          <autostart>true</autostart>
        </distributed-scheme>
      </caching-schemes>
    </cache-config>

15.3.2.4 ポータブル・オブジェクトの作成

キャッシュに情報を格納するPersonオブジェクトを作成します。新しいJavaクラスを次の場所に作成します。

my-real-app-gar/src/main/java/org/mycompany/Person.java

クラスの内容を次に示します。

package org.mycompany;
import com.tangosol.io.pof.annotation.Portable;
import com.tangosol.io.pof.annotation.PortableProperty;
@Portable
public class Person {
  @PortableProperty(0)
  public String name;
  @PortableProperty(1)
  public int age;
 
  public Person() {}
  public Person(String name, int age) {
    this.name = name;
    this.age = age;
  }
 public String getName() { return this.name; }
  public int    getAge()  { return this.age;  }
}

POJOは、このクラスで何を実行するかをCoherenceに示します。この章では、Mavenを使用したアプリケーションのビルドに焦点を当てているため、Coherenceアプリケーションの記述の詳細には触れていません。Coherenceの詳細は、Mavenを使用したOracle Coherenceプロジェクトのビルドを参照してください。

15.3.2.5 キャッシュにアクセスするためのラッパー・クラスの作成

キャッシュのアクセスに使用できる小さなラッパー・クラスを作成します。別のJavaクラスを次の場所に作成します。

my-real-app-gar/src/main/java/org/mycompany/CacheWrapper.java

クラスの内容を次に示します。

package org.mycompany;
import org.mycompany.Person;
import com.tangosol.net.CacheFactory;
import java.util.Set;
public class CacheWrapper {
  private static CacheWrapper INSTANCE;
  public Set getPeople() {
    return CacheFactory.getCache("People").entrySet();
  }
  public void addPerson(int personid, String name, int age) {
    CacheFactory.getCache("People").put(personid, new Person(name, age));
  }
  public static final CacheWrapper getInstance() {
    if(INSTANCE == null) INSTANCE = new CacheWrapper();
    return INSTANCE;
  }
}

後で、このクラスをサーブレットで使用して、キャッシュからデータを取得したり、新しいデータをキャッシュに追加することができます。

15.3.3 WARプロジェクトの作成

この項には次のトピックが含まれます:

15.3.3.1 初期WARプロジェクトの作成

「Mavenを使用したWebLogic ServerのJava EEプロジェクトのビルド」で説明しているように原型を使用するか、またはディレクトリおよびファイルを手動で作成して、WARプロジェクトを作成できます。

  • 原型を使用するには、次のコマンドを実行します。

    mvn archetype:generate
        -DarchetypeArtifactId=basic-webapp
        -DarchetypeVersion=12.2.1-0-0
        -DgroupId=org.mycompany
        -DartifactId=my-real-app-war
        -Dversion=1.0-SNAPSHOT
    

    原型を使用する場合は、プロジェクトに含まれている不要なファイルをすべて削除する必要があります。

  • プロジェクトを手動で作成するには、次のコマンドを使用して、必要なディレクトリを作成します。

    mkdir -p my-real-app-war/src/main/webapp/WEB-INF
    mkdir -p my-real-app-war/src/main/java/org/mycompany/servlets

15.3.3.2 POMファイルの作成または変更

原型を使用する場合は、POMファイルがすでに存在します。次の例に一致するようにファイルを変更します。プロジェクトを手動で作成した場合は、次の内容のPOMファイル(my-real-app-war/pom.xml)を作成します。

<project>
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.mycompany</groupId>
   <artifactId>my-real-app-war</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>war</packaging>
   <parent>
      <groupId>org.mycompany</groupId>
      <artifactId>my-real-app</artifactId>
      <version>1.0-SNAPSHOT</version>
   </parent>
   <name>my-real-app-war</name>
   <dependencies>
       <dependency>
           <groupId>org.mycompany</groupId>
           <artifactId>my-real-app-gar</artifactId>
           <version>1.0-SNAPSHOT</version>
           <scope>provided</scope>
       </dependency>
       <dependency>
           <groupId>javax.servlet</groupId>
           <artifactId>javax.servlet-api</artifactId>
           <version>3.0.1</version>
           <scope>provided</scope>
       </dependency>
   </dependencies>
</project>

POMファイルを調べて、ファイルの各部分について理解します。

  • このプロジェクトの座標を設定する必要があります。このプロジェクトのパッケージ化はwarであることに注意してください。

       <groupId>org.mycompany</groupId>
       <artifactId>my-real-app-war</artifactId>
       <version>1.0-SNAPSHOT</version>
       <packaging>war</packaging>
    
  • GARプロジェクトの場合と同様に親を定義します。

       <parent>
          <groupId>org.mycompany</groupId>
          <artifactId>my-real-app</artifactId>
          <version>1.0-SNAPSHOT</version>
       </parent>
    
  • このプロジェクトの依存性をリストします。この場合、2つの依存性があります(POJOおよびそこで定義されたユーティリティ・クラスにアクセスするためのGARプロジェクト、およびサーブレットAPI)。これにより、Webアプリケーションの表示名が設定されます。

       <dependencies>
           <dependency>
               <groupId>org.mycompany</groupId>
               <artifactId>my-real-app-gar</artifactId>
               <version>1.0-SNAPSHOT</version>
               <scope>provided</scope>
           </dependency>
           <dependency>
               <groupId>javax.servlet</groupId>
               <artifactId>javax.servlet-api</artifactId>
               <version>3.0.1</version>
               <scope>provided</scope>
           </dependency>
       </dependencies>

15.3.3.3 デプロイメント・ディスクリプタの作成

Webアプリケーションには、Webアプリケーションのdisplay-nameを設定する単純なJava EEデプロイメント・ディスクリプタがあります。これは、次の場所に格納されています。

my-real-app-war/src/main/webapp/WEB-INF/web.xml

このファイルの内容を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

   <display-name>my-real-app-war</display-name>

</web-app>

15.3.3.4 サーブレットの作成

サーブレットを作成するには、次のようにMyServlet.javaファイルを検索します。

my-real-app-war/src/main/java/org/mycompany/servlets/MyServlet.java

サーブレットでは、現在キャッシュ内に存在する個人のリストが表示され、新規個人をキャッシュに追加できます。この項の目的は、Mavenを使用してこれらのタイプのアプリケーションをビルドする方法を学習することであり、Java EE Webアプリケーションの記述方法を学習することではないため、単純なサーブレットを使用しています。

サーブレット・クラスの内容を次に示します。

package org.mycompany.servlets;
import org.mycompany.Person;
import org.mycompany.CacheWrapper;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
import java.util.Set;
import java.util.Iterator;
@WebServlet(name = "MyServlet", urlPatterns = "MyServlet")
public class MyServlet extends HttpServlet {
  protected void doPost(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
    String id = request.getParameter("id");
    String name = request.getParameter("name");
    String age = request.getParameter("age");
    if (name == null || name.isEmpty()
        || age == null || age.isEmpty()
        || id == null || id.isEmpty()) {
      // no need to add a new entry
    } else {
      // we have a new entry - so add it
      CacheWrapper.getInstance().addPerson(Integer.parseInt(id), name, Integer.parseInt(age));
    }
    renderPage(request, response);
  }
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
    renderPage(request, response);
  }
  private void renderPage(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
    // get the data
    Set people = CacheWrapper.getInstance().getPeople();
    PrintWriter out = response.getWriter();
    out.write("<html><head><title>MyServlet</title></head><body>");
    out.write("<h2>Add a new person</h2>");
    out.write("<form name=\"myform\" method=\"POST\">");
    out.write("ID:<input type=\"text\" name=\"id\"/><br/>");
    out.write("Name:<input type=\"text\" name=\"name\"/><br/>");
    out.write("Age:<input type=\"text\" name=\"age\"/><br/>");
    out.write("<input type=\"submit\" name=\"submit\" value=\"add\"/>");
    out.write("</form>");
    out.write("<h2>People in the cache now</h2>");
    out.write("<table><tr><th>ID</th><th>Name</th><th>Age</th></tr>");
    // for each person in data
    if (people != null) {
      Iterator i = people.iterator();
      while (i.hasNext()) {
        Map.Entry entry = (Map.Entry)i.next();
        out.write("<tr><td>"
          + entry.getKey()
          + "</td><td>"
          + ((Person)entry.getValue()).getName()
          + "</td><td>"
          + ((Person)entry.getValue()).getAge()
          + "</td></tr>");
      }
    }
    out.write("</table></body></html>");
  }
}

ユーザーがフォームにデータを入力したかどうかをチェックします。その場合は、そのデータを使用して新規個人をキャッシュに追加します。このアプリケーションでは、最小限のエラー処理しか行われないことに注意してください。新規個人をキャッシュに追加するには、GARプロジェクトで作成したCacheWrapperクラスでaddPerson()メソッドを使用します。

キャッシュの内容を表に出力します。この例では、キャッシュに含まれているエントリが十分に少ないと想定し、CacheWrapperクラスのgetPeople()メソッドを使用してすべてを読み取ります。

15.3.4 EARプロジェクトの作成

EARプロジェクトは、EARへのWARおよびGARのアセンブルを管理します。

この項には次のトピックが含まれます:

15.3.4.1 初期EARプロジェクトの作成

次のコマンドを使用して、EARプロジェクトを手動で作成します。

mkdir -p my-real-app-ear/src/main/application/META-INF

このプロジェクトには、次の2つのファイル(POMファイルとデプロイメント・ディスクリプタ)があります。

my-real-app-ear/pom.xml
my-real-app-ear/src/main/application/META-INF/weblogic-application.xml

15.3.4.2 アプリケーション例のPOMファイルについて

POMファイルの内容を次に示します。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.mycompany</groupId>
   <artifactId>my-real-app-ear</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>ear</packaging>
   <parent>
      <groupId>org.mycompany</groupId>
      <artifactId>my-real-app</artifactId>
      <version>1.0-SNAPSHOT</version>
   </parent>
   <name>ear assembly</name>
   <dependencies>
      <dependency>
        <groupId>org.mycompany</groupId>
        <artifactId>my-real-app-gar</artifactId>
        <version>1.0-SNAPSHOT</version>
        <type>gar</type>
        <scope>optional</scope>
      </dependency>
      <dependency>
         <groupId>org.mycompany</groupId>
         <artifactId>my-real-app-war</artifactId>
         <version>1.0-SNAPSHOT</version>
         <type>war</type>
      </dependency>
   </dependencies>
   <build>
      <plugins>
         <plugin>
            <artifactId>maven-ear-plugin</artifactId>
            <configuration>
               <archive>
                  <manifest>
                     <addClasspath>true</addClasspath>
                  </manifest>
               </archive>
               <artifactTypeMappings>
                  <artifactTypeMapping type="gar" mapping="jar"/>
               </artifactTypeMappings>
            </configuration>
         </plugin>
         <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-dependency-plugin</artifactId>
             <executions>
                <execution>
                    <id>copy-gar-locally</id>
                    <phase>prepare-package</phase>
                    <goals>
                       <goal>copy</goal>
                    </goals>
                    <configuration>
                       <artifactItems>
                           <artifactItem>
                              <groupId>org.mycompany</groupId>
                              <artifactId>my-real-app-gar</artifactId>
                              <version>1.0-SNAPSHOT</version>
                              <type>gar</type>
                          </artifactItem>
                      </artifactItems>
                    </configuration>
                  </execution>
               </executions>
          </plugin>
        <plugin>
          <groupId>com.oracle.weblogic</groupId>
          <artifactId>weblogic-maven-plugin</artifactId>
          <version>12.2.1-0-0</version>
          <executions>
            <!--Deploy the application to the server-->
            <execution>
              <phase>pre-integration-test</phase>
              <goals>
                <goal>deploy</goal>
              </goals>
              <configuration>
                <adminurl>t3://127.0.0.1:7001</adminurl>
                <user>weblogic</user>
                <password>welcome1</password>
                <middlewareHome>/home/mark/space/maven/wls030213</middlewareHome>
                <!--The location of the file or directory to be deployed-->
                <source>${project.build.directory}/${project.build.finalName}.${project.packaging}</source>
                <!--The target servers where the application is deployed-->
                <targets>AdminServer</targets>
                <verbose>true</verbose>
                <name>${project.build.finalName}</name>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
   </build>
</project>

POMファイルを調べて、ファイルの各部分について理解します。

  • 次のように、このプロジェクトのMaven座標を設定し、親を指すように設定します。

       <groupId>org.mycompany</groupId>
       <artifactId>my-real-app-ear</artifactId>
       <version>1.0-SNAPSHOT</version>
       <packaging>ear</packaging>
       <parent>
          <groupId>org.mycompany</groupId>
          <artifactId>my-real-app</artifactId>
          <version>1.0-SNAPSHOT</version>
       </parent>
    
  • WARプロジェクトとGARプロジェクトの依存性が示されます。

       <dependencies>
          <dependency>
            <groupId>org.mycompany</groupId>
            <artifactId>my-real-app-gar</artifactId>
            <version>1.0-SNAPSHOT</version>
            <type>gar</type>
            <scope>optional</scope>
          </dependency>
          <dependency>
             <groupId>org.mycompany</groupId>
             <artifactId>my-real-app-war</artifactId>
             <version>1.0-SNAPSHOT</version>
             <type>war</type>
          </dependency>
       </dependencies>
    
  • 3つの個別のプラグイン構成の1番目はmaven-ear-pluginが対象です。次の例のようにartifactTypeMappingを追加して、garファイルをjarファイルのように処理するよう指定する必要があります。

           <plugin>
                <artifactId>maven-ear-plugin</artifactId>
                <configuration>
                   <archive>
                      <manifest>
                         <addClasspath>true</addClasspath>
                      </manifest>
                   </archive>
                   <artifactTypeMappings>
                      <artifactTypeMapping type="gar" mapping="jar"/>
                   </artifactTypeMappings>
                </configuration>
            </plugin>
    
  • 2番目のプラグイン構成はmaven-dependency-pluginが対象です。GARファイルをmy-real-app-garプロジェクトの出力(target)ディレクトリからEARプロジェクトにコピーするようにこれを構成します。

            <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-dependency-plugin</artifactId>
                 <executions>
                    <execution>
                        <id>copy-gar-locally</id>
                        <phase>prepare-package</phase>
                        <goals>
                           <goal>copy</goal>
                        </goals>
                        <configuration>
                           <artifactItems>
                               <artifactItem>
                                  <groupId>org.mycompany</groupId>
                                  <artifactId>my-real-app-gar</artifactId>
                                  <version>1.0-SNAPSHOT</version>
                                  <type>gar</type>
                              </artifactItem>
                          </artifactItems>
                        </configuration>
                      </execution>
                   </executions>
               </plugin>
    
  • 3番目のプラグイン構成はweblogic-maven-pluginが対象です。生成されるEARファイルのデプロイ方法をここで指定します。この項では、環境に一致するようにadminurluserpasswordおよびtargetの各パラメータを更新する必要があります。これらのパラメータの詳細は、表10-1を参照してください。

            <plugin>
              <groupId>com.oracle.weblogic</groupId>
              <artifactId>weblogic-maven-plugin</artifactId>
              <version>12.2.1-0-0</version>
              <executions>
                <!--Deploy the application to the server-->
                <execution>
                  <phase>pre-integration-test</phase>
                  <goals>
                    <goal>deploy</goal>
                  </goals>
                  <configuration>
                    <adminurl>t3://127.0.0.1:7001</adminurl>
                    <user>weblogic</user>
                    <password>welcome1</password>
                    <!--The location of the file or directory to be deployed-->
                    <source>${project.build.directory}/${project.build.finalName}.${project.packaging}</source>
                    <!--The target servers where the application is deployed-->
                    <targets>AdminServer</targets>
                    <verbose>true</verbose>
                    <name>${project.build.finalName}</name>
                  </configuration>
                </execution>
              </executions>
            </plugin>
    

POMプロジェクトが完了したら、デプロイメント・ディスクリプタを追加します。

15.3.4.3 アプリケーション例のデプロイメント・ディスクリプタについて

EARファイルのWebLogicデプロイメント・ディスクリプタは、次のファイルにあります。

my-real-app-ear/src/main/application/META-INF/weblogic-application.xml

内容を次に示します。

<weblogic-application>
       <module>
             <name>GAR</name>
             <type>GAR</type>
             <path>my-real-app-gar-1.0-SNAPSHOT.gar</path>
       </module>
</weblogic-application>

このデプロイメント・ディスクリプタでは、EARファイル内でGARファイルが配置されている場所、およびその呼び名に関する詳細が示されます。

15.3.5 最上位POMの作成

最上位POMを作成します。これは、アプリケーションのルート・ディレクトリ内のpom.xmlファイルにあり、その内容は次のとおりです。

<project>
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.mycompany</groupId>
   <artifactId>my-real-app</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>pom</packaging>
   <name>my-real-app</name>
   <modules>
      <module>my-real-app-war</module>
      <module>my-real-app-gar</module>
      <module>my-real-app-ear</module>
   </modules>
   <properties>
       <coherence.version>12.2.1-0-0</coherence.version>
   </properties>
</project>

プロジェクトの座標を設定します。これらは3つの各プロジェクトで指定した親座標に一致します。パッケージ化がpomであることに注意してください。これにより、modulesセクションで指定しているように、このプロジェクトが一連のサブプロジェクトのアセンブリであることがMavenに示されます。

3つのサブプロジェクトそれぞれに1つのmoduleエントリがあります。

このPOMは他の3つの親であり、POMはそれらの親から継承されるため、一般的なプロパティをこのPOMに追加でき、それらのプロパティは3つのサブプロジェクトすべてで利用できるようになります。この場合、プロパティcoherence.versionを追加します。

15.3.6 Mavenを使用したアプリケーションのビルド

これで、次のコマンドを(最上位ディレクトリmy-real-appで)1つ以上使用して、Mavenによるアプリケーションのビルドを実行できるようになります。

mvn compile
mvn package
mvn verify

Mavenでは、指定したフェーズまでのすべてのフェーズが実行されます。これらのコマンドによる結果を次に示します。

コマンド 詳細

mvn compile

Javaソースをターゲット・クラス・ファイルにコンパイルします。

mvn package

  1. Javaソースをターゲット・クラス・ファイルにコンパイルします。

  2. コンパイルされたファイルおよびリソース(デプロイメント・ディスクリプタ、構成ファイルなど)を含むアーカイブ(WAR、GARなど)を作成します。

mvn verify

  1. Javaソースをターゲット・クラス・ファイルにコンパイルします。

  2. コンパイルされたファイルおよびリソース(デプロイメント・ディスクリプタ、構成ファイルなど)を含むアーカイブ(WAR、GARなど)を作成します。

  3. EARファイルをWebLogic Server環境にデプロイします。