// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Maven を使用した NetBeans プラットフォームクイックスタート
:jbake-type: platform_tutorial
:jbake-tags: tutorials 
:jbake-status: published
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:icons: font
:experimental:
:description: Maven を使用した NetBeans プラットフォームクイックスタート - Apache NetBeans
:keywords: Apache NetBeans Platform, Platform Tutorials, Maven を使用した NetBeans プラットフォームクイックスタート

link:https://netbeans.apache.org/platform/[*NetBeans プラットフォーム*]へようこそ!

このドキュメントは、構築フレームワークとして Maven を使用し、単純な NetBeans プラットフォームのアプリケーションおよびモジュールを作成する方法についての簡単なデモンストレーションです。このドキュメントでは、Maven 原型を使用して、NetBeans プラットフォームのアプリケーションおよびモジュールを作成します。Swing UI ツールキットおよび「Matisse」GUI ビルダーを使用して、モジュールのウィンドウコンポーネントを作成します。NetBeans プラットフォームのモジュール式の特長により、新しいモジュールを追加するだけで、ユーザーアプリケーションの機能を開発および拡張できます。

このドキュメントは Ant ベースの「 link:nbm-quick-start_ja.html[NetBeans プラットフォーム: NetBeans プラットフォームクイックスタート]」に基づいており、NetBeans プラットフォームのアプリケーション開発において、Ant を使用する場合と Maven を使用する場合の違いについていくつか説明します。Maven と Ant との相違点を理解すれば、「 link:https://netbeans.apache.org/kb/docs/platform_ja.html[NetBeans プラットフォームの学習]」のチュートリアルを容易に理解できるようになります。

NetBeans IDE 6.8 を使用している場合は、「 link:68/nbm-maven-quickstart.html[Maven を使用した NetBeans プラットフォーム 6.8 クイックスタート]」を参照してください。

NetBeans プラットフォームをはじめて使用する場合は、スクリーンキャストシリーズの「 link:https://netbeans.apache.org/tutorials/nbm-10-top-apis.html[NetBeans API のトップ 10]」を視聴いただくことをお勧めします。







NOTE:  NetBeans プラットフォーム用のアプリケーション開発のために、別々のバージョンの NetBeans プラットフォームをダウンロードする必要はありません。通常、NetBeans IDE でアプリケーションおよびモジュールを開発し、NetBeans プラットフォームおよびアプリケーションを実行するのに必要なモジュールのみを追加します。

このチュートリアルを開始する前に、必要に応じて次のドキュメントをお読みください。

*  link:http://wiki.netbeans.org/MavenBestPractices[NetBeans 6.x での Apache Maven のベストプラクティス]
*  link:http://www.sonatype.com/books/maven-book/reference/introduction.html[Chapter 1. Introducing Apache Maven] (『 link:http://www.sonatype.com/books/maven-book/reference/public-book.html[Maven: The Definitive Guide]』)
*  link:https://netbeans.apache.org/kb/docs/java/gui-functionality_ja.html[GUI 構築入門]


== Maven の構成

これがはじめての Maven プロジェクトである場合は、「オプション」ウィンドウで Maven の構成設定を確認します。このチュートリアルを完了するには、ローカルシステムに Maven がインストールされている必要があります。インストーラは  link:http://maven.apache.org/[Maven のサイト]からダウンロードできます。


[start=1]
1. 「オプション」ウィンドウの「その他」カテゴリを選択して、「Maven」タブをクリックします。

[start=2]
1. Maven をインストールするローカルの場所を指定します (2.0.9 以降が必要)。

[start=3]
1. Maven のローカルリポジトリの場所が正しいことを確認します。

[start=4]
1. 「了解」をクリックします。

ほとんどの場合、Maven の設定が標準的であれば、「オプション」ウィンドウの情報はすでに正しいものになっています。

NOTE:  Maven サポートは、Java SE 機能セットの一部として有効になっています。「オプション」ウィンドウで「Maven」タブが使用できない場合は、Java アプリケーションを作成して Java SE が有効になっているか確認してください。

IDE は、Maven SCM を使用して Maven アーティファクトのチェックアウトを行います。ソースのチェックアウトを行うために必要なすべてのクライアントが、ローカルマシンにインストールされていて正しく設定されているか確認することをお勧めします。

Maven SCM の詳細については、「 link:http://maven.apache.org/scm/index.html[Maven SCM のページ]」を参照してください。


=== Maven リポジトリの表示

Maven ですべてのプロジェクトを構築するために使用されるアーティファクトは、Maven のローカルリポジトリに格納されます。アーティファクトがプロジェクトの依存リソースとして宣言されると、そのアーティファクトは登録されたリモートリポジトリの 1 つからローカルリポジトリにダウンロードされます。

