多くの実際のアプリケーションには、様々なランタイム環境にデプロイすることを目的としたモジュールが含まれています。たとえば、Coherenceキャッシュに格納されているデータを使用するWebアプリケーションがあります。この章では、そのようなWebアプリケーションのビルド方法について説明します。
この章の構成は、次のとおりです。
この章でビルドするアプリケーション例では、Webページ上にユーザーのリストが名前と年齢とともに表示されます。新規個人を追加することもできます。人々の詳細はCoherenceキャッシュに格納されます。このアプリケーションには、次の要素があります。
ポータブル・オブジェクトに組み込む必要があるPerson POJO、キャッシュにアクセスするためのユーティリティ・クラス、およびCoherenceキャッシュ定義が含まれるCoherence GARプロジェクト。
サーブレットとデプロイメント・ディスクリプタが含まれた、WARに組み込む必要があるJava EE Webアプリケーション。
GARおよびWARをEARにアセンブルし、そのEARをWebLogic Serverにデプロイするプロジェクト。
この例では、モジュール間に依存性がある複数モジュールのMavenプロジェクトをビルドする方法、アプリケーション全体が含まれたデプロイ可能EARファイルにアプリケーション・コンポーネントをアセンブルする方法を確認できます。
この章の目的は、Mavenを使用してアプリケーション全体をビルドする方法を示すことであり、WebアプリケーションまたはCoherenceアプリケーションの記述方法をデモンストレーションすることではないため、例自体の内容は、サーブレットおよびcoherenceコードの観点から見れば非常に基本的なものです。詳細は、第9章および第10章を参照してください。
Mavenを使用すると、複数のモジュールを持つプロジェクトを作成できます。各モジュールは、別のMavenプロジェクトで有効です。最上位レベルには、モジュールに関する情報をMavenに示し、アプリケーション全体を1つのMavenコマンドでビルドできるPOMファイルがあります。
各モジュールは、最上位プロジェクトのルートのサブディレクトリに配置されます。この例では、最上位プロジェクトはmy-real-appと呼ばれ、3つのモジュールはmy-real-app-gar、my-real-app-warおよびmy-real-app-earです。プロジェクトのMaven座標は、次のとおりです。
| GroupId | ArtifactId | バージョン | パッケージ化 |
|---|---|---|---|
|
|
|
1.0-SNAPSHOT |
|
|
|
|
1.0-SNAPSHOT |
|
|
|
|
1.0-SNAPSHOT |
|
|
|
|
1.0-SNAPSHOT |
|
アプリケーションを構成しているファイルは、次のとおりです。
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ファイルが含まれています。
次のコマンドを使用して、プロジェクトを保持するためのディレクトリを作成します。
mkdir my-real-app
この章の残りの部分では、このディレクトリに対する相対パスが示されます。
10.2項で説明しているように原型を使用するか、またはディレクトリおよびファイルを手動で作成して、GARプロジェクトを作成できます。
原型を使用するには、次のコマンドを実行します。
mvn archetype:generate
-DarchetypeGroupId=com.oracle.coherence
-DarchetypeArtifactId=maven-gar-archetype
-DarchetypeVersion=12.1.2-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
この章の内容は次のとおりです。
原型を使用する場合、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>coherence</artifactId>
<version>12.1.2-0-0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>com.oracle.coherence</groupId>
<artifactId>maven-gar-plugin</artifactId>
<version>${coherence.version}</version>
<extensions>true</extensions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>com.oracle.coherence</groupId>
<artifactId>maven-gar-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.1.2-0-0にのみ依存します。スコープprovidedは、このライブラリが単にコンパイル用であり、ランタイム環境ですでに提供されているため、ビルドするアーティファクト(GARファイル)でパッケージ化する必要がないことを意味します。
<dependencies>
<dependency>
<groupId>com.oracle.coherence</groupId>
<artifactId>coherence</artifactId>
<version>12.1.2-0-0</version>
<scope>provided</scope>
</dependency>
</dependencies>
pluginManagementセクションは、このプラグインの拡張を有効にするようMavenに示します。MavenでGARファイルをターゲット・アーティファクト・タイプとして認識できるようにする必要があります。
<pluginManagement>
<plugins>
<plugin>
<groupId>com.oracle.coherence</groupId>
<artifactId>maven-gar-plugin</artifactId>
<version>${coherence.version}</version>
<extensions>true</extensions>
</plugin>
</plugins>
</pluginManagement>
plug-insセクションには、Coherence GARプラグインに渡す必要がある情報が含まれています。この場合、generatePofをtrueに設定して、プラグインでPOF注釈付きPOJOが検索され、必要なアーティファクトが生成されるようにする必要があります。
<plugins>
<plugin>
<groupId>com.oracle.coherence</groupId>
<artifactId>maven-gar-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<generatePof>true</generatePof>
</configuration>
</plugin>
</plugins>
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という名前のサービスを作成します。これらの用語に精通していない場合は、第10章を参照してください。
<?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>
キャッシュに情報を格納する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の詳細は、第10章を参照してください。
キャッシュのアクセスに使用できる小さなラッパー・クラスを作成します。別の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;
}
}
後で、このクラスをサーブレットで使用して、キャッシュからデータを取得したり、新しいデータをキャッシュに追加することができます。
第9章で説明しているように原型を使用するか、またはディレクトリおよびファイルを手動で作成して、WARプロジェクトを作成できます。
原型を使用するには、次のコマンドを実行します。
mvn archetype:generate
-DarchetypeArtifactId=basic-webapp
-DarchetypeVersion=12.1.2-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
この章の内容は次のとおりです。
原型を使用する場合は、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>
Webアプリケーションには、次の場所にある単純な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>
これにより、Webアプリケーションのdisplay-nameが設定されます。
サーブレットを作成するには、次のように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()メソッドを使用してすべてを読み取ります。
EARプロジェクトは、EARへのWARおよびGARのアセンブルを管理します。次のコマンドを使用して、このプロジェクトを手動で作成します。
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
この章の内容は次のとおりです。
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.1.2-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>
次のように、このプロジェクトの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>
GARファイルをmy-real-app-garプロジェクトの出力(target)ディレクトリからEARプロジェクトにコピーするようにmaven-dependency-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>
最後に、結果として生成されるEARファイルのデプロイ方法をweblogic-maven-pluginに指定します。この項では、環境に一致するようにadminurl、user、passwordおよびtargetの各パラメータを更新する必要があります。これらのパラメータの詳細は、表9-1を参照してください。
<plugin>
<groupId>com.oracle.weblogic</groupId>
<artifactId>weblogic-maven-plugin</artifactId>
<version>12.1.2-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プロジェクトが完了したら、デプロイメント・ディスクリプタを追加します。
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ファイルが配置されている場所、およびその呼び名に関する詳細が示されます。
最上位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.1.2-0-0</coherence.version>
</properties>
</project>
プロジェクトの座標を設定します。3つの各プロジェクトで指定した親座標にこれらが一致することに注意してください。パッケージ化がpomであることに注意してください。これにより、modulesセクションで指定しているように、このプロジェクトが一連のサブプロジェクトのアセンブリであることがMavenに示されます。
3つのサブプロジェクトそれぞれに1つのmoduleエントリがあります。
このPOMは他の3つの親であり、POMはそれらの親から継承されるため、一般的なプロパティをこのPOMに追加でき、それらのプロパティは3つのサブプロジェクトすべてで利用できるようになります。この場合、プロパティcoherence.versionを追加します。
これで、次のコマンドを(最上位ディレクトリmy-real-appで)1つ以上使用して、Mavenによるアプリケーションのビルドを実行できるようになります。
mvn compile mvn package mvn verify
Mavenでは、指定したフェーズまでのすべてのフェーズが実行されます。これらのコマンドによる結果を次に示します。
| コマンド | 詳細 |
|---|---|
|
mvn compile |
Javaソースをターゲット・クラス・ファイルにコンパイルします。 |
|
mvn package |
|
|
mvn verify |
|