// 
//     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.
//

= Разработка общих приложений Java
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Разработка общих приложений Java - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Разработка общих приложений Java

В следующем кратком учебном курсе приведено пошаговое описание некоторых базовых шагов по разработке приложений Java SE в NetBeans IDE. Данный учебный курс предполагает наличие базовых знаний о разработке приложений на Java. Здесь представлены некоторые возможности среды IDE, которые позволяют упростить процесс разработки приложений.

В рамках данного руководства будет создано приложение для получения из нескольких исходных слов одного слова, содержащего по одной букве из каждого исходного слова. Про такое слово можно сказать, что оно имеет форму _акронима_ (acrostic).

Изучение материала, представленного в этом руководстве, занимает приблизительно 30 минут. Если требуется более быстрое учебное руководство "Привет, мир" см. раздел link:quickstart.html[+Быстрое учебное руководство по Java IDE NetBeans+].


image::images/netbeans-stamp-80-74.png[title="Содержимое на этой странице применимо к IDE NetBeans 7.4 и 8.0"]


*Для работы с этим учебным курсом требуются программное обеспечение и материалы, перечисленные в таблице ниже.*

|===
|Программное обеспечение или материал |Требуемая версия 

|link:https://netbeans.org/downloads/index.html[+IDE NetBeans+] |7.4 или 8.0 

|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Комплект для разработчика на языке Java (JDK)+] |6, 7 или 8 
|===


== Настройка проектов 

Создаваемое приложение будет содержать два проекта:

* проект библиотеки классов Java, в котором будет создан служебный класс;
* проект приложения Java с главным классом, который реализует метод из служебного класса проекта библиотеки.

После создания проектов проект библиотеки будет добавлен к пути к классам проекта приложения. Затем должен быть написан код приложения. В проект библиотеки будет включен служебный класс с методом `acrostic`. Метод `acrostic` использует в качестве параметра массив слов, а затем на основе этих слов создает акроним. Проект "MyApp" будет содержать главный класс, который вызывает метод `acrostic` и передает слова, введенные в качестве параметра при выполнении приложения.

*Примечание.* Строго говоря, для такого простого приложения не требуется два проекта. В этом руководстве на примере двух проектов рассматриваются функции, которые могут потребоваться при создании более сложных приложений.


=== [[Создание проекта библиотеки классов Java]] 

1. Выберите команду "Файл" > "Создать проект" (CTRL+SHIFT+N). В области "Категории" выберите "Java". В области "Проекты" выберите "Библиотека классов Java". Нажмите кнопку "Далее".
2. В поле "Имя проекта" введите `MyLib`. В поле "Местоположение проекта" укажите любой каталог на компьютере. Всюду далее в настоящем учебном пособии это будет каталог с именем `_NetBeansProjects_`.

*Примечание.* Путь, указанный выше, должен отображаться как следующий в поле папки проекта мастера: `` /`_NetBeansProjects_`/MyLib/ ``



. Установите флажок "Использовать отдельную папку для хранения библиотек" и укажите местоположение папки библиотек (необязательно). Дополнительная информация об этой команде приведена в статье link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG455[+Предоставление доступа к библиотеке другим пользователям+] в документе _Разработка приложений с помощью NetBeans IDE_.


. Нажмите кнопку 'Готово'. Проект "MyLib" будет открыт как в окне "Проекты", так и в окне "Файлы".


=== [[Создание проекта приложения Java]] 

1. Выберите команду "Файл" > "Новый проект". В области "Категории" выберите "Java". В области "Проекты" выберите "Приложение Java". Нажмите кнопку "Далее".
2. В поле "Имя проекта" введите `MyApp`. Убедитесь, что в качестве местоположения проекта указано `_NetBeansProjects_`.
3. Установите флажок "Использовать отдельную папку для хранения библиотек" (необязательно).
4. В качестве главного класса введите `acrostic.Main`.
5. Убедитесь, что установлен флажок 'Создать основной класс'.
6. Нажмите кнопку 'Готово'. Проект MyApp отображается в окне 'Проект' и `Main.java` открывается в редакторе исходного кода.


=== [[Настройка пути к классам для компиляции]] 