デフォルトで、NetBeans リポジトリおよびよく知られているインデックス付きの Maven リポジトリがいくつか登録され、リポジトリブラウザウィンドウに一覧表示されます。NetBeans リポジトリには、プロジェクトの構築に必要な、ほとんどの公開アーティファクトが含まれています。Maven リポジトリブラウザを使用すると、ローカルリポジトリとリモートリポジトリの内容を確認することができます。「ローカルリポジトリ」ノードを展開すると、ローカルにあるアーティファクトを表示できます。NetBeans リポジトリノードの下に一覧表示されているアーティファクトは、プロジェクトの依存リソースとして追加できますが、すべてのアーティファクトがローカルにあるわけではありません。これらはプロジェクトの依存リソースとして宣言されたときにだけ、ローカルリポジトリに追加されます。

Maven リポジトリブラウザを開くには、次の手順に従います。

* メインメニューから「ウィンドウ」>「その他」>「Maven リポジトリブラウザ」を選択します。

image::images/maven-quickstart68_maven-nbm-netbeans-repo.png[title="Maven リポジトリブラウザのスクリーンショット"]

カーソルをアーティファクトの上に置くと、アーティファクトのコーディネートとともにツールチップが表示されます。ブラウザで、アーティファクトの JAR ファイルをダブルクリックすると、アーティファクトについての追加の詳細情報を確認できます。

Maven リポジトリブラウザのツールバーにある「検索」ボタンをクリックするか、メインツールバーにあるクイック検索のテキストフィールドを使用すると、アーティファクトを検索できます。

IDE での Maven のクラスパス依存リソースの管理と、Maven リポジトリの操作の詳細については、「 link:http://wiki.netbeans.org/MavenBestPractices[NetBeans 6.x での Apache Maven のベストプラクティス]」の「 link:http://wiki.netbeans.org/MavenBestPractices#Dependency_management[依存リソースの管理]」の節を参照してください。

Artifact Viewer の使用方法のデモンストレーションを確認するには、「 link:https://netbeans.apache.org/kb/docs/java/maven-dependencies-screencast.html[Maven 依存リソースの操作]」のスクリーンキャストを参照してください。


== NetBeans プラットフォームアプリケーションプロジェクトの作成

この節では、「新規プロジェクト」ウィザードを使用して、Maven 原型から NetBeans アプリケーションを作成します。このウィザードにより、NetBeans プラットフォームでアプリケーションを開発するために必要な Maven モジュールプロジェクトが作成されます。このウィザードでは、アプリケーションプロジェクトで NetBeans モジュールを作成することもできますが、このチュートリアルでは各モジュールを個々に作成します。


=== プロジェクトの作成

「新規プロジェクト」ウィザードを使用して NetBeans プラットフォームアプリケーションを作成するには、次の手順を実行します。


[start=1]
1. 「ファイル」>「新規プロジェクト」(Ctrl-Shift-N) を選択し、「新規プロジェクト」ウィザードを開きます。

[start=2]
1. 「Maven」カテゴリから「Maven NetBeans アプリケーション」を選択します。「次へ」をクリックします。

[start=3]
1. 「プロジェクト名」に「*MavenPlatformWordApp*」と入力し、「プロジェクトの場所」を設定します。「完了」をクリックします。 
image::images/maven-quickstart_maven-newproject.png[title="「新規プロジェクト」ウィザードのスクリーンショット"]

NOTE:  これが Maven を使用した最初の NetBeans プラットフォームアプリケーションである場合、IDE が必要なすべてのアーティファクトを NetBeans リポジトリからダウンロードする必要があるため、プロジェクト作成まで少し時間がかかることがあります。

「完了」をクリックすると、デフォルトで IDE が次のような Maven プロジェクトタイプを作成します。

* *NetBeans Platform Application。*このプロジェクトはプラットフォームアプリケーションのコンテナプロジェクトです。このプロジェクトに、包含する各モジュールおよびプロジェクトのリポジトリの場所が一覧表示されます。このプロジェクトにソースは含まれません。IDE は、このプロジェクトのサブディレクトリに、ソースおよびリソースを含むモジュールを生成します。
* *NetBeans Platform based application。*このプロジェクトは、アプリケーションをコンパイルするために必要なアーティファクト (ソース) を指定します。必要な依存リソース (IDE アーティファクト、モジュールアーティファクト) は、このプロジェクトの  ``pom.xml``  ファイルで指定されます。「ライブラリ」ノードを展開すると、NetBeans プラットフォームのアプリケーションに必要なライブラリを確認できます。
* *Platform application branding resources。*このプロジェクトには、アプリケーションのブランド設定に使用されるリソースが含まれています。

すべての Maven プロジェクトにおいて、 ``pom.xml``  ファイル (POM) は「プロジェクト」ウィンドウの「プロジェクトファイル」ノードの下にあります。NetBeans プラットフォームアプリケーションプロジェクトの POM を見ると、ウィザードによって作成された別の 2 つのモジュールが、アプリケーションのモジュールとして一覧表示されているのが確認できます。


[source,xml]
----

<modules>
   <module>branding</module>
   <module>application</module>
</modules>

----


=== ブランド設定要素の変更

ブランド設定モジュールは、プラットフォームアプリケーションの構築時に使用されるブランド設定リソースを指定します。ブランド設定ダイアログでアプリケーションのブランド設定プロパティーを修正することで、名前、スプラッシュ画面、およびテキスト要素の値を簡単に変更できます。

NetBeans プラットフォームアプリケーションを原型から作成する場合、アプリケーションのデフォルト名はアプリケーションのアーティファクト ID になります。この課題では、ブランド設定ウィザードを使用して、アプリケーション名の変更およびスプラッシュ画面のデフォルト画像の置き換えを行います。

NOTE:  ブランド設定リソースを変更するには、IDE によってブランド設定モジュールが構築されている必要があります。


[start=1]
1. 「*Platform application branding resources*」モジュールを右クリックして、「ブランド設定」を選択します。

[start=2]
1. 「基本」タブで、「アプリケーションタイトル」を「*My Maven Platform Word App*」に変更します。
image::images/maven-quickstart_maven-branding1.png[title="「新規プロジェクト」ウィザードのスクリーンショット"]

[start=3]
1. 「スプラッシュ画面」タブをクリックし、スプラッシュ画面のデフォルトの画像の隣にある「参照」ボタンをクリックして、別の画像を指定します。「了解」をクリックします。

次の画像をローカルシステムにコピーして、ブランド設定ダイアログにスプラッシュ画面の画像として指定することもできます。


image::images/maven-quickstart68_splash.gif[title="デフォルトのスプラッシュ画像の例"]


== MavenWordEngine モジュールの作成

この節では、MavenWordEngine という名前の新しいモジュールを作成します。そのあとでモジュールを変更して、ウィンドウコンポーネント、ボタン、およびテキスト領域を追加します。


=== モジュールの作成

この課題では、ブランド設定モジュールとアプリケーションモジュールを含む同じディレクトリで、新しいモジュールプロジェクトを作成します。


[start=1]
1. メインメニューから「ファイル」>「新規プロジェクト」を選択します。

[start=2]
1. 「Maven」カテゴリから「Maven NetBeans モジュール」を選択します。「次へ」をクリックします。

[start=3]
1. 「プロジェクト名」に「*MavenWordEngine*」と入力します。

[start=4]
1. 「参照」をクリックして、「プロジェクトの場所」を MavenPlatformWordApp ディレクトリに指定します。「完了」をクリックします。

image::images/maven-quickstart_maven-wizard-project-location.png[title="「新規プロジェクト」ウィザードのスクリーンショット"]

MavenWordEngine モジュールの POM を見ると、プロジェクトの  ``artifactId``  が *MavenWordEngine* であることが確認できます。


[source,xml]
----

<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>com.mycompany</groupId>
    <artifactId>MavenPlatformWordApp</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.mycompany</groupId>
<artifactId>*MavenWordEngine*</artifactId>
<packaging>nbm</packaging>
<version>1.0-SNAPSHOT</version>
<name>MavenWordEngine NetBeans Module</name>

----

NetBeans モジュールを構築するには、 ``nbm-maven-plugin``  を使用する必要があります。モジュールの POM を見ると、IDE によって自動的に  ``packaging``  に  ``nbm``  が指定され、構築プラグインとして *nbm-maven-plugin* が指定されていることが確認できます。


[source,xml]
----

<plugin>
   <groupId>org.codehaus.mojo</groupId>
   <artifactId>*nbm-maven-plugin*</artifactId>
   <version>3.2-SNAPSHOT</version>
   <extensions>true</extensions>
</plugin>

----

NetBeans プラットフォームアプリケーションの POM を見ると、*MavenWordEngine* がアプリケーションのモジュールの一覧に追加されているのが確認できます。


[source,xml]
----

<modules>
   <module>branding</module>
   <module>application</module>
   <module>*MavenWordEngine*</module>
</modules>

----


=== モジュール を MavenPlatformWordApp の依存リソースに設定する

