blob: 8de75f065af1735692c596eace38c81129760e99 [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. В этом учебном курсе будет создан простой проект модуля, позволяющий после его установки создавать в проектах новый тип файлов. Модуль также создает действие меню, доступное при выборе нового типа файлов.
Этот документ основан на link:https://netbeans.apache.org/tutorials/nbm-filetype_ru.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>>
* <<01a,Создание модуля>>
* <<01b,Создание класса DataObject>>
* <<02,Сборка и запуск проекта модуля>>
* <<02a,Определение местоположения установки NetBeans>>
* <<02b,Запуск модуля>>
* <<03,Добавление действия для типа файлов>>
* <<03a,Создание класса действия>>
* <<03b,Присвоение действию поведения>>
* <<04,Создание окна для типа файлов>>
* <<05,Создание окна с несколькими представлениями>>
*Для работы с этим учебным курсом требуется программное обеспечение и ресурсы, перечисленные в следующей таблице.*
NOTE: Для разработки приложений на платформе NetBeans не требуется загружать отдельную версию этой платформы. Как правило, разработка приложений и модулей осуществляется в среде IDE NetBeans, затем необходимо просто включить требуемые модули для выполнения платформы 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, а затем для нового типа файлов - элемент DataObject.
=== Создание модуля
В этом упражнении для построения проекта модуля на платформе NetBeans из архетипа Maven используется мастер создания проекта.
[start=1]
1. Откройте мастер создания проекта и выберите в категории Maven "Модуль Maven NetBeans". Нажмите кнопку "Далее".
[start=2]
1. В поле "Имя проекта" введите *AbcFileType*. Нажмите кнопку "Готово".
При нажатии кнопки "Готово" в среде IDE создается проект AbcFileType. Обратите внимание на POM: Maven будет использовать элемент `` link:http://maven.apache.org/plugins/maven-jar-plugin/[maven-jar-plugin]`` для построения файла JAR, а элемент `` link:http://bits.netbeans.org/mavenutilities/nbm-maven-plugin/[nbm-maven-plugin]`` добавит этот файл в пакет в качестве модуля на платформе NetBeans ``nbm`` .
[source,xml]
----
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>AbcFileType</artifactId>
*<packaging>nbm</packaging>*
<version>1.0-SNAPSHOT</version>
<name>AbcFileType NetBeans Module</name>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
*<artifactId>nbm-maven-plugin</artifactId>*
<extensions>true</extensions>
</plugin>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
*<artifactId>maven-jar-plugin</artifactId>*
<version>2.2</version>
<configuration>
<!-- to have the jar plugin pickup the nbm generated manifest -->
<useDefaultManifestFile>true</useDefaultManifestFile>
</configuration>
</plugin>
</plugins>
</build>
----
=== Создание класса DataObject
В этом разделе будет использован мастер создания файла для создания и распознавания нового типа файлов с именем ``.abc`` . Мастер создаст `` link:http://bits.netbeans.org/dev/javadoc/org-openide-loaders/org/openide/loaders/DataObject.html[DataObject]`` , средство разрешения типа MIME и шаблон для файлов ``abc`` , а также изменит файл ``layer.xml`` , чтобы добавить регистрационные записи для нового типа файлов.
[start=1]
1. В окне "Проекты" щелкните правой кнопкой мыши узел проекта и выберите "Создать" > "Тип файлов".
[start=2]
1. На панели "Распознавание файлов" введите *text/x-abc* в поле "Тип MIME" и *.abc .ABC* в поле "Расширение файла". Нажмите кнопку "Далее".
image::images/maven-single_maven-single-new-filetype-wizard.png[title="Мастер создания файла"]
[start=3]
1. В качестве префикса имени класса введите *Abc*.
[start=4]
1. Нажмите кнопку "Обзор" и выберите изображение размером 16x16 пикселей в качестве значка нового типа файлов. Нажмите кнопку "Готово".
Можно сохранить на компьютере изображение `` link:images/maven-crud_abc16.png[abc16.png]`` (
image::images/maven-crud_abc16.png[title="16x16"]) и указать его в мастере.
При нажатии кнопки "Готово" среда IDE создает класс ``AbcDataObject`` и копирует этот значок типа файлов в пакет каталога ``src/main/resources`` в узле "Другие источники".
image::images/maven-single_maven-single-projects1.png[title="Снимок экрана: окно "Проекты""]
В окне "Проекты" отображается, что мастер создал средство разрешения типа MIME ( ``AbcResolver.xml`` ) и шаблон для файлов ( ``AbcTemplate.abc`` ) в каталоге ``src/main/resources``
Дополнительные сведения о файлах, создаваемых средой IDE приведены в документе link:https://netbeans.apache.org/wiki/devfaqdataobject[Что такое DataObject?] и в разделе link:nbm-filetype_ru.html#recognizing[Распознавание файлов Abc] link:nbm-filetype_ru.html[Учебного курса по типу файлов NBN].
== Сборка и запуск проекта
В этом разделе будет выполнена настройка модуля для его установки в текущую версию среды IDE. Новый экземпляр среды IDE запускается при запуске модуля.
=== Определение местоположения установки NetBeans
По умолчанию при использовании архетипа Maven для создания модуля на платформе NetBeans установка целевой платформы NetBeans не указывается. Проект можно построить, однако при попытке запустить его до указания каталога установки будет появляться сообщение в окне "Вывод", подобное сообщению на рисунке ниже.
image::images/maven-single_output-build-error.png[title="Сообщение об ошибке построения в окне "Вывод""]
Чтобы установить и запустить модуль IDE, необходимо изменить элемент ``nbm-maven-plugin`` в POM для указания пути к каталогу установки.
[start=1]
1. Раскройте узел "Файлы проекта" и откройте в редакторе файл ``pom.xml`` .
[start=2]
1. Укажите путь к каталогу установки NetBeans, изменив элемент ``nbm-maven-plugin`` для добавления элемента ``<netbeansInstallation>`` .
[source,xml]
----
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>nbm-maven-plugin</artifactId>
<version>3.2</version>
<extensions>true</extensions>
*<configuration>
<netbeansInstallation>/home/me/netbeans-6.9</netbeansInstallation>
</configuration>*
</plugin>
----
NOTE: Для этого пути необходимо указать каталог, содержащий каталог ``bin`` с выполняемым файлом.
Например, в OS X путь может выглядеть следующим образом:
[source,xml]
----
<netbeansInstallation>/Applications/NetBeans/NetBeans 6.9.app/Contents/Resources/NetBeans</netbeansInstallation>
----
=== Запуск модуля
После указания каталога установки NetBeans модуль можно построить и запустить.
[start=1]
1. Щелкните правой кнопкой мыши узел проекта и выберите "Построить".
[start=2]
1. Щелкните правой кнопкой мыши узел проекта и выберите "Выполнить".
При нажатии кнопки "Выполнить" среда IDE запускает новый установленный модуль. Чтобы подтвердить корректность работы нового модуля, создайте новый проект и затем с помощью мастера создайте файл ``abc`` . Например, можно создать простое приложение Java, открыть мастер создания файла и выбрать в категории "Прочее" тип файлов Empty Abc.
При создании нового файла укажите исходный файл, чтобы просмотреть его в окне "Проекты". Мастер создания типа файлов по умолчанию создает файл на корневом уровне проекта.
image::images/maven-single_wizard-new-abc-file.png[title="Мастер создания файла с типом файлов Abc"]
После создания новый файл abc отображается в окне "Проекты" со значком своего типа. Откройте этот файл в редакторе: его содержимое создано из шаблона файла.
image::images/maven-single_maven-single-projects-abcfile.png[title="Файл Abc в окне "Проекты" и его содержимое в редакторе"]
== Добавление действия для типа файлов
В этом разделе будет добавлено действие, вызываемое щелчком правой кнопки мыши в контекстном меню узла для нового типа файлов.
=== Создание класса действия
В этом упражнении будет использован мастер создания действия для создания класса Java, выполняющего действие для нового типа файлов. Мастер также зарегистрирует этот класс в файле ``layer.xml`` .
[start=1]
1. Щелкните узел проекта правой кнопкой мыши и выберите "Создать" > "Действие".
[start=2]
1. В панели "Тип действия" выберите "Включено по условию" и введите в поле "Класс cookie" *com.mycompany.abcfiletype.AbcDataObject*. Нажмите кнопку "Далее".
image::images/maven-single_maven-single-newactionwizard.png[title="Мастер создания действия"]
[start=3]
1. Выберите в контекстном меню "Категория" команду "Изменить" и снимите флажок "Глобальный пункт меню".
[start=4]
1. Выберите "Пункт контекстного меню типов файлов" и укажите *text/x-abc* в контекстном меню "Тип содержимого". Нажмите кнопку "Далее".
[start=5]
1. Введите *MyAction* в поле "Имя класса" и *My Action* в поле "Отображаемое имя". Нажмите кнопку "Готово".
При нажатии кнопки "Готово" создается ``MyAction.java`` в исходном файле ``com.mycompany.abcfiletype`` . Откройте в редакторе файл ``layer.xml`` : мастер добавил подробные данные о новом действии для типа файлов в элемент ``Edit`` папки ``Actions`` .
[source,xml]
----
<folder name="Actions">
<folder name="Edit">
*<file name="com-mycompany-abcfiletype-MyAction.instance">*
<attr name="delegate" methodvalue="org.openide.awt.Actions.inject"/>
<attr name="displayName" bundlevalue="com.mycompany.abcfiletype.Bundle#CTL_MyAction"/>
<attr name="injectable" stringvalue="com.mycompany.abcfiletype.MyAction"/>
<attr name="instanceCreate" methodvalue="org.openide.awt.Actions.context"/>
<attr name="noIconInMenu" boolvalue="false"/>
<attr name="selectionType" stringvalue="EXACTLY_ONE"/>
<attr name="type" stringvalue="com.mycompany.abcfiletype.AbcDataObject"/>
</file>
</folder>
</folder>
----
Также мастер создал элементы в папках ``Loaders`` и ``Factories`` , присваиваемые новому типу файлов. Действия меню для типа файлов ``abc`` указываются в узле ``Actions`` , а элемент ``DataLoader`` в узле ``Factories`` .
[source,xml]
----
<folder name="Loaders">
<folder name="text">
*<folder name="x-abc">
<folder name="Actions">
<file name="com-mycompany-abcfiletype-MyAction.shadow">*
<attr name="originalFile" stringvalue="Actions/Edit/com-mycompany-abcfiletype-MyAction.instance"/>
*<attr name="position" intvalue="0"/>*
</file>
<file name="org-openide-actions-CopyAction.shadow">
<attr name="originalFile" stringvalue="Actions/Edit/org-openide-actions-CopyAction.instance"/>
<attr name="position" intvalue="400"/>
</file>
...
</folder>
*<folder name="Factories">
<file name="AbcDataLoader.instance">*
<attr name="SystemFileSystem.icon" urlvalue="nbresloc:/com/mycompany/abcfiletype/abc16.png"/>
<attr name="dataObjectClass" stringvalue="com.mycompany.abcfiletype.AbcDataObject"/>
<attr name="instanceCreate" methodvalue="org.openide.loaders.DataLoaderPool.factory"/>
<attr name="mimeType" stringvalue="text/x-abc"/>
</file>
</folder>
</folder>
</folder>
</folder>
----
Позиция элемента My Action в контекстном меню определяется атрибутом ``position`` ( `` <attr name="position" intvalue="0"/>`` ). По умолчанию элементу ``intvalue`` атрибута нового действия присваивается значение ``0`` , что предоставляет этому действию самую верхнюю позицию в меню. Можно изменить этот порядок, изменив значение ``intvalue`` . Например, если изменить значение ``intvalue`` на ``200`` , пункт меню My Action будет находиться ниже пункта "Открыть" действия "Открыть" значение ``intvalue`` равно ``100`` ).
=== Присвоение действию поведения
Теперь необходимо добавить код действия. В этом примере будет добавлен код, использующий ``DialogDisplayer`` для открытия диалогового окна при выборе действия в контекстном меню. Чтобы использовать ``DialogDisplayer`` , также необходимо объявить прямую зависимость от ``org.openide.dialogs`` .
[start=1]
1. Измените метод ``actionPerformed(ActionEvent ev)`` в ``MyAction.java`` , чтобы открыть диалоговое окно при выборе My Action.
[source,java]
----
@Override
public void actionPerformed(ActionEvent ev) {
*FileObject f = context.getPrimaryFile();
String displayName = FileUtil.getFileDisplayName(f);
String msg = "This file is " + displayName + ".";
NotifyDescriptor nd = new NotifyDescriptor.Message(msg);
DialogDisplayer.getDefault().notify(nd);*
}
----
[start=2]
1. Исправьте операторы импорта и подтвердите импорт ``*org.openide.filesystems.FileObject*`` . Сохраните изменения.
После исправления был добавлен оператор импорта для ``org.openide.DialogDisplayer`` . Теперь необходимо объявить зависимость от артефакта ``org.openide.dialogs`` как прямую зависимость, а не транзитивную.
[start=3]
1. Щелкните правой кнопкой мыши файл JAR ``org.openide.dialogs`` в узле проекта "Библиотеки" и выберите команду "Объявить как прямую зависимость".
Теперь можно протестировать модуль, чтобы подтвердить корректность работы нового действия.
NOTE: Чтобы запустить модуль, необходимо сначала очистить его и построить.
image::images/maven-single_maven-single-action-popup.png[title="Файл Abc в окне "Проекты" и его содержимое в редакторе"]
Щелкните правой кнопкой мыши узел типа файлов ``abc`` : элемент My Action является одним из пунктов контекстного меню.
== Создание окна для типа файлов
По умолчанию новый тип файлов открывается в базовом текстовом редакторе. Если для нового типа файлов не требуется использование редактора, можно создать новое окно специально для редактирования этого типа файлов. Затем можно изменить оконный компонент, чтобы предоставить другие способы редактирования файла. Например, можно создать визуальный редактор. В этом разделе будет создан новый оконный компонент специально для файлов нового типа.
[start=1]
1. Щелкните узел проекта правой кнопкой мыши и выберите "Создать" > "Окно".
[start=2]
1. Выберите в контекстном меню значение *editor* и установите флажок "Открывать при запуске приложения". Нажмите кнопку "Далее".
[start=3]
1. В качестве префикса имени класса введите *Abc*. Нажмите кнопку "Готово".
[start=4]
1. Откройте в редакторе ``AbcDataObject.java`` и измените конструктор класса, чтобы использовать `` link:http://bits.netbeans.org/dev/javadoc/org-openide-loaders/org/openide/loaders/OpenSupport.html[OpenSupport]`` вместо ``DataEditorSupport`` .
[source,java]
----
public AbcDataObject(FileObject pf, MultiFileLoader loader) throws DataObjectExistsException, IOException {
super(pf, loader);
CookieSet cookies = getCookieSet();
*cookies.add((Node.Cookie) new AbcOpenSupport(getPrimaryEntry()));*
}
----
[start=5]
1. Создайте класс ``AbcOpenSupport`` , вызываемый конструктором.
Нажмите сочетание клавиш ALT+ВВОД в строке, содержащей вызов ``AbcOpenSupport`` , чтобы создать элемент ``AbcOpenSupport`` в пакете ``com.mycompany.abcfiletype`` .
[start=6]
1. Измените ``AbcOpenSupport`` , чтобы расширить ``OpenSupport`` и реализовать ``OpenCookie`` и ``CloseCookie`` .
[source,java]
----
class AbcOpenSupport *extends OpenSupport implements OpenCookie, CloseCookie* {
----
[start=7]
1. Реализуйте абстрактные методы (ALT+ВВОД) и внесите в класс следующие изменения:
[source,java]
----
public AbcOpenSupport(*AbcDataObject.Entry entry*) {
*super(entry);*
}
@Override
protected CloneableTopComponent createCloneableTopComponent() {
*AbcDataObject dobj = (AbcDataObject) entry.getDataObject();
AbcTopComponent tc = new AbcTopComponent();
tc.setDisplayName(dobj.getName());
return tc;*
}
----
[start=8]
1. Откройте в редакторе ``AbcTopComponent`` и измените класс, чтобы расширить ``CloneableTopComponent`` вместо ``TopComponent`` .
[source,java]
----
public final class AbcTopComponent extends *CloneableTopComponent* {
----
[start=9]
1. Измените значение модификатора класса с ``private`` на ``public`` .*public*
[source,java]
----
static AbcTopComponent instance;
----
[start=10]
1. Исправьте операторы импорта и сохраните измененные данные.
Теперь попробуйте запустить модуль еще раз после очистки и построения проекта.
image::images/maven-single_maven-single-newfile-window.png[title="Файл Abc в окне "Проекты" и его содержимое в редакторе"]
Файлы abc открываются теперь в новом окне, а не в базовом редакторе.
В данном учебном курсе были рассмотрены принципы создания модуля на платформе NetBeans с помощью архетипа Maven, а также принципы его запуска. Также был рассмотрен процесс изменения проекта POM для указания местоположения установки целевой платформы NetBeans, чтобы команда "Выполнить" в среде IDE устанавливала модуль и запускала новый экземпляр этой среды. Кроме того, были рассмотрены некоторые принципы работы с типами файлов и элементами ``DataObjects`` . Для получения дополнительных сведений об этом обратитесь к link:https://netbeans.apache.org/tutorials/nbm-filetype_ru.html[Учебному курсу по типам файлов NetBeans]. Дополнительные примеры построения приложений и модулей на платформе NetBeans приведены в учебных курсах link:https://netbeans.apache.org/kb/docs/platform_ru.html[Учебной карты по платформе NetBeans].
== Дополнительные сведения
Дополнительные сведения о создании и разработке приложений приведены в следующих ресурсах:
* link:https://netbeans.apache.org/kb/docs/platform_ru.html[Учебная карта по платформе 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].