blob: 63c1f84d9b80afa4dff4ed8634632e3ee3898fec [file] [log] [blame]
//
// 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.
//
= Работа с наборами модулей на платформе NetBeans с помощью Maven
:jbake-type: platform_tutorial
:jbake-tags: tutorials
:jbake-status: published
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:icons: font
:experimental:
:description: Работа с наборами модулей на платформе NetBeans с помощью Maven - Apache NetBeans
:keywords: Apache NetBeans Platform, Platform Tutorials, Работа с наборами модулей на платформе NetBeans с помощью Maven
В этом документе описываются принципы создания набора модулей на платформе NetBeans из архетипов Maven, принципы построения и установки этого набора в среде IDE. В этом учебном курсе будет создан проект набора модулей Maven, содержащий три модуля на платформе NetBeans в качестве подпроектов. Проект Maven с подпроектами является простым проектом POM, объявляющим метод компиляции набора модулей и цель установки.
Этот документ основан на link:https://netbeans.apache.org/tutorials/nbm-selection-1.html[Учебном курсе по управлению выбором NetBeans] на базе Ant и описывает различия между Ant и Maven при разработке наборов модулей на платформе NetBeans. После изучения отличий Maven от Ant можно легко пройти другие учебные курсы в link:https://netbeans.apache.org/kb/docs/platform_ru.html[Учебной карте по платформе NetBeans].
При отсутствии опыта работы с платформой NetBeans можно посмотреть серию демонстрационных роликов link:https://netbeans.apache.org/tutorials/nbm-10-top-apis.html[10 лучших интерфейсов API NetBeans].
*Содержимое*
* <<config,Использование Maven в среде IDE>>
* <<config1,Настройка параметров Maven>>
* <<config2,Просмотр репозиториев Maven>>
* <<01,Создание набора модулей на платформе NetBeans>>
* <<02,Изменение модуля MyAPI>>
* <<02a,Создание класса>>
* <<02b,Определение общедоступных пакетов>>
* <<03,Создание модуля MyViewer>>
* <<03b,Создание оконного компонента>>
* <<04,Создание модуля MyEditor>>
* <<04b,Добавление действия>>
* <<04c,Добавление компонента редактора>>
* <<05,Сборка и запуск набора модулей>>
* <<05a,Объявление прямых зависимостей>>
* <<05b,Определение местоположения установки NetBeans>>
* <<05c,Запуск приложения>>
* <<06,Динамическое изменение Lookup>>
*Для работы с этим учебным курсом требуется программное обеспечение и ресурсы, перечисленные в следующей таблице.*
NOTE: Для разработки приложений на платформе NetBeans не требуется загружать отдельную версию этой платформы. Как правило, разработка приложений и модулей осуществляется в среде IDE NetBeans, затем необходимо просто включить требуемые модули для выполнения платформы NetBeans и созданного приложения.
Перед изучением этого учебного курса можно ознакомиться со следующей документацией:
* link:https://netbeans.apache.org/wiki/[Часто задаваемые вопросы по разработке NetBeans ]
* link:http://wiki.netbeans.org/MavenBestPractices[Практические рекомендации по Apache Maven в NetBeans 6.x];
* link:http://www.sonatype.com/books/maven-book/reference/introduction.html[Глава 1. Введение в Apache Maven] (из книги link:http://www.sonatype.com/books/maven-book/reference/public-book.html[Maven: полное руководство])
* link:https://netbeans.apache.org/kb/docs/java/gui-functionality_ru.html[Введение в разработку графического интерфейса ]
== Использование Maven в среде IDE
Если это первый опыт работы с Maven, следует проверить параметры настройки и обозреватель репозиториев Maven.
=== Настройка параметров Maven
Для настройки поведения Maven в среде IDE и проверки корректности этой настройки перейдите на вкладку 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 SE при создании приложения Java.
=== Просмотр репозиториев Maven
Артефакты, используемые Maven для создания всех проектов, сохраняются в локальном репозитории Maven. Если артефакт объявлен как зависимость проекта и еще не установлен, он загружается в локальный репозиторий из одного из зарегистрированных удаленных репозиториев.
Репозиторий NetBeans и некоторые известные индексированные репозитории Maven зарегистрированы и включены в список окна "Обозреватель репозитория" по умолчанию. Репозиторий NetBeans содержит большинство общедоступных артефактов, требуемых для создания проекта. Обозреватель репозиториев Maven можно использовать для просмотра содержимого локальных и удаленных репозиториев. Для просмотра локальных артефактов разверните узел "Локальный репозиторий". Артефакты, указанные в узлах удаленного репозитория, могут быть добавлены в качестве зависимостей проекта, однако не все из них представлены локально. Они добавляются к локальному репозиторию только в том случае, если объявляются в качестве зависимостей проекта.
Чтобы открыть обозреватель репозиториев Maven:
* выберите в главном меню "Окно" > "Прочее" > "Обозреватель репозиториев Maven".
image::images/maven-quickstart68_maven-nbm-netbeans-repo.png[title="Снимок экрана: обозреватель репозиториев Maven"]
== Создание набора модулей на платформе NetBeans
В этом разделе для построения набора модулей на платформе NetBeans из архетипа Maven используется мастер создания проекта. Мастер создает проект POM, содержащий проекты модулей. Также в мастере создается модуль в качестве подпроекта набора.
[start=1]
1. Откройте мастер создания проекта и выберите в категории Maven "Набор модулей Maven NetBeans". Нажмите кнопку "Далее".
[start=2]
1. В поле "Имя проекта" введите *MavenSelectionSuite*. Нажмите кнопку "Далее".
[start=3]
1. Выберите команду "Создать проект модуля" и введите в поле "Имя модуля" *MyAPI*. Нажмите кнопку "Готово".
При нажатии кнопки "Готово" в среде IDE создаются проект MavenSelectionSuite и подпроект модуля на платформе NetBeans MyAPI.
image::images/maven-suite_maven-suite-projectswindow.png[title="Снимок экрана: окно "Проекты""]
MavenSelectionSuite - это проект POM, являющийся контейнером для подпроектов, в данном случае - проектов модуля на платформе NetBeans. Проект POM не содержит исходных файлов. POM проекта содержит указания по компиляции набора. При его просмотре видно, что значение ``pom`` установлено для упаковки.
[source,xml]
----
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>MavenSelectionSuite</artifactId>
*<packaging>pom</packaging>*
<version>1.0-SNAPSHOT</version>
<name>MavenSelectionSuite Netbeans Module Suite</name>
...
<properties>
<netbeans.version>RELEASE69</netbeans.version>
</properties>
*<modules>
<module>MyAPI</module>
</modules>*
</project>
----
POM также содержит список модулей, включаемых при построении проекта POM. Обратите внимание, что проект MyAPI приведен в качестве модуля.
Разверните узел "Модули" в окне "Проекты": проект MyAPI приводится в качестве модуля. В окне "Файлы" можно увидеть, что каталог проекта MyAPI расположен в каталоге ``MavenSelectionSuite`` . При создании нового проекта в каталоге проекта POM проект автоматически добавляется в среде IDE в список модулей, включаемых при построении и запуске проекта POM.
При создании набора модулей на платформе NetBeans из архетипа Maven в мастере создания проекта не нужно указывать местоположение установки целевой платформы NetBeans, как это указывалось в среде Ant. Чтобы настроить установку платформы NetBeans, необходимо изменить элемент ``<netbeans.installation>`` в файле ``profiles.xml`` проекта POM и явным образом указать путь к установке платформы. Для получения дополнительных сведений обратитесь к разделу <<05b,Определение местоположения установки NetBeans>> в этом учебном курсе.
== Изменение модуля MyAPI
Модуль MyAPI был построен при создании набора модулей, однако теперь в этом модуле необходимо создать класс и представить его для других модулей.
=== Создание класса в модуле MyAPI
В этом упражнении описано создание простого класса с именем ``APIObject`` . Все экземпляры класса ``APIObject`` уникальны, так как поле ``index`` увеличивается на единицу каждый раз при создании нового элемента ``APIObject`` .
[start=1]
1. Разверните проект MyAPI в окне "Проекты".
[start=2]
1. Щелкните узел "Исходные файлы" правой кнопкой мыши и выберите "Создать" > "Java Class".
[start=3]
1. В поле "Имя класса" введите *APIObject* и выберите в контекстном меню "Пакет" ``com.mycompany.mavenselectionsuite`` . Нажмите кнопку "Готово".
[start=4]
1. Измените этот класс, чтобы объявить несколько полей и добавить следующие простые методы:
[source,java]
----
public final class APIObject {
private final Date date = new Date();
private static int count = 0;
private final int index;
public APIObject() {
index = count++;
}
public Date getDate() {
return date;
}
public int getIndex() {
return index;
}
public String toString() {
return index + " - " + date;
}
}
----
[start=5]
1. Исправьте операторы импорта и сохраните измененные данные.
=== Определение общедоступных пакетов
В этом учебном курсе будут созданы дополнительные модули, требуемые для получения доступа к методам в ``APIObject`` . В этом упражнении содержимое модуля MyAPI будет объявлено общедоступным, чтобы другие модули могли получить доступ к методам. Чтобы объявить пакет ``com.mycompany.mavenselectionsuite`` общедоступным, необходимо изменить элемент ``configuration`` в ``nbm-maven-plugin`` в POM для указания пакетов, экспортируемых как общедоступные. Изменения в POM можно внести непосредственно в редакторе либо в окне "Проекты", указав пакеты, экспортируемые как общедоступные.
[start=1]
1. Щелкните узел проекта правой кнопкой мыши и выберите "Свойства", чтобы открыть окно свойств.
[start=2]
1. Выберите пакет *com.mycompany.mavenselectionsuite* в категории *Общедоступные пакеты*. Нажмите кнопку "ОК".
image::images/maven-suite_maven-suite-publicpackages.png[title="Категория "Общедоступные пакеты" в окне "Свойства""]
При выборе экспортируемого пакета среда IDE изменяет элемент ``nbm-maven-plugin`` в POM, чтобы указать пакет.
[source,xml]
----
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>nbm-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<publicPackages>
*<publicPackage>com.mycompany.mavenselectionsuite</publicPackage>*
</publicPackages>
</configuration>
</plugin>
----
[start=3]
1. Щелкните проект правой кнопкой мыши и выберите команду "Построить".
При построении проекта элемент ``nbm-maven-plugin`` создает заголовок манифеста в ``MANIFEST.MF`` файла JAR, где указываются общедоступные пакеты.
Для получения дополнительных сведений обратитесь к link:http://bits.netbeans.org/mavenutilities/nbm-maven-plugin/manifest-mojo.html#publicPackages[документации манифеста nbm-maven-plugin].
== Создание модуля MyViewer
В этом разделе будет создан новый модуль с именем MyViewer, а также добавлены оконный компонент и два текстовых поля. Этот компонент реализует ``LookupListener`` для прослушивания изменений в link:https://netbeans.apache.org/wiki/devfaqlookup[Lookup].
=== Создание модуля
В этом упражнении будет создан модуль на платформе NetBeans MyViewer в каталоге ``MavenSelectionSuite`` .
[start=1]
1. Выберите в главном меню "Файл" > "Новый проект" (CTRL+SHIFT+N).
[start=2]
1. Выберите модуль Maven NetBeans из категории Maven. Нажмите кнопку "Далее".
[start=3]
1. В поле "Имя проекта" введите *MyViewer*.
[start=4]
1. Подтвердите местоположение проекта - каталог ``MavenSelectionSuite`` . Нажмите кнопку "Готово".
[start=5]
1. В окне "Проекты" щелкните правой кнопкой мыши узел "Библиотеки" и выберите команду "Добавить зависимость".
[start=6]
1. На вкладке "Открыть проекты" выберите модуль на платформе NetBeans MyAPI. Нажмите кнопку "ОК".
image::images/maven-suite_maven-suite-addapi.png[title="Категория "Общедоступные пакеты" в окне "Свойства""]
При нажатии кнопки "ОК" среда IDE добавляет артефакт в список зависимостей в POM и выводит его в узле "Библиотеки".
Обратите внимание на POM для модуля MyViewer: вышестоящим проектом для модуля является MavenSelectionSuite, элемент ``nbm`` указан для ``packaging`` , а элемент *nbm-maven-plugin* используется для построения проекта как модуля на платформе NetBeans.
[source,xml]
----
<modelVersion>4.0.0</modelVersion>
*<parent>
<groupId>com.mycompany</groupId>
<artifactId>MavenSelectionSuite</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>*
<groupId>com.mycompany</groupId>
<artifactId>MyViewer</artifactId>
*<packaging>nbm</packaging>*
<version>1.0-SNAPSHOT</version>
<name>MyViewer NetBeans Module</name>
----
=== Создание оконного компонента
В этом упражнении будет создан оконный компонент и добавлено два текстовых поля.
[start=1]
1. Щелкните проект MyViewer правой кнопкой мыши и выберите "Создать" > "Окно".
[start=2]
1. Выберите в контекстном меню значение *navigator* и установите флажок "Открывать при запуске приложения". Нажмите кнопку "Далее".
[start=3]
1. В качестве префикса имени класса введите *MyViewer*. Нажмите кнопку "Готово".
[start=4]
1. Перетащите две метки из палитры в компонент и измените текст верхней метки на ``"[nothing selected]"`` .
image::images/maven-suite_maven-suite-myviewertopcomponent.png[title="Текстовые поля в оконном компоненте"]
[start=5]
1. Перейдите на вкладку "Исходный код" и измените сигнатуру класса, чтобы реализовать ``LookupListener`` .
[source,java]
----
public class MyViewerTopComponent extends TopComponent *implements LookupListener* {
----
[start=6]
1. Реализуйте абстрактные методы, установив курсор в режиме вставки в строке и удерживая нажатыми клавиши ALT+ВВОД.
[start=7]
1. Добавьте результат поля ``private`` ``result`` и измените начальное значение на нулевое.
[source,java]
----
private Lookup.Result result = null;
----
[start=8]
1. Внесите следующие изменения в методы ``componentOpened()`` , ``componentClosed()`` и ``resultChanged()`` :
[source,java]
----
public void componentOpened() {
*result = Utilities.actionsGlobalContext().lookupResult(APIObject.class);
result.addLookupListener(this);*
}
public void componentClosed() {
*result.removeLookupListener (this);
result = null;*
}
public void resultChanged(LookupEvent le) {
*Lookup.Result r = (Lookup.Result) le.getSource();
Collection c = r.allInstances();
if (!c.isEmpty()) {
APIObject o = (APIObject) c.iterator().next();
jLabel1.setText (Integer.toString(o.getIndex()));
jLabel2.setText (o.getDate().toString());
} else {
jLabel1.setText("[no selection]");
jLabel2.setText ("");
}*
}
----
При каждом открытии компонента с помощью `` link:http://bits.netbeans.org/dev/javadoc/org-openide-util/org/openide/util/Utilities.html#actionsGlobalContext%28%29[Utilities.actionsGlobalContext()]`` можно предоставить классу возможность глобального прослушивания объекта поиска для выбранного компонента. Lookup удаляется при закрытии компонента. Метод ``resultChanged()`` реализует ``LookupListener`` , чтобы обновить метки JLabel в форме согласно выбранному объекту ``APIObject`` .
[start=9]
1. Исправьте операторы импорта и убедитесь, что элемент * ``org.openide.util.Utilities`` * добавлен. Сохраните изменения.
== Создание модуля MyEditor
В этом разделе будет создан новый модуль с именем MyEditor. Модуль будет содержать компонент `` link:http://bits.netbeans.org/dev/javadoc/org-openide-windows/org/openide/windows/TopComponent.html[TopComponent]`` , предлагающий экземпляры ``APIObject`` через Lookup. Также будут открыты новые экземпляры компонента MyEditor.
=== Создание модуля
В этом упражнении будет создан модуль на платформе NetBeans в каталоге ``MavenSelectionSuite`` и добавлена зависимость от модуля MyAPI.
[start=1]
1. В главном меню выберите "Файл" > "Новый проект".
[start=2]
1. Выберите модуль Maven NetBeans из категории Maven. Нажмите кнопку "Далее".
[start=3]
1. В поле "Имя проекта" введите *MyEditor*.
[start=4]
1. Подтвердите местоположение проекта - каталог ``MavenSelectionSuite`` . Нажмите кнопку "Готово".
[start=5]
1. В окне "Проекты" щелкните правой кнопкой мыши узел проекта "Библиотеки" и выберите команду "Добавить зависимость".
[start=6]
1. На вкладке "Открыть проекты" выберите модуль на платформе NetBeans MyAPI. Нажмите кнопку "ОК".
=== Добавление действия
В этом упражнении будет создан класс, чтобы добавить в меню "Файл" пункт для открытия компонента с именем MyEditor. Этот компонент будет создан в следующем упражнении.
[start=1]
1. Для открытия диалогового окна "Новое действие" щелкните проект MyEditor правой кнопкой мыши и выберите в меню "Создать" команду "Действие".
[start=2]
1. Укажите параметр "Всегда включено". Нажмите кнопку "Далее".
[start=3]
1. Оставьте значения по умолчанию на странице "Регистрация в интерфейсе". Нажмите кнопку "Далее".
[start=4]
1. В поле "Имя класса" введите *OpenEditorAction*.
[start=5]
1. В поле "Отображаемое имя" введите *Open Editor*. Нажмите кнопку "Готово".
Среда IDE открывает в редакторе класс ``OpenEditorAction`` и добавляет в файл ``layer.xml`` следующие данные:
[source,xml]
----
<filesystem>
<folder name="Actions">
<folder name="Build">
<file name="com-mycompany-myeditor-OpenEditorAction.instance">
<attr name="delegate" newvalue="com.mycompany.myeditor.OpenEditorAction"/>
<attr name="displayName" bundlevalue="com.mycompany.myeditor.Bundle#CTL_OpenEditorAction"/>
<attr name="instanceCreate" methodvalue="org.openide.awt.Actions.alwaysEnabled"/>
<attr name="noIconInMenu" boolvalue="false"/>
</file>
</folder>
</folder>
<folder name="Menu">
<folder name="File">
<file name="com-mycompany-myeditor-OpenEditorAction.shadow">
<attr name="originalFile" stringvalue="Actions/Build/com-mycompany-myeditor-OpenEditorAction.instance"/>
<attr name="position" intvalue="0"/>
</file>
</folder>
</folder>
</filesystem>
----
[start=6]
1. Измените класс ``OpenEditorAction`` , чтобы изменить метод ``actionPerformed`` .
[source,java]
----
public void actionPerformed(ActionEvent e) {
MyEditor editor = new MyEditor();
editor.open();
editor.requestActive();
}
----
=== Добавление компонента редактора
В этом упражнении будет создан компонент MyEditor, открывающийся в области редактора после вызова классом ``OpenEditorAction`` . Шаблон оконного компонента не будет использоваться, так как потребуется несколько экземпляров компонента и данный оконный компонент будет использоваться для создания единичных экземпляров. Вместо него будет использован шаблон формы JPanel. Затем для расширения компонента ``TopComponent`` указанный класс будет изменен.
[start=1]
1. Щелкните правой кнопкой мыши "Исходные файлы", выберите "Создать" > "Прочее" и укажите в категории "Формы Swing GUI" форму JPanel. Нажмите кнопку "Далее".
[start=2]
1. В поле "Имя класса" введите *MyEditor* и укажите пакет ``com.mycompany.myeditor`` . Нажмите кнопку "Готово".
[start=3]
1. Перетащите в компонент два текстовых поля.
[start=4]
1. Отмените для всех текстовых полей выбор свойства ``editable`` , чтобы они были доступны только для чтения.
image::images/maven-suite_maven-suite-editableprop.png[title="Изменяемые свойства меток"]
[start=5]
1. Перейдите на вкладку "Исходный код" и измените сигнатуру класса, чтобы расширить ``TopComponent`` вместо ``javax.swing.JPanel`` .
[source,java]
----
public class MyEditor extends *TopComponent*
----
[start=6]
1. Установите курсор в режиме вставки в сигнатуру и нажмите клавиши ALT+ВВОД, чтобы исправить ошибку в коде путем поиска репозитория Maven и добавления зависимости от артефакта ``org.openide.windows`` . Исправьте операторы импорта.
image::images/maven-suite_maven-suite-add-topcomponent.png[title="Изменяемые свойства меток"]
[start=7]
1. Измените конструктор, чтобы каждый раз при выборе класса создавать новый экземпляр ``APIObject`` .
[source,java]
----
public MyEditor() {
initComponents();
*APIObject obj = new APIObject();
associateLookup(Lookups.singleton(obj));
jTextField1.setText("APIObject #" + obj.getIndex());
jTextField2.setText("Created: " + obj.getDate());
setDisplayName("MyEditor " + obj.getIndex());*
}
----
Строка ``associateLookup(Lookups.singleton(obj));`` в конструкторе создаст Lookup, содержащий новый экземпляр объекта ``APIObject`` .
[start=8]
1. Исправьте операторы импорта и сохраните измененные данные.
В текстовых полях в компоненте отображаются только индекс и дата объекта ``APIObject`` . Это позволит определить, что каждый компонент MyEditor уникален, а MyViewer выводит подробные данные выбранного компонента MyEditor.
NOTE: Ошибки в ``OpenEditorAction`` будут разрешены после сохранения изменений в ``MyEditor`` .
== Сборка и запуск набора модулей
Теперь можно запустить набор модулей, чтобы проверить корректность его сборки, установки и настройки.
=== Объявление прямых зависимостей
Перед построением и запуском набора модулей необходимо изменить одну из зависимостей проекта MyEditor. При попытке построения набора модулей прямо сейчас в окне "Вывод" появится сообщение о невозможности компиляции набора, так как модуль MyEditor требует доступности артефакта ``org.openide.util-lookup`` во время выполнения.
Щелкните узел проекта правой кнопкой мыши и выберите команду "Показать график зависимостей", чтобы просмотреть зависимости модуля.
image::images/maven-suite_maven-suite-dependency-graph.png[title="График зависимостей артефакта"]
Обратите внимание, что у MyEditor нет прямой зависимости от ``org.openide.util-lookup`` . Зависимость транзитивна, и артефакт доступен для проекта во время компиляции, однако зависимость должна быть прямой, если артефакт должен быть доступен во время выполнения. Необходимо изменить POM, чтобы объявить артефакт как прямую зависимость.
Объявить артефакт как прямую зависимость можно двумя способами: вручную изменив POM либо с помощью соответствующего пункта контекстного меню в окне "Проекты".
[start=1]
1. Разверните узел "Библиотеки" модуля MyEditor.
[start=2]
1. Щелкните правой кнопкой мыши артефакт ``org.openide.util-lookup`` и выберите команду "Объявить как прямую зависимость".
При выборе команды "Объявить как прямую зависимость" среда IDE изменяет POM, чтобы добавить артефакт как зависимость.
NOTE: Артефакт ``org.openide.util-lookup`` уже является прямой зависимостью модуля MyViewer.
=== Определение местоположения установки NetBeans
По умолчанию при использовании архетипа Maven для создания набора модулей на платформе NetBeans установка целевой платформы NetBeans не указывается. Чтобы установить и запустить набор модулей в среде IDE, необходимо указать путь к каталогу установки, изменив файл ``profiles.xml`` в проекте POM.
[start=1]
1. Разверните узел "Файлы проекта" в приложении MavenSelectionSuite и дважды щелкните файл ``profiles.xml`` , чтобы открыть его в редакторе.
[start=2]
1. Измените элемент ``<netbeans.installation>`` , чтобы указать путь к целевой платформе NetBeans и сохранить изменения.
[source,xml]
----
<profile>
<id>netbeans-ide</id>
<properties>
<netbeans.installation>/home/me/netbeans-6.9</netbeans.installation>
</properties>
</profile>
----
NOTE: Для этого пути необходимо указать каталог, содержащий каталог ``bin`` с выполняемым файлом.
Например, в OS X путь может выглядеть следующим образом:
[source,xml]
----
<netbeans.installation>/Applications/NetBeans/NetBeans6.9.app/Contents/Resources/NetBeans</netbeans.installation>
----
=== Запуск приложения
После указания местоположения установки целевой среды IDE можно использовать команду "Выполнить" для проекта набора.
[start=1]
1. Щелкните MavenSelectionSuite правой кнопкой мыши и выберите команду "Выполнить".
При выборе команды "Выполнить" экземпляр среды IDE запускает установленный набор модулей.
image::images/maven-suite_maven-suite-run1.png[title=" Окна My Viewer и MyEditor"]
При запуске приложения откроется окно MyViewer, где отобразятся две текстовые метки. Теперь в меню "Файл" можно выбрать команду "Открыть редактор", чтобы открыть в области редактора компонент MyEditor. В окне MyViewer отобразятся подробные данные выбранного компонента MyEditor.
Действие "Выполнить" настроено для проекта набора модулей по умолчанию, чтобы использовать подключаемый модуль Reactor для рекурсивного построения модулей набора и добавления их в пакет. Можно открыть окно "Свойства" проекта, чтобы просмотреть задачи Maven, сопоставленные с действиями в среде IDE.
image::images/maven-suite_maven-suite-run-action.png[title=" Окна My Viewer и MyEditor"]
В категории "Действия" в окне "Свойства" можно увидеть задачи, сопоставленные с действием "Выполнить".
== Динамическое изменение Lookup
Теперь каждый раз при открытии нового компонента MyEditor создается новый объект ``APIObject`` . В этом разделе к компоненту MyEditor будет добавлена кнопка, с помощью которой текущий ``APIObject`` компонента будет заменяться на новый. Будет изменен код для `` link:http://bits.netbeans.org/dev/javadoc/org-openide-util-lookup/org/openide/util/lookup/InstanceContent.html[InstanceContent]`` , чтобы выполнять динамическую обработку изменений в содержимом Lookup.
[start=1]
1. Разверните проект MyEditor и откройте форму ``MyEditor`` в режиме проектирования в редакторе.
[start=2]
1. Перетащите кнопку в форму и измените текст кнопки на "Заменить".
[start=3]
1. Щелкните эту кнопку правой кнопкой мыши и выберите "События" > "Действие" > actionPerformed, чтобы создать метод обработчика события для кнопки и открыть форму в редакторе исходного кода.
[start=4]
1. Добавьте к классу следующее поле ``final`` :
[source,java]
----
public class MyEditor extends TopComponent {
*private final InstanceContent content = new InstanceContent();*
----
Чтобы воспользоваться ``InstanceContent`` , в конструкторе необходимо использовать `` link:http://bits.netbeans.org/dev/javadoc/org-openide-util-lookup/org/openide/util/lookup/AbstractLookup.html#AbstractLookup%28org.openide.util.lookup.AbstractLookup.Content%29[AbstractLookup]`` вместо ``Lookup`` .
[start=5]
1. Измените тело метода обработчика события ``jButton1ActionPerformed`` , скопировав строки из конструктора класса и добавив вызов в ``content.set`` . В результате метод должен выглядеть следующим образом:
[source,java]
----
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
*APIObject obj = new APIObject();
jTextField1.setText ("APIObject #" + obj.getIndex());
jTextField2.setText ("Created: " + obj.getDate());
setDisplayName ("MyEditor " + obj.getIndex());
content.set(Collections.singleton (obj), null);*
}
----
[start=6]
1. Измените конструктор, чтобы удалить строки, скопированные в метод обработчика события, и измените ``associateLookup`` , чтобы использовать ``AbstractLookup`` и добавить ``jButton1ActionPerformed(null);`` . В результате конструктор должен выглядеть следующим образом:
[source,java]
----
public MyEditor() {
initComponents();
*associateLookup(new AbstractLookup(content));
jButton1ActionPerformed(null);*
}
----
После добавления в конструктор ``jButton1ActionPerformed(null);`` можно убедиться, что компонент инициализируется при создании.
[start=7]
1. Исправьте операторы импорта и сохраните измененные данные.
При повторном запуске проекта набора модулей новая кнопка появится во всех компонентах MyEditor. При нажатии этой кнопки номер индекса в текстовых полях будет увеличиваться. Метка в окне MyViewer также будет обновляться в соответствии с новым значением.
В данном учебном курсе были рассмотрены принципы создания набора модулей на платформе NetBeans с помощью архетипа Maven, а также принципы его запуска. Были рассмотрены структура набора модулей и процесс настройки POM модулей для указания общедоступных пакетов. Также был рассмотрен процесс изменения вышестоящего проекта POM для указания местоположения установки целевой платформы NetBeans, чтобы команда "Выполнить" в среде IDE устанавливала набор и запускала новый экземпляр платформы. Дополнительные примеры построения приложений и модулей на платформе NetBeans приведены в учебных курсах link:https://netbeans.apache.org/kb/docs/platform_ru.html[Учебной карты по платформе NetBeans].
== Дополнительные сведения
Дополнительные сведения о создании и разработке на платформе NetBeans приведены в следующих ресурсах:
* link:https://netbeans.apache.org/kb/docs/platform_ru.html[Учебная карта по платформе NetBeans]
* link:https://netbeans.apache.org/wiki/[Часто задаваемые вопросы по разработке NetBeans ]
* link:http://bits.netbeans.org/dev/javadoc/[Документация Javadoc по интерфейсам API в среде NetBeans]
Если у вас возникли вопросы по платформе NetBeans, можно отправить их в список рассылки dev@platform.netbeans.org либо ознакомиться с link:https://mail-archives.apache.org/mod_mbox/netbeans-dev/[Архивом списка рассылки по платформе NetBeans].