この課題では、POM に依存リソースを追加して、MavenWordEngine モジュールを「NetBeans Platform based application」の依存リソースとして宣言します。アプリケーションの POM では、次の依存リソースを宣言しています。


[source,xml]
----

<dependencies>
    <dependency>
        <groupId>org.netbeans.cluster</groupId>
        <artifactId>platform</artifactId>
        <version>${netbeans.version}</version>
        <type>pom</type>
    </dependency>
    <dependency>
        <groupId>com.mycompany</groupId>
        <artifactId>branding</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>
----

「NetBeans Platform based application」の「ライブラリ」ノードを展開すると、ブランド設定モジュールや、アプリケーション構築に必要なクラスタの依存リソースであるほかのライブラリに対して、依存リソースが存在することが確認できます。


image::images/maven-quickstart_maven-projects-libraries.png[title="「依存リソースを追加」ダイアログのスクリーンショット"]

クラスパスではない依存リソースの一覧を展開すると、依存リソースの全一覧が確認できます。

POM に依存リソースを追加するには、エディタで直接 POM を編集するか、「プロジェクト」ウィンドウから「依存リソースを追加」ダイアログボックスを開いて操作します。


[start=1]
1. 「プロジェクト」ウィンドウで「*MavenPlatformWordApp - NetBeans Platform based application*」を展開します。

[start=2]
1. 「ライブラリ」ノードを右クリックし、「依存リソースを追加」を選択します。

[start=3]
1. 「開いているプロジェクト」タブをクリックして、「*MavenWordEngine*」を選択します。「了解」をクリックします。

image::images/maven-quickstart_maven-add-dependency1.png[title="「依存リソースを追加」ダイアログのスクリーンショット"]

NOTE:  IDE によってインデックスのスキャンおよび更新が完了すると、ダイアログに新しいプロジェクトが表示されます。

「プロジェクト」ウィンドウで「MavenPlatformWordApp」の「ライブラリ」ノードを展開すると、MavenWordEngine が依存リソースとして表示されるようになっているのが確認できます。


=== モジュールへのウィンドウコンポーネントの追加

この課題では、ウィザードを使用して、MavenWordEngine モジュールにウィンドウコンポーネントを追加します。


[start=1]
1. 「プロジェクト」ウィンドウで「*MavenWordEngine NetBeans Module*」を右クリックして、「新規」>「その他」を選択して「新規ファイル」ウィザードを開きます。

[start=2]
1. 「モジュールの開発」カテゴリで「ウィンドウ」を選択します。「次へ」をクリックします。

[start=3]
1. 「ウィンドウの位置」ドロップダウンリストから「*output*」を選択します。「次へ」をクリックします。
image::images/maven-quickstart_maven-new-window.png[title="「新規ファイル」ウィザードのウィンドウコンポーネントページのスクリーンショット"]

[start=4]
1. 「クラス名の接頭辞」フィールドに「*Text*」と入力します。「完了」をクリックします。

ウィザードにより、作成されるファイルと変更されるファイルの一覧が表示されます。

「完了」をクリックすると、IDE によって「ソースパッケージ」の下の  ``com.mycompany.mavenwordengine``  に  ``TextTopComponent.java``  クラスが生成されているのが「プロジェクト」ウィンドウで確認できます。また、「その他のソース」の下の  ``com.mycompany.mavenwordengine``  にも IDE によって追加のリソースファイルが生成されています。この課題では、 ``TextTopComponent.java``  だけを編集します。

プロジェクトの構造は、「ファイル」ウィンドウで確認できます。Maven プロジェクトをコンパイルするには、「ソースパッケージ」(「ファイル」ウィンドウの  ``src/main/java``  ディレクトリ) の下にソースファイルだけを配置する必要があります。その他のリソース (XML ファイルなど) は、「その他のソース」(「ファイル」ウィンドウの  ``src/main/resources``  ディレクトリ) の下に配置しなければいけません。


=== ウィンドウコンポーネントの変更

この課題では、ウィンドウコンポーネントにテキスト領域とボタンを追加します。そのあと、ボタンによって呼び出されるメソッドを、テキスト領域の文字を大文字にするように変更します。


[start=1]
1. エディタで  ``TextTopComponent.java``  の「デザイン」タブをクリックします。

[start=2]
1. パレットからウィンドウに、ボタンとテキスト領域をドラッグ＆ドロップします。

[start=3]
1. テキスト領域を右クリックして、「変数名を変更」を選択し、「*text*」という名前を入力します。この名前は、コードからコンポーネントにアクセスする際に使用します。