Поскольку проект "MyApp" будет зависеть от класса в проекте "MyLib", необходимо добавить "MyLib" в путь к классам, указанный в "MyApp". Это также обеспечит возможность обращения классов в проекте "MyApp" к классам в проекте "MyLib" без ошибок компиляции. Кроме того, это позволит использовать функцию автозавершения кода в проекте "MyApp" для подстановки исходного кода на базе проекта "MyLib". В среде IDE путь к классам визуально представлен узлом "Библиотеки".

*Для добавления служебных классов библиотеки в путь к классам проекта:*

1. В окне 'Проекты', щелкните правой кнопкой мыши узел Libraries для проекта MyApp и выберите 'Добавить проект', как показано на рисунке ниже.

image::images/addproj.png[]



. Перейдите к `_NetBeansProjects_/` и выберите папку проекта `MyLib`. На экране "Файлы JAR проекта" отображаются архивы JAR, которые можно добавить к проекту. Учтите, что архив JAR для проекта "MyLib" отображается даже в том случае, если он фактически еще не создан. Этот архив JAR будет создан в процессе сборки и выполнения проекта "MyApp".


. Нажмите кнопку "Добавить файлы JAR проекта".


. Разверните узел "Библиотеки". Архив JAR проекта "MyLib" добавлен в путь к классам проекта "MyApp".


== Создание и изменение исходного кода Java 

Теперь необходимо создать пакет Java и добавить метод, который будет использоваться для создания акронима. После этого требуется реализовать метод `acrostic` в классе `Main`.


=== Создание пакета Java и файла класса

1. Щелкните правой кнопкой мыши узел проекта "MyLib" и выберите "Создать > Класс Java". Введите имя нового класса `LibClass`, затем введите `org.me.mylib` в поле "Пакет" и нажмите кнопку "Готово". `LibClass.java` открывается в редакторе исходного кода.
2. В `LibClass.java` установите курсор на строке после объявления класса (`public class LibClass {`).
3. Введите или вставьте следующий код метода: 

[source,java]
----

    public static String acrostic(String[] args) {
        StringBuffer b = new StringBuffer();
        for (int i = 0; i < args.length; i++) {
            if (args[i].length() > i) {
                b.append(args[i].charAt(i));
            } else {
                b.append('?');
            }
        }
        return b.toString();
                }
----


. Если вставленный код отформатирован неправильно, нажмите сочетание клавиш ALT+SHIFT+F для переформатирования всего файла.


. Для сохранения файла нажмите сочетание клавиш CTRL+S.


=== Изменение файла Java

Теперь добавим код в `Main.java`. При этом в редакторе исходного кода отображаются функции автозавершения кода и шаблона кода (сокращения).

1. Перейдите на вкладку `Main.java` в редакторе исходного кода. Если он еще не открыт, разверните узел "MyApp > Исходные файлы > acrostic" в окне "Проекты" и дважды щелкните `Main.java`.
2. Удалите комментарий `// TODO code application logic here` в методе `main`.
3. Вместо этого комментария введите следующее:

[source,java]
----

String result = Li
----

Установите курсор сразу же после `Li`. Теперь можно воспользоваться функцией автозавершения кода для подстановки `LibClass` вместо `Li`.



. Нажмите сочетание клавиш CTRL+ПРОБЕЛ для вызова окна автозавершения кода.

Появится небольшой список допустимых подстановок. Однако требуемого класса `LibClass` там может не оказаться.



. Для просмотра расширенного списка возможных соответствий еще раз нажмите сочетание клавиш CTRL+ПРОБЕЛ.

Класс `LibClass` должен находиться в этом списке.



. Выберите `LibClass` и нажмите ENTER. Оставшаяся часть имени класса будет автоматически подставлена в код средой IDE. Кроме того, для этого класса также автоматически создается оператор импорта.

*Примечание.* В IDE также открывается поле над полем завершения кода, в котором отображаются данные Javadoc для выбранного класса или пакета. Поскольку для этого пакета документация Javadoc отсутствует, в поле отображается сообщение "Не удалось найти сообщение Javadoc".



. В главном методе введите точку (.) после записи `LibClass`. Снова появится поле автозавершения кода.


. Выберите метод `acrostic(String[]args)` и нажмите ENTER. После автоматического заполнения метода `acrostic` появится выделенный параметр `args`.


. Нажмите ENTER для подтверждения параметра `args`.


. Введите точку с запятой (;).

Последняя строка должна выглядеть следующим образом.


[source,java]
----

String result = LibClass.acrostic(args);
----


. Нажмите ENTER для вставки новой строки. Затем введите `sout` и нажмите клавишу TAB. Сокращение `sout` расширяется до `System.out.println("");`, а курсор устанавливается между кавычками. Введите `Result =` в кавычках и `+ result` после закрывающей кавычки.

Последняя строка должна выглядеть следующим образом.


[source,java]
----

System.out.println("Result = " + result);
----


. Для сохранения файла нажмите сочетание клавиш CTRL+S.

*Примечание.* `sout` является одним из многих шаблонов кода, доступных в редакторе исходного кода. Чтобы найти и изменить список шаблонов кода, выберите "Средства > Параметры > Редактор > Шаблон кода".


== Компиляция и выполнение приложения 

Теперь для выполнения проекта необходимо указать главный класс и аргументы выполнения.

*Примечание.* По умолчанию проекты создаются с включенной функцией 'Компилировать при сохранении', поэтому пользователям не нужно сначала компилировать сначала собственный код для запуска приложения в IDE. Дополнительные сведения см. в статье link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG525[+Компиляция отдельного файла Java+] в документе _Разработка приложений в IDE NetBeans_.


=== Установка главного класса и аргументов выполнения

Выходные данные программы зависят от аргументов, передаваемых при выполнении программы. В качестве аргументов будет использоваться пять слов, на основе которых будет создан акроним "Hello". Получаемое слово будет состоять из первой буквы первого слова, второй буквы второго слова, третьей буквы третьего слова и т.д.

*Добавление аргументов для IDE с целью использования при выполнении приложения:*

1. Щелкните правой кнопкой мыши узел проекта "MyApp", выберите команду "Свойства", а затем выберите узел "Выполнить" в левой области диалогового окна.

В качестве главного класса должен быть указан `acrostic.Main`.



. Введите `However we all feel zealous ` в поле "Аргументы" и нажмите кнопку "ОК".


=== Запуск приложения

Приложение создано. Теперь с помощью аргументов выполнения можно протестировать работу приложения в среде IDE.

*Выполнение приложения в среде IDE:*

1. Щелкните узел проекта MyApp правой кнопкой мыши и выберите 'Очистить и собрать'.
2. Выберите "Выполнение" > "Выполнить проект" (F6).

В окне "Вывод" должны отображаться выходные данные программы `Result = Hello ` (акроним фразы, переданной программе в качестве аргумента).


== Тестирование и отладка приложения 

Теперь создадим тест и протестируем проект с помощью JUnit, а затем запустим его в отладчике IDE для проверки на наличие ошибок. Тестирование LibClass в JUnit осуществляется путем передачи фразы в метод `acrostic` и сверки результата с предполагаемыми выходными данными программы.


=== Создание тестов JUnit

1. Щелкните правой кнопкой мыши узел `LibClass.java` в окне "Проекты" и выберите "Сервис > Создать тесты JUnit" (CTRL+SHIFT+U).

Если тесты JUnit в среде IDE создаются впервые, появится диалоговое окно выбора версии "Выберите версию JUnit". Нажмите ENTER для выбора JUnit 4.x и перейдите (кнопка "Продолжить") к диалоговому окну "Создать тесты".



. В диалоговом окне "Создать тесты" нажмите кнопку "ОК" для выполнения команды с параметрами по умолчанию. Средой IDE будет автоматически создан пакет `org.me.mylib` и файл `LibClassTest.java` в отдельной папке `test`. Этот файл можно просмотреть путем развертывания узла "Тесты" и в нем подузла `org.me.mylib`.


. В `LibClassTest.java` удалите тело метода `public void testAcrostic()`.


. Вместо удаленных строк введите или вставьте следующее:

[source,java]
----

System.err.println("Running testAcrostic...");
String result = LibClass.acrostic(new String[]
                  {"fnord", "polly", "tropism"});
                assertEquals("Correct value", "foo", result);
----


. Сохраните файл путем нажатия CTRL+S.


=== Выполнение тестов JUnit

1. Выберите узел проекта "MyLib", а затем выберите "Выполнить > Тестовый проект (MyLib)" (ALT+F6). В окне "Вывод" откроется вкладка ` MyLib (test)`. После этого производится компиляция и выполнение тестов JUnit. Результат тестирования JUnit показывает, что тест пройден.
2. Вместо тестирования целого проекта можно также запустить отдельный файл теста. Выберите вкладку `LibClass.java` в редакторе исходного кода, а затем выберите "Выполнить > Тестовый файл".

В среде IDE доступна документация по интерфейсу API JUnit. Выберите команду "Справка > Справочные сведения Javadoc > JUnit `_VersionNumber_`".

Дополнительные сведения о платформе JUnit приведены на странице link:http://www.junit.org[+http://www.junit.org+].


=== Отладка приложения

В этом разделе с помощью отладчика последовательно выполняются все операции в приложении и рассматривается изменение значений переменных при создании акронима.

*Выполнение приложения в отладчике*

1. В файле `LibClass.java` перейдите к методу `acrostic` и установите курсор в любом месте внутри `b.append(args[i].charAt(i));`. Затем нажмите сочетание клавиш CTRL+F8 для создания точки останова.
2. Выберите Отладка > Отладка проекта (Ctrl-F5). Среда IDE открывает окна отладки и выполняет проект в отладчике до достижения установленной точки останова.
3. Откройте окно "Локальные переменные" в нижней области среды IDE и разверните узел `args`. Массив строк содержит фразу, введенную в качестве аргументов команды.
4. Нажмите клавишу F7 (или выберите команду "Отладить" > "Войти") для перехода к программе и просмотра изменения переменной `b` по завершении создания акронима.

После завершения программы окна отладки закрываются.

Дополнительные сведения см в разделе link:junit-intro.html[+Запись тестов JUnit в IDE NetBeans+].


== Сборка, выполнение и распространение приложения

Убедитесь, что приложение работает соответствующим образом, после чего можно перейти к подготовке приложения к развертыванию вне среды IDE. В этом разделе будет создан архив JAR приложения, который затем будет запущен из командной строки.


=== Сборка приложения

Основная команда сборки в среде IDE - команда 'Очистить и собрать'. Команда 'Очистить и собрать' удаляет предварительно скомпилированные классы и другие результаты предыдущей сборки, после чего выполняется повторная сборка проекта.

*Примечание.* Кроме того, существует команда 'Собрать', использование которой не приводит к удалению результатов предыдущей сборки. Эта команда отключена по умолчанию. Дополнительная информация приведена в статье link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG512[+Сборка проектов Java+] в документе _Разработка приложений в IDE NetBeans_.

*Для сборки приложения выполните следующие действия.*

* Выберите Запуск > Очистить и собрать проект (Shift-F11).

Результат выполнения сценария сборки Ant должен появиться в окне 'Результаты'. Если окно "Вывод" не отображается, его можно открыть вручную путем выбора команды "Окно > Вывод > Вывод".

При очистке и сборке проекта выполняются следующие действия:

* Удаляются ('очищаются') папки результатов, созданные при предыдущей сборке. (В большинстве случаев это папки `build` и `dist`).
* К папке проекта (далее именуемой "папка _PROJECT_HOME_") добавляются папки `build` и `dist`. Эти папки можно просмотреть в окне "Файлы".
* Все исходные файлы компилируются в файлы `.class`, которые помещаются в папку `_PROJECT_HOME_/build`.
* В папке `_PROJECT_HOME_/dist` создается архив JAR, содержащий проект.
* Если для проекта указаны какие-либо библиотеки (кроме JDK), в папке `dist` создается папка `lib`. Библиотеки копируются в папку `dist/lib`.
* Обновляется файл манифеста в архиве JAR – в него включаются записи, обозначающие главный класс, и все библиотеки, которые расположены по пути к классам проекта.

*Примечание.* Содержимое Manifest можно просмотреть в окне 'Файлы' IDE. После завершения процесса создания проекта откройте окно "Файлы" и перейдите к `dist/MyApp.jar`. Разверните узел архива JAR, откройте папку `META-INF` и дважды щелкните файл `MANIFEST.MF`, чтобы открыть его в редакторе исходного кода.


[source,java]
----

Main-Class: acrostic.Main
            Class-Path: lib/MyLib.jar
----

(Дополнительные сведения о файлах манифеста приведены в link:http://java.sun.com/docs/books/tutorial/deployment/jar/manifestindex.html[+этом разделе+] в учебном курсе по Java).


=== Запуск приложения вне среды IDE

*Для запуска приложения вне среды IDE выполните следующие действия.*

1. Вызовите командную строку или окно терминала.
2. В командной строке измените каталоги на каталог `MyApp/dist`.
3. В командной строке введите следующий оператор:

[source,java]
----

                java -jar MyApp.jar However we all feel zealous    
----

Далее приложение выполняется и возвращает следующие данные, как показано ниже:


[source,java]
----

Result = Hello
            
----
[.feature]
--
image::images/command-prompt-smaller.png[role="left", link="images/command-prompt.png"]
--


=== Распространение приложения другим пользователям

После проверки корректности работы приложения вне среды IDE можно подготовить приложение к распространению.

*Для распространения приложения выполните следующие действия.*

1. В системе создайте файл ZIP, включающий архив JAR приложения (`MyApp.jar`) и сопутствующую папку `lib`, которая содержит файл `MyLib.jar`.
2. Отправьте этот файл пользователям, которые будут работать с приложением. Предоставьте указания по распаковке файла ZIP, определяющие необходимость размещения файла `MyApp.jar` и папки `lib` в одной папке.
3. Также предложите пользователям выполнить действия в разделе <<running-outside-IDE,Запуск приложения вне среды IDE>>.


== Другие распространенные задачи

Работа с основной частью учебного курса завершена. При этом необходимо уделить внимание другим базовым задачам. В этом разделе рассматривается несколько таких задач.


=== Обеспечение доступности документации Javadoc в среде IDE

Для просмотра документации по API JavaSE в IDE NetBeans используйте команду 'Исходный код > Показать документацию' или выберите Окно > Другое > Документация Javadoc в главном меню. Документация по API открывается в отдельном окне.

Однако для некоторых сторонних библиотек документация по API недоступна. В этом случае ресурсы Javadoc необходимо связать со средой IDE вручную.

*Обеспечение доступности документации Javadoc по API через команду "Просмотреть Javadoc":*

1. Загрузите исходные файлы документации Javadoc по API (дополнительные сведения можно найти на странице link:http://wiki.netbeans.org/FaqJavaDoc#Adding_the_JDK_Javadoc_to_the_NetBeans_IDE[+FaqJavaDoc+]).
2. Выберите 'Служба'> 'Платформы Java'.
3. Выберите вкладку "Javadoc".
4. Нажмите кнопку "Добавить архив ZIP/папку" и перейдите к файлу ZIP или к папке, содержащей документацию Javadoc по интерфейсу API в системе. Выберите файл с ZIP или папку и нажмите кнопку "Добавить архив ZIP/папку".
5. Выберите "Close" (Закрыть).


=== Создание документации Javadoc для проекта

Скомпилированную документацию Javadoc для проекта можно создать на основе комментариев Javadoc, добавленных к классам.

*Для создания документации Javadoc для проекта:*

1. Выберите проект "MyLib".
2. Выберите "Выполнить" > "Создать документацию Javadoc для MyLib" в главном меню среды IDE. 
Созданная документация Javadoc добавляется к папке `dist` проекта. Кроме того, в среде IDE открывается веб-браузер, в котором отображается документация Javadoc.
link:/about/contact_form.html?to=3&subject=Feedback:%20Developing%20General%20Java%20Applications[+Отправить отзыв по этому учебному курсу+]



== Что дальше?

Дополнительные сведения об использовании IDE NetBeans для разработки приложений Java SE см. следующие ресурсы:

* link:javase-deploy.html[+Пакетирование и развертывание настольных приложений Java+]
* link:annotations.html[+Поддержка обработчиков аннотаций в IDE NetBeans+]
* link:debug-multithreaded.html[+Отладка многопоточных приложений+]
* link:../../trails/java-se.html[+Учебная карта по общим сведениям о разработке на Java+]
* link:../../trails/matisse.html[+Учебная карта по Java и JavaFX с графическим интерфейсом+]
* link:../../index.html[+Страница поддержки и документации IDE NetBeans+]
* link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG366[+Создание проектов Java+] в документе _Разработка приложений в IDE NetBeans_