[start=4]
1. ボタンのテキストを「*Filter!*」に設定します。
image::images/maven-quickstart68_maven-nbm-textopcomponent.png[title="「新規ファイル」ウィザードのウィンドウコンポーネントページのスクリーンショット"]

[start=5]
1. 「デザイン」ビューで「Filter!」ボタンをダブルクリックして、ソースコードエディタでボタンのイベントハンドラメソッドを開きます。ボタン要素をダブルクリックすると、メソッドが自動的に作成されます。

[start=6]
1. メソッドの本文に次のコードを追加します。変更を保存します。

[source,java]
----

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
   *String s = text.getText();
   s = s.toUpperCase();
   text.setText(s);*
}
----

エディタでコード補完を使用すると、コードの入力に役立ちます。

アプリケーションが正しく動作するかテストする場合は、「*MavenPlatformWordApp NetBeans Platform based application*」のプロジェクトノードを右クリックして、「依存関係で構築」を選択します。

「依存関係で構築」にマップされているデフォルトの動作は、Reactor プラグインを使用してプロジェクトを構築することです。Reactor プラグインを使用してプロジェクトを構築すると、サブプロジェクトの依存関係が構築されてから、それを含むプロジェクトが構築されます。出力ウィンドウに、構築の順序が表示されます。


image::images/maven-quickstart_maven-buildwithdependencies1.png[title="「出力」ウィンドウの Reactor 構築順序のスクリーンショット"]

出力ウィンドウには、構築の結果も表示されます。


image::images/maven-quickstart_maven-buildwithdependencies2.png[title="「出力」ウィンドウの正常な Reactor 構築のスクリーンショット"]

「プロジェクト」ウィンドウを見ると、「 ``com.mycompany`` 」ノードの下の「ローカルリポジトリ」で必要な依存関係のアーティファクトが使用可能になったため、プロジェクトからバッジがなくなっているのが確認できます。


image::images/maven-quickstart_maven-localrepo.png[title="「ローカルリポジトリ」のスクリーンショット"]

プロジェクトを実行するには、「*MavenPlatformWordApp NetBeans Platform based application*」のプロジェクトノードを右クリックして、「実行」を選択します。アプリケーションが起動したら、次の手順を実行してアプリケーションをテストできます。


[start=1]
1. プラットフォームアプリケーションのメインメニューから「Window」>「Text」を選択して、「Text」ウィンドウを開きます。

[start=2]
1. テキスト領域に小文字をいくつか入力して、「Filter!」をクリックします。

[start=3]
1. Maven Platform Word App を終了します。

「Filter!」をクリックすると、入力した文字が大文字に変更されてテキスト領域に表示されます。


== TextFilter モジュールの作成

この課題では、*TextFilter* という名前のモジュールを作成して、このモジュールを依存リソースとしてアプリケーションに追加します。TextFilter モジュールはサービスを提供し、インタフェースだけを含んでいます。あとで、ほかのモジュールからルックアップを使用してこのサービスにアクセスできます。


=== モジュールの作成

この課題では、次の手順を実行して、TextFilter モジュールを作成します。


[start=1]
1. 「ファイル」>「新規プロジェクト」(Ctrl-Shift-N) を選択します。

[start=2]
1. 「Maven」カテゴリから「Maven NetBeans モジュール」原型を選択します。「次へ」をクリックします。

[start=3]
1. 「プロジェクト名」に「*TextFilter*」と入力します。

[start=4]
1. 「参照」をクリックして、「プロジェクトの場所」を MavenPlatformWordApp ディレクトリに設定します。「完了」をクリックします。

「完了」をクリックすると、IDE がモジュールを作成し、モジュールプロジェクト「*TextFilter NetBeans Module*」が「プロジェクト」ウィンドウで開きます。

IDE により、POM プロジェクト「MavenPlatformWordApp - NetBeans Platform Application」の  ``pom.xml``  が変更され、プロジェクトに含まれるモジュールの一覧に新しいモジュールが追加されます。


[source,xml]
----

<modules>
    <module>branding</module>
    <module>application</module>
    <module>MavenWordEngine</module>
    <module>TextFilter</module>
</modules>
----

モジュールを作成したら、そのモジュールをアプリケーションの依存リソースとして追加する必要があります。


=== MavenPlatformWordApp の依存リソースとして TextFilter モジュールを追加する

この課題では、TextFilter モジュールを「MavenPlatformWordApp NetBeans Platform based application」の依存リソースとして追加します。


[start=1]
1. 「*MavenPlatformWordApp - NetBeans Platform based application*」プロジェクトの「ライブラリ」ノードを右クリックして、「依存リソースを追加」を選択します。

[start=2]
1. 「依存リソースを追加」ダイアログで、「開いているプロジェクト」タブをクリックします。

[start=3]
1. 「*TextFilter NetBeans Module*」モジュールを選択します。「了解」をクリックします。

「了解」をクリックすると、IDE によってモジュールがプロジェクトの依存リソースとして追加されます。「ライブラリ」ノードを展開すると、モジュールが依存リソースの一覧に追加されているのが確認できます。「*MavenPlatformWordApp - NetBeans Platform based application*」の POM では、IDE によって「 ``dependencies`` 」要素の中に次の行が追加されているのが確認できます。


[source,xml]
----

<dependency>
   <groupId>${project.groupId}</groupId>
   <artifactId>TextFilter</artifactId>
   <version>${project.version}</version>
</dependency>
----


=== TextFilter モジュールへのインタフェースの追加

この課題では、TextFilter モジュールへの単純なインタフェースを追加します。


[start=1]
1. 「*TextFilter NetBeans Module*」を右クリックし、「新規」>「Java インタフェース」を選択します。

[start=2]
1. 「クラス名」に「*TextFilter*」と入力します。

[start=3]
1. 「パッケージ」ドロップダウンリストから「*com.mycompany.textfilter*」を選択します。「完了」をクリックします。

[start=4]
1. クラスに次のコードを追加します。変更を保存します。

[source,java]
----

package com.mycompany.textfilter;

public interface TextFilter {
    *public String process(String s);*
}
----


=== モジュールの公開設定

この課題では、 ``com.mycompany.textfilter``  パッケージの内容を公開パッケージとして設定し、ほかのモジュールがこのメソッドにアクセスできるようにします。パッケージを公開パッケージとして宣言するには、POM にある  ``nbm-maven-plugin``  の  ``configuration``  要素を変更して、プラグインによって公開パッケージとしてエクスポートされるパッケージを指定します。エディタで POM を変更するか、プロジェクトの「プロパティー」ダイアログボックスで、公開するパッケージを選択できます。


[start=1]
1. 「*TextFilter NetBeans Module*」を右クリックし、「プロパティー」を選択します。

[start=2]
1. 「プロジェクトプロパティー」ダイアログで「公開パッケージ」カテゴリを選択します。

[start=3]
1. 「*com.mycompany.textfilter*」パッケージを選択します。「了解」をクリックします。

image::images/maven-quickstart_maven-public-packages.png[title="「プロパティー」ダイアログのスクリーンショット"]

「了解」をクリックすると、IDE によってプロジェクト POM が変更され、 ``nbm-maven-plugin``  アーティファクトの  ``configuration``  要素に次のエントリが追加されます。


[source,xml]
----

<publicPackages>
   <publicPackage>com.mycompany.textfilter</publicPackage>
</publicPackages>
----

この時点で、POM エントリには次のエントリが含まれています。


[source,xml]
----

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>nbm-maven-plugin</artifactId>
    <version>3.2</version>
    <extensions>true</extensions>
    <configuration>
                    <publicPackages>
                        <publicPackage>com.mycompany.textfilter</publicPackage>
                    </publicPackages>

    </configuration>
</plugin>
----

詳細は、「 link:http://bits.netbeans.org/mavenutilities/nbm-maven-plugin/manifest-mojo.html#publicPackages[nbm-maven-plugin マニフェスト]」を参照してください。


== MyFilter モジュールの作成

この課題では、モジュール *MyFilter* を作成して、このモジュールを TextFilter の依存リソースとして追加します。その後、TextFilter サービスをルックアップして、MyFilter のメソッドを呼び出せるようになります。


=== モジュールの作成

この課題では、*MyFilter* という名前のモジュールを作成します。このモジュールを作成するには、TextFilter モジュールを作成したときと同じ手順を実行します。


[start=1]
1. 「ファイル」>「新規プロジェクト」(Ctrl-Shift-N) を選択します。

[start=2]
1. 「Maven」カテゴリから「Maven NetBeans モジュール」を選択します。「次へ」をクリックします。

[start=3]
1. 「プロジェクト名」に「*MyFilter*」と入力します。

[start=4]
1. 「参照」をクリックして、「プロジェクトの場所」を *MavenPlatformWordApp* ディレクトリに設定します。「完了」をクリックします。

[start=5]
1. MyFilter モジュールを「*MavenPlatformWordApp - NetBeans Platform based application*」プロジェクトの依存リソースとして追加します。


=== 依存リソースとしての TextFilter モジュールの追加

この課題では、TextFilter モジュールを MyFilter モジュールの依存リソースとして追加します。


[start=1]
1. 「*MyFilter*」プロジェクトの「ライブラリ」ノードを右クリックし、「依存リソースを追加」を選択します。

[start=2]
1. 「依存リソースを追加」ダイアログで、「開いているプロジェクト」タブをクリックします。

[start=3]
1. 「*TextFilter*」モジュールを選択します。「了解」をクリックします。


=== MyFilter モジュールの変更

この課題では、文字列を大文字に変換する  ``process``  という名前の単一のメソッドを持つ Java クラスを追加します。また、クラスが TextFilter インタフェースを実装することも指定します。 ``@ServiceProvider``  注釈を使用して、TextFilter がコンパイル時に登録されるサービスであることを指定します。


[start=1]
1. 「*MyFilter*」モジュールを右クリックし、「新規」>「Java クラス」を選択します。

[start=2]
1. 「クラス名」に「*UpperCaseFilter*」と入力します。

[start=3]
1. 「パッケージ」ドロップダウンリストから「*com.mycompany.myfilter*」を選択します。「完了」をクリックします。

[start=4]
1. クラスに次のコードを追加します。変更を保存します。

[source,java]
----

package com.mycompany.myfilter;

import com.mycompany.textfilter.TextFilter;
import org.openide.util.lookup.ServiceProvider;

*@ServiceProvider(service=TextFilter.class)*
public class UpperCaseFilter *implements TextFilter {

    public String process(String s) {
        return s.toUpperCase();
    }*
}
----

サービスプロバイダを指定するための、注釈の使用方法に注目してください。 ``@ServiceProvider``  注釈および JDK 6 の ServiceLoader 機構の動作についての詳細は、ユーティリティーの API ドキュメントを参照してください。


=== MavenWordEngine モジュールの変更

この課題では、ルックアップを使用した「TextFilter」インタフェースの呼び出しおよび「MyFilter」のメソッドへのアクセスを行うように、「Text」ウィンドウコンポーネントのイベントハンドラを変更します。イベントハンドラにコードを追加する前に、TextFilter モジュールで依存リソースを宣言する必要があります。


[start=1]
1. 「*MavenWordEngine*」モジュールの「ライブラリ」ノードを右クリックして、TextFilter モジュールに依存リソースを追加します。

[start=2]
1. 「*MavenWordEngine*」モジュールの「ソースパッケージ」を展開して、ソースエディタで  ``TextTopComponent``  を開きます。

[start=3]
1.  ``jButton1ActionPerformed``  ボタンのハンドラメソッドに次のコードを追加します。変更を保存します。

[source,java]
----

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    String s = text.getText();
    *TextFilter filter = Lookup.getDefault().lookup(TextFilter.class);
    if (filter != null) {
        s = filter.process(s);
    }*
    text.setText(s);
}
----

コード補完を使用すると、コードの入力に役立ちます。

この時点で、アプリケーションが正常に動作するかを確認できます。次に、フィルタを使用して処理したテキストの履歴を表示する、新しいウィンドウコンポーネントを追加します。


== 「Text」ウィンドウコンポーネントへの LookupListener および InstanceContent の追加

この課題では、「Filter!」ボタンがクリックされたときにテキスト領域の内容を保存するリスナーおよびフィールドを追加します。


[start=1]
1. 「*MavenWordEngine*」モジュールに次のコードを追加して、 ``InstanceContent``  オブジェクトの追加および  ``TextTopComponent``  のコンストラクタの変更を行います。

[source,java]
----

public final class TextTopComponent extends TopComponent {
    *private InstanceContent content;*

    public TextTopComponent() {
        initComponents();
        setName(NbBundle.getMessage(TextTopComponent.class, "CTL_TextTopComponent"));
        setToolTipText(NbBundle.getMessage(TextTopComponent.class, "HINT_TextTopComponent"));
        //        setIcon(Utilities.loadImage(ICON_PATH, true));

        *content = new InstanceContent();
        associateLookup(new AbstractLookup(content));*
    }
----


[start=2]
1.  ``jButton1ActionPerformed``  メソッドを変更して、ボタンがクリックされたときに古いテキストの値を  ``InstanceContent``  オブジェクトに追加するようにします。

[source,java]
----

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
     String s = text.getText();
     TextFilter filter = Lookup.getDefault().lookup(TextFilter.class);
     if (filter != null) {
         *content.add(s);*
         s = filter.process(s);
     }
     text.setText(s);
 }
----


== History モジュールの作成

この節では、 ``InstanceContent``  の値を表示する「*History*」という名前のモジュールを作成します。このモジュールを作成するには、TextFilter および MyFilter モジュールを作成したときと同じ手順を実行します。


[start=1]
1. 「ファイル」>「新規プロジェクト」(Ctrl-Shift-N) を選択します。

[start=2]
1. 「Maven」カテゴリから「Maven NetBeans モジュール」を選択します。「次へ」をクリックします。

[start=3]
1. 「プロジェクト名」に「*History*」と入力します。

[start=4]
1. 「参照」をクリックして、「プロジェクトの場所」を MavenPlatformWordApp ディレクトリに設定します。「完了」をクリックします。

[start=5]
1. History モジュールを「*MavenPlatformWordApp - NetBeans Platform based application*」プロジェクトの依存リソースとして追加します。


=== 「History」モジュールのウィンドウコンポーネントの作成

この課題では、ウィザードを使用して、モジュールにウィンドウコンポーネントを追加します。


[start=1]
1. 「プロジェクト」ウィンドウで「*History NetBeans Module*」を右クリックして、「新規」>「その他」を選択して「新規ファイル」ダイアログを開きます。

[start=2]
1. 「モジュールの開発」カテゴリで「ウィンドウ」を選択します。「次へ」をクリックします。

[start=3]
1. 「ウィンドウの位置」ドロップダウンリストから「*editor*」を選択します。「次へ」をクリックします。

[start=4]
1. 「クラス名の接頭辞」フィールドに「*History*」と入力します。「完了」をクリックします。ウィザードにより、作成されるファイルと変更されるファイルの一覧が表示されます。


=== 「History」ウィンドウコンポーネントの変更

ここで、フィルタされた文字列を表示するウィンドウコンポーネントに、テキスト領域要素を追加します。


[start=1]
1. エディタで  ``HistoryTopComponent.java``  の「デザイン」タブをクリックします。

[start=2]
1. パレットからウィンドウに、テキスト領域をドラッグ＆ドロップします。

[start=3]
1. テキスト領域を右クリックして、「変数名を変更」を選択し、「*historyText*」という名前を入力します。

[start=4]
1.  ``HistoryTopComponent``  のコンストラクタに  ``private``  フィールド  ``result``  および次のコードを追加して、このコンポーネントが現在のアクティブウィンドウの String クラスのルックアップを待機して、取得したテキスト領域の String オブジェクトをすべて表示するようにします。

[source,java]
----

      *private Lookup.Result result;*

      public HistoryTopComponent() {
          initComponents();
          ...

          *result = org.openide.util.Utilities.actionsGlobalContext().lookupResult(String.class);
          result.addLookupListener(new LookupListener() {
              public void resultChanged(LookupEvent e) {
                  historyText.setText(result.allInstances().toString());
              }
          });*
      }
----


== アプリケーションの構築と実行

ここで、アプリケーションをテストできます。


[start=1]
1. 「*MavenPlatformWordApp NetBeans Platform based application*」のプロジェクトノードを右クリックして、「生成物を削除」を選択します。

[start=2]
1. 「*MavenPlatformWordApp NetBeans Platform based application*」のプロジェクトノードを右クリックして、「依存関係で構築」を選択します。

[start=3]
1. 「*MavenPlatformWordApp NetBeans Platform based application*」のプロジェクトノードを右クリックして、「実行」を選択します。

「実行」をクリックすると、IDE によって NetBeans プラットフォームアプリケーションが起動します。「Window」メニューから、「History」および「Text」ウィンドウを開くことができます。

image::images/maven-quickstart_maven-final-app.png[title="完成版 NetBeans プラットフォームアプリケーションのスクリーンショット"]

「Text」ウィンドウにテキストを入力して「Filter!」ボタンをクリックすると、テキストが大文字に変換され、「History」ウィンドウの内容に追加されます。

このクイックスタートでは、Maven を使用した NetBeans プラットフォームアプリケーションの作成方法が、Ant を使用した作成方法と大きく違わないことを示しました。主な違いは、Maven POM によるアプリケーション組み立ての制御方式です。ほかの NetBeans プラットフォームアプリケーションおよびモジュール構築の例については、「 link:https://netbeans.apache.org/kb/docs/platform.html[NetBeans プラットフォームの学習]」に一覧表示されている各チュートリアルを参照してください。


== 関連項目

アプリケーションの作成と開発の詳細については、次のリソースを参照してください。

*  link:https://netbeans.apache.org/kb/docs/platform.html[NetBeans プラットフォームの学習]
*  link:http://bits.netbeans.org/dev/javadoc/[NetBeans API Javadoc]

NetBeans プラットフォームに関して質問がある場合は、dev@platform.netbeans.org のメーリングリストに投稿していただくか、 link:https://mail-archives.apache.org/mod_mbox/netbeans-dev/[NetBeans プラットフォームメーリングリストのアーカイブ]を参照してください。

