Создание проекта в eclipse


Содержание

Создание проекта в Eclipse для AVR

Рассмотрим процесс создания и настройки проекта. Рассмотрим два случая. В первом случае мы создадим проект с помощью плагина AVR-Eclipse и выполним всю необходимую настройку параметров компиляции средствами самой среды. При этом make-файл будет сгенерирован автоматически. Во втором случае создадим проект из готовых исходников с make-файлом. Все настройки проекта будут выполнены в самом make-файле. По большому счету, если создавать проект с готовым make-файлом, то плагин AVR-Eclipse не нужен.

AVR-Eclipse проект

1. Создаем сам проет. В меню «File» выбираем «New» -> «C Project«.

C project» src=»http://www.labfor.ru/sites/default/files/img/articles/eclipse/eclipse_create1.png» style=»border-width: 0px; border-style: solid; width: 657px; height: 197px;» />

В открывшемся окне в строке «Project name» вводим имя нового проекта. Если установлена галочка «Use default location«, то проект по умолчанию будет помещен в «workspase» (выбрали при включении) в папочке с именем проекта. Если снять галочку, то путь можно указать вручную. В окне «Project type» выбираем «AVR Cross Target Aplication» -> «Empty Project«. В окне «Toolchain» должен быть активен «AVR-GCC Toolchain«. Нажимаем «Next«.

В окне «Select Configuration» снимаем галочку с пункта «Debug» (но можно и оставить), жмем «Next«. В окне «AVR Target Hardware Properties» Выбираем тип микроконтроллера и вводим его рабочую основную тактовую частоту. Для учебного стенда LESO6 это ATmega128RFA1 и 16000000 (также в меню File->Properties->AVR->Targer Hardware).

2. Добавляем файл исходного кода в проект. Если запуск первый, то окно «Welcome» следует закрыть. В окне «Project Explorer» нажимаем правой кнопкой мыши по нашему проекту, в контекстном меню выбираем «New«, далее выбираем «Source File«.

Source File» src=»http://www.labfor.ru/sites/default/files/img/articles/eclipse/eclipse_create4.png» style=»border-width: 0px; border-style: solid; width: 660px; height: 341px;» />

В появившемся окне вводим название нового файла, например probe.c. Хорошим тоном является называть основной файл проекта (там где содержится функция main) также как и сам проект. Не забываем про расширение «.c». В результате в проекте добавился файл «probe.c«

Добавим код простейшей программы:

Сохраним (Ctrl+s либо пиктограмма с дискеткой на панели инструментов). Компилируем: можно нажать на пиктограмму с молоточком на панели инструментов, либо в контекстном меню проекта (правой кнопкой на проект в окне «Project Explorer«) выбрать пункт «Build Project«. Для удаления результатов компиляции следует выбрать пункт «Clean Project«. Результат компиляции, впрочем и любых других действий, отображается в консоли в нижнем окне. По умолчанию в этом окне может быть активирована вкладка «Problems» – тоже полезная вкладка, но лучше переключиться на вкладку «Console«. Остальные вкладки можно закрыть. При необходимости они появятся сами, либо их можно активировать вручную из меню «Windows» -> «Show View«.

Если компиляция прошла успешно, то в консоли мы увидим примерно следующее:

Иначе следует читать и исправлять ошибки. В проекте (окно «Project Explorer«) добавился файл Binaries и папка «Release» (или «Debug«, если при настройке проекта в выборе конфигураций не была снята галочка с Debug). В папке «Release» можно найти object файлы, makefile, файлы конфигурации eeprom и hex-файл. Двойной щелчок левой кнопки мыши откроет соответствующий файл в отдельной вкладке окна редактора.

3. На этом создание проекта можно считать завершенным. При компиляции создается hex-файл, настройки по умолчанию подойдут для большинства проектов, если же нет, то отредактируем параметры вручную.

Окно «Properties» («Свойства») можно вызвать нажав сочетание клавиш «Alt+Enter«, предварительно выделив проект в окне «Project Explorer«, или в контекстном меню выбрав пункт «Properties«. Следует отметить, что таким образом можно вызвать свойства любого файла в проекте.

Рассмотрим некоторые важные моменты. На вкладке «Resource» можно выбрать кодировку текстового редактора. Для того, чтобы русский текст в комментариях корректно отображался в различных операционных системах, рекомендуем использовать кодировку UTF-8.

На вкладке «AVR«->»AVRDude» выбираем конфигурацию и поведение программатора. Можно указать, какой hex-файл прошивать, прошивать ли EEPROM, менять ли значение Fuse-бит и многое другое. Как правило, достаточно выбрать заранее подготовленную конфигурацию, остальное оставить по умолчанию.

Если при создании проекта был неверно указан тип микроконтроллера или его тактовая частота, то изменить этот параметр можно на вкладке «AVR«->»Target Hardware«. Здесь же можно проверить корректность настройки программатора, нажав кнопку «Load from MCU«, в этом случае тип контроллера будет запрошен непосредственно у подключенного микроконтроллера.

В группу вкладок «C/C++ Build» сведены основные параметры компиляции и сборки проекта. Если убрать галочку «Generate Makefiles automatically» («Автоматическая генерация make-файла), то можно указать путь к созданному вручную или сгенерированному другой программой make-файлу. «C/C++ Build» -> «Build Variables» позволяет задать дополнительные переменные, которые могут быть переданы компилятору в процессе сборки, эти переменные может использовать препроцессор. Во вкладке «C/C++ Build» -> «Environment» задаются переменные окружения, среди которых, частота процессора, тип процессора, путь до рабочего каталога, путь к утилитам сборки, путь к программатору и некоторые другие.

В пункте «C/C++ Build» -> «Settings» устанавливаются параметры, на основании которых строиться make-файл. «Additional Tools in Toolchain» – выбираем какие файлы будут сгенерированы при компиляции (hex-файл для памяти программ, hex-файл для памяти данных, листинг). Уровень оптимизации выберем, активировав «AVR Compiller» -> «Optimization«. Следует понимать, что детальная настройка этих параметров требует определенного уровня компетенции, ошибка может нарушить корректную работу микроконтроллера или привести к его зависанию, а в некоторых случаях исходный код не будет скомпилирован. Вернуть настройки пункта «C/C++ Build» -> «Settings» можно нажав кнопку «Restore Defaults«.

Внимание! Для того что бы комментарии на русском языке в файлах исходного кода отображались корректно, следует переключить кодировку текстового редактора с Cp1251 на UTF-8. Сделать это можно для каждого файла в отдельности, для проекта в целом, либо для всего workspace сразу. Для этого в меню «Window» выбираем «Preferences«, далее «General» -> «Workspase«, правим пункт «Text file encoding«.

Проект с готовым make-файлом

Что же такое make-файл? По сути своей make-файл – это текстовый файл, содержащий инструкции по компиляции отдельных модулей проекта в объектные файлы и сборки этих объектных файлов в некоторый исполняемый бинарный файл, либо hex-файл. В общем случае такой файл называется Makefile. Если проект достаточно сложный и состоит из множества директорий с исходными кодами, то make-файл разбивается на несколько отдельных файлов. Вспомогательные файлы с помощью директивы «#include» объединяются с основным. Почти все современные IDE умеют создавать make-файл автоматически, такой make-файл как правило содержит специфические параметры, привязанные к IDE и текущей операционной системе. Если же предполагается создать кросплатформенный проект не привязанный к определенной среде разработки, make-файл следует написать самому. Этот подход широко распространен в мире свободного программного обеспечения. Для компиляции такого проекта в unix-подобных системах вообще не требуется IDE, достаточно в терминале выполнить команду «make». Встраиваемые в микроконтроллер операционные системы, например FreeRTOS, Contiki собираются, используя make-файл. По такому же принципу выполнен демонстрационный проект leso6 demo1, на примере которого рассмотрим процесс создания проекта.

Все исходные коды для учебного стенда LESO6 свободно распространяются по лицензии BSD (двух пунктов) и доступны в системе git. Адрес на GitHub: www.github.com/Shamrel/leso6, можно скачать одним архивом основную ветвь. После скачивания распакуйте архив.

1. Создаем новый проет. В меню «File» выбираем «New» -> «Makefile Project with Existing Code«.

В появившемся окне «New Project» указываем путь к директории с Makefile. Для проекта demo1 это «app/demo1» относительно корня распакованного архива. Строка «Project Name» заполнится автоматически, при желании название проекта можно изменить вручную. Исходный код мы пишем на Си, (не C++), поэтому галочку «C++» можно убрать. В окне «Toolchain for Indexer Settings» выбираем «AVR-GCC Toolchain«. Жмем «Finish«.

В целом импорт проекта завершен и после компиляции создастся hex-файл, пригодный для загрузки в память микроконтроллера. Как можно было заметить, мы нигде не указали среде Eclipse конкретный тип процессора и его тактовую частоту, более того, если зайти в свойства проекта, то мы не увидим пункта «AVR«. Многие пункты настроек также будут отсутствовать, например в пункте «C/C++ Build» -> «Settings» нет вкладки «Tool Settings«. Дело в том, что теперь все настройки среда берет из Makefile. Однако кое-что нам придется настроить: в окне проектов отображается только файл demo.c, в то время как проект включает в себя множество файлов для работы с периферией. Эти файлы расположены в папке «platform» в корне основного каталога. На работоспособность проекта это не влияет, но достаточно неудобно редактировать исходный код: осложнена навигация между файлами проекта.

Добавить путь к директории с дополнительными файлами можно в свойствах проекта. Выбираем «C/C++ General» -> «Patchs and Symbols«, далее вкладка «Source Location«, жмем «Link Folder. «.

В окне «New Folder» указываем путь к директории с исходниками.

В окне «Project Explorer» добавилась ссылка на папку «platform» со всеми исходными файлами.

Создание проекта завершено. Загрузка hex-файла в память программ стенда с помощью программатора avrdude в статье «Настройка Eclipse для работы с avrdude».

Создание простейшего Java приложения в Eclipse

В статье рассмотрено, как создать простейшее java приложение на Eclipse Mars.

22.12.2014 Leave a Comment 10 757 просмотров

В статье рассмотрено, как создать простейшее java приложение на Eclipse Mars.

Автор использует связку Eclipse Mars + Android Studio. Процесс установки подробно рассмотрен в статье: Установка связки Android Studio и Eclipse. Это так, на всякий случай. Разницы создания приложений в других сборках не будет.

Итак, открываем Eclipse. У меня приложение находится по адресу C:\Android\eclipse\eclipse.exe .

Спросит про папку, в которой будет располагать ваши проекты. Выбирайте сами, какую хотите.

Закройте окно приветствия:

Создайте новый проект:

Выберете Java Project :

Введите название вашего проекта:

В следующей стадии ничего менять не нужно:

Появится проект, и это будет отображаться в левой колонке.

Дважды по нему кликаем. А потом правой кнопкой по папке src . И там выбираем создать новый класс:


Вводим название класса и отмечаем галочкой, что отметим создать функцию main :

Откроется окно с файлом с названием нашего класса:

Проект Eclipse

Автор: Askar Rahimberdiev
Borland
Источник: RSDN Magazine #4-2004

Опубликовано: 22.01.2005
Исправлено: 13.03.2005
Версия текста: 1.0

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

Введение

Что такое Eclipse? Ответ, который первым приходит в голову – “это еще одна IDE для Java”. Однако Eclipse – нечто большее, чем просто IDE, и к тому не ограничен рамками Java. Сами создатели Eclipse называют его платформой для разработки интегрированных приложений. Какой смысл они вкладывают в это понятие?

В настоящее время разработка Eclipse ведется в рамках нескольких проектов. Кратко рассмотрим основные из них – Eclipse и Eclipse Tools. Читатели могут получить полную информацию о проектах, исходные коды и собранные дистрибутивы на сайте http://eclipse.org.

Проект Eclipse включает в себя платформу для разработки приложений, IDE для Java, построенную на ее основе а также средства, необходимые разработчику приложений. Дистрибутив, объединяющий эти компоненты вместе с исходными кодами и пользовательской документацией, называются Eclipse SDK – именно с него рекомендуется начинать знакомство с Eclipse. Eclipse SDK содержит все необходимое для разрабочиков Java: инкрементальный компилятор, редактор Java с подсветкой синтаксиса, контекстным автозавершением и поддержкой шаблонов, отладчик, поддержку автоматического рефакторинга и навигации по исходному коду. Для работы Eclipse SDK необходима JRE (Java runtime environment) версии не ниже 1.4.1 и операционная система Windows 98/ME/2000/XP, Linux, Solaris, AIX, HP-UX или Mac OSX.

В проекте Eclipse Tools собраны приложения, созданные на базе Eclipse, такие как CDT (IDE для С и C++) и EMF (поддержка генерации исходного кода Java для приложений моделирования). Именно тот факт, что все приложения Eclipse используют общие концепции, интерфейсы и технические решения, позволяет говорить об их упомянутой выше интеграции.

История

Разработка Eclipse началась в апреле 1999 года совместными усилиями компаний OTI и IBM. В октябре 2001 года вышел релиз 1.0, а месяцем позже IBM полностью открыла исходный код Eclipse. Тогда же был образован совет управляющих (Board of Stewards) Eclipse, призванный обеспечить развитие проекта и создать вокруг него сообщество разработчиков. К концу 2002 года в совет входило около тридцати компаний-участников

Тем не менее, поддержку Eclipse со стороны крупных компаний-разработчиков ПО существенно ограничивал тот факт, что весь проект и, самое главное, перспективы его развития, прочно ассоциировались с одной компанией – IBM. Действительно, вклад IBM в создание Eclipse был настолько велик, что весь проект неизбежно воспринимался как ее собственная разработка. Однако главной задачей самой IBM, сделавшей ставку на технологию Java (а не .NET), было добиться широкого распространения качественных продуктов для разработчиков на этой платформе. Чтобы завоевать доверие крупных поставщиков ПО, в начале 2004 года Eclipse был преобразован в некоммерческую ассоциацию, гарантирующую, что все технологии и исходный код Eclipse останутся открытыми и бесплатными.

Архитектура

Eclipse построен в виде набора расширяемых подсистем, а не как единое монолитное приложение. В Eclipse входят три подпроекта, разрабатываемых более или менее независимо друг от друга – Platform, JDT (Java development tools) и PDE (Plug-in development environment). Platform предоставляет базовые сервисы, JDT позволяет разрабатывать приложения Java, а PDE – новые компоненты Eclipse. Далее в статье анализируются основные свойства и внутреннее устройство каждого из подпроектов.

Рисунок 1 Архитектура Eclipse.

Platform

Platform является ядром Eclipse. Сама по себе эта подсистема не содержит особенно полезной для пользователей функциональности, но без нее невозможна работа остальных подпроектов Eclipse. Сервисы, которые обеспечивает Platform, позволяют разработчикам определять видимые пользователю артефакты, создавать пользовательские интерфейсы, работать с системами контроля версий, средами отладки и справочной системой. Соответствующими компонентами Platform, реализующими эти сервисы, являются Workspace (управление контентом), Workbench (базовый пользовательский интерфейс Eclipse), Team, Debug и Help.

Workspace

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

Ресурсы

Базовые понятия, определяемые Workspace – это рабочая область (workspace), проект (project), папка (folder) и файл (file). В терминологии Eclipse все эти объекты называются ресурсами (resources).

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

Рабочая область – это прежде всего контейнер для проектов. Кроме этого, в ней содержатся настройки, сохраняемые компонентами Eclipse, и вспомогательные данные. Физически рабочая область представляет собой директорию, поддиректории которой соответствуют проектам, а директория .metadata используется как хранилище настроек и данных.

Каждый из проектов, содержащихся в рабочей области, объединяет набор ресурсов (файлов и папок), правил для их обработки и других свойств проекта (таких, как настройки компилятора). Примерами проектов являются приложения Java, библиотеки jar или новые компоненты Eclipse. Для разработки каждого из этих артефактов необходимо создать отдельный проект.

Проекты могут зависеть друг от друга – это значит, что проект A может ссылаться на проект B и использовать ресурсы из него.

Папки и файлы полностью аналогичны папкам и файлам обычных файловых систем. Почему же разработчики Eclipse начали придумывать дополнительные сущности, вместо того, чтобы использовать привычные, известные каждому программисту, объекты? Дело в том, что работа с ресурсами Workspace позволяет программисту использовать множество новых возможностей в дополнение к традиционным свойствам файлов и директорий.

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

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

Большинство правильно спроектированных приложений Eclipse никогда не обращается к файлам напрямую, используя для этого стандартные средства Java или какие-либо иные способы. Вместо этого доступ к файловой системе осуществляется при помощи интерфейсов Workspace. Впрочем, использование стандартных средств Workspace не является обязательным – если это по какой-либо причине неприемлемо (например, ваше приложение не использует стандартный механизм объединения ресурсов в виде проектов), вполне допустимо использовать альтернативные механизмы.

Маркеры

Перед разработчиками приложений Eclipse часто встает задача отображения сообщений, привязанных к определенному фрагменту в ресурсе. Примерами являются сообщения компилятора Java или закладки (bookmarks), определяемые пользователем для быстрой навигации между файлами. Platform содержит маркеры (markers) – универсальный механизм для работы с такими объектами. Именно маркеры используются для создания, сохранения и отображения сообщений компилятора и пользовательских закладок.

Маркер – это объект, привязанный к заданной позиции в определенном ресурсе, и обладающий несколькими предопределенными и произвольным числом определяемых разработчиком атрибутов. Стандартные атрибуты, такие, как текст сообщения маркера и его позиция в файле, определяют то, как маркер будет отображен платформой Eclipse (а именно, компонентом Workbench). Дополнительные атрибуты могут отражать новую функциональность вашего приложения. Например, атрибуты сообщения об ошибке могут содержать информацию для ее автоматического исправления.

Любой маркер может быть объявлен как сохраняемый (persistent) – такие маркеры автоматически сохраняются платформой и после ее перезапуска будут восстановлены в изначальном виде. Обратной стороной использования сохраняемых маркеров является то, что легко получить множество устаревших маркеров, которые могут запутывать пользователя; при этом у пользователя нет стандартного способа удаления маркеров. Поэтому приложения, использующие сохраняемые маркеры, должны очень аккуратно управлять процессом их создания и удаления.

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

Проекты

Каким образом Eclipse будет интерпретировать тот или иной проект, целиком зависит от его свойств. Наиболее важными из поддерживаемых Platform свойств являются типы проектов (project natures) и билдеры (builders).

Билдеры, в самом общем понимании, – это компоненты, обрабатывающие ресурсы, входящие в проект, такие как компилятор Java, преобразующий исходные тексты в бинарные .class файлы. После первоначальной обработки проекта, билдеры должны реагировать на изменения, происходящие в его ресурсах. Очень важным здесь является понятие инкрементальной обработки – для улучшения производительности билдеры должны по возможности обрабатывать только те ресурсы, которые были изменены с момента последнего запуска билдера.

Илон Маск рекомендует:  Глава 13 контекстно свободные грамматики

Билдеры, зарегистрированные для проекта, запускаются каждый раз, когда измененный ресурс из этого проекта сохраняется на диске. Логика инкрементальной обработки определяется исключительно разработчиком билдера, поэтому все, что делает Eclipse Platform – вызывает зарегистрированные билдеры при обновлении ресурсов и передает им информацию о произошедших изменениях (какие именно ресурсы были добавлены, удалены или изменены).

Тип проекта (nature) определяет множество билдеров, которые могут работать с ресурсами, входящими в проект. К примеру, с проектом, представляющим собой Java-приложение, должен работать компилятор Java. С одним проектом может работать несколько билдеров – как правило, каждый билдер предназначен для определенного типа файлов. Разработчики приложений Eclipse могут также определять специфические действия для конфигурирования проектов определенного типа.

Workbench


Перспективы, виды, редакторы

Компонент Workbench определяет базовый пользовательский интерфейс (UI) Eclipse, а также предоставляет другим компонентам средства для создания своих собственных интерфейсов. Основные объекты интерфейса, с которыми работает Workbench – это редакторы (editors), виды (views) и перспективы (perspectives).

Рисунок 2 Workbench.

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


Назначение редакторов заключается в предоставлении возможности просмотра и редактирования файлов. Визуальное представление содержимого файла зависит от его типа и может меняться от традиционного текстового редактора с подсветкой синтаксиса для сценариев Ant до графического редактора для изображений в формате gif.

Виды, в отличие от редакторов, не обязательно связаны с каким-либо конкретным ресурсом. Они могут быть использованы для отображения содержимого активного в данный момент редактора (наподобие вида Outline), элемента, выбранного в другом виде (история версий ресурса в CVS), а также данных, полученных любым другим путем (таких, как отчет о выполнении тестов JUnit).

В отличие от редакторов, изменения, сделанные пользователем при помощи вида, должны немедленно сохраняются или переносится в соответствующие ресурсы. Например, в виде Navigator отсутствует команда Save или подобная ей – такие действия пользователя, как копирование или переименование, немедленно производятся с соответствующими ресурсами.

Данное соглашение не является, строго говоря, обязательным. У пользователя имеется техническая возможность создавать виды, требующие явного сохранения пользовательских изменений. Однако такие решения противоречат принятым соглашениям о пользовательском интерфейсе приложений Eclipse, и их следует по возможности избегать.

В Eclipse входит множество элементов пользовательского интерфейса – редакторов, видов, меню. Если бы кто-то попытался расположить их все на экране, то в результате получилось бы беспорядочное нагромождение окон, в котором было бы практически невозможно ориентироваться. Создатели Eclipse решили эту проблему при помощи понятия перспективы (perspective).

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

Перспективой, в терминологии Eclipse, называется конфигурация платформы, соответствующая определенной роли. Функциональность, необходимая выступающему в этой роли пользователю, определяет набор и расположение окон, меню, горячих клавиш, и прочих элементов интерфейса для этой перспективы. Например, в перспективе для отладки присутствуют виды с текущим стеком, значениями локальных переменных и списком точек останова, а в перспективе для синхронизации содержимого проекта по CVS – виды со списками доступных серверов и историей изменений в выбранного файле.

Platform позволяет разработчикам приложений создавать новые перспективы, определять их конфигурацию по умолчанию (которая впоследствии может быть изменена пользователем), а также подключать свои элементы интерфейса к существующим перспективам. Разумеется, поддерживается и добавление новых редакторов и видов.

Графический интерфейс

Фундаментом, на котором построены все графические средства Eclipse, является входящий в Workbench компонент SWT (Standard widget toolkit). SWT является основным средством создания пользовательского интерфейса для приложений на основе Eclipse. Поскольку для прорисовки элементов интерфейса SWT максимально использует средства оконного менеджера операционной системы (Win32, GTK, Motif), приложения, построенные на базе SWT, визуально не отличаются от “родных” приложений, разработанных специально для конкретной операционной системы. При этом они сохраняют совместимость со всеми платформами, поддерживаемыми Eclipse.

Использование под каждой ОС стандартных элементов управления позволяет существенно улучшить производительность и избежать запаздывания реакции на события в сложных, многооконных интерфейсах.

SWT (в виде набора библиотек) может быть использован в качестве замены Swing и AWT, отдельно от Eclipse и компонента Workbench.

До последнего времени основным недостатком SWT было отсутствие визуального редактора для создания графических интерфейсов на его основе. Безусловно, разработку кода графического приложения с нуля трудно назвать увлекательной или интеллектуальной задачей. Заполнить этот пробел призван недавно стартовавший проект Eclipse Visual Editor.

На основе SWT построен компонент JFace, который решает более высокоуровневые задачи построения пользовательского интерфейса. JFace содержит классы для создания диалогов, страниц свойств, управления шрифтами, поддержки архитектуры модель/вид и т.п. Наверное, для читателей не будет неожиданным тот факт, что сам Eclipse создан исключительно с использованием SWT и JFace.

JDT – второй из основных подпроектов, составляющих Eclipse SDK. Это и есть упомянутая “IDE для Java”, содержащая инкрементальный компилятор Java, редакторы, средства для отладки, тестирования, навигации и рефакторинга исходного кода.

Важно понимать, что JDT построен исключительно на основе подпроекта Platform и не использует каких-либо закрытых или недокументированных интерфейсов. Это значит, что при наличии желания и ресурсов можно разработать компонент, функционально аналогичный JDT, для любого другого языка – от С++ до Python, и тем самым превратить Eclipse в, например, “IDE для Python”.

Вы можете полностью исключить JDT из конфигурации Eclipse и установить только свои компоненты, так что пользователям вашего продукта ничто не будет напоминать о Java. Единственный компонент из стандартной конфигурации, который является обязательным для функционирования приложений – это Platform.

Рисунок 3 Перспектива Java.

Инкрементальная компиляция

Одним из самых смелых решений, принятых разработчиками Eclipse, была автоматическая инкрементальная компиляция проекта после каждого изменения, сделанного разработчиком. Каждый раз, когда, работая в Eclipse, вы сохраняете измененный исходный файл на диске, инкрементальный билдер анализирует сделанные изменения и запускает компиляцию не только сохраненного файла, но и всех зависящих от него компонентов. Этот процесс может показаться неоправданно долгим, однако производительность современных компьютеров делает его практически незаметным для пользователя. Кроме того, интеллектуальный анализ изменений сводит к минимуму число необязательных перекомпиляций. К примеру, если вы сделали изменения в теле метода или отредактировали комментарий, то интерфейс класса остался прежним и перекомпиляция его клиентов не нужна – такие ситуации корректно обрабатываются инкрементальным Java билдером.

Что дает такой подход, помимо, разумеется, возможности оперативного просмотра и исправления ошибок компиляции? При первой компиляции проекта в памяти строится дерево зависимостей файлов в проекте, что позволяет в дальнейшем производить компиляцию очень быстро, поскольку нет необходимости анализировать все исходные файлы в проекте. Надо заметить, что дерево зависимостей сохраняется на диске, так что после перезапуска Eclipse нет необходимости проводить анализ зависимостей в проектах с нуля.

Информация, собранная в процессе компиляции проекта, также используется для выполнения рефакторинга и специализированного Java-поиска (ссылок на декларации, объявления классов и т.п.). Именно доступность этой информации позволяет запускать рефакторинг и поиск без задержек, которые были бы необходимы для ее сбора в случае отсутствия автоматической компиляции. (И рефакторинг, и поиск будут работать и для не откомпилированных проектов, однако в этом случае точность полученных результатов не гарантируется.)

Что можно сказать о применимости автоматической компиляции для больших проектов – не окажется ли время, затрачиваемое на нее, неприемлемо большим? Как показывает практика, Eclipse позволяет комфортно работать с исходным кодом объемом порядка одного миллиона строк при условии, что он структурирован – разделен на проекты относительно небольшого размера. В случае, когда весь исходный код находится в одном проекте (я рекомендую избегать подобных ситуаций), может оказаться целесообразным отключить автоматическую компиляцию.

Экстремальное программирование и Eclipse

Очень привлекательной особенностью JDT является поддержка большого набора видов рефакторинга. Напомню, что рефакторингом называют методику переработки существующего кода с целью его улучшения. Популярная технология экстремального программирования (extreme programming) всячески поощряет разработчиков постоянно улучшать качество кода путем его рефакторинга. С опасностью добавления ошибок при изменении кода предлагается бороться как можно более частым выполнением как можно более полного набора автоматических тестов. JDT позволяет уменьшить эту опасность, полностью автоматически выполняя восемнадцать наиболее часто используемых видов рефакторинга, таких как перемещение элемента классы или выделение абстрактного интерфейса. Выполняя любой из видов рефакторинга, поддерживаемых JDT, вы можете быть уверены в том, что в результате произведенных изменений семантика программы не изменится.

Еще одним приятным свойством JDT, упрощающим применение рекомендаций методики экстремального программирования или Test driven development (TDD), является возможность запуска тестов JUnit прямо из IDE. Какой бы незначительной ни казалась эта деталь, она экономит существенное количество времени в процессе разработки. При работе в традиционной IDE цикл кодирование-модульное тестирование (unit testing) выглядит следующим образом: кодирование, сборка проекта, запуск JUnit, запуск тестов и анализ результатов. В JDT проект всегда находится в откомпилированном виде, поэтому этапы сборки и запуска JUnit пропадают, а выполнение набора тестов становится быстрее и проще. Этого оказывается достаточно для того, чтобы подход с написанием модульных тестов перед собственно кодом приложения начал выглядел намного более привлекательно.

Последний из подпроектов Eclipse, PDE, обеспечивает поддержку разработки расширений Eclipse – таких как плагины, редакторы, виды и страницы настроек. Именно PDE позволяет разрабатывать Eclipse в самом Eclipse.

Плагины

Как было отмечено выше, Eclipse предоставляет широкие возможности для расширения. В основе архитектуры, делающей это возможным, лежит использование плагинов (plug-in). Вместо того чтобы находиться в одном монолитном jar-файле, код Eclipse разделен на множество модулей, загружаемых динамически и независимо друг от друга (хотя каждый плагин может указать список плагинов, которые должны быть загружены до него). Для того, чтобы сократить время запуска платформы, плагины загружаются только перед непосредственным использованием (разумеется, полный список установленных плагинов доступен всегда).

Для того, чтобы Eclipse загрузил ваш плагин, необходимо написать дескриптор плагина – файл в формате XML под названием plugin.xml, который можно создать как при помощи PDE, так и в любом текстовом редакторе. Дескриптор сообщает Eclipse, какие ресурсы входят в плагин и каким образом платформа может их использовать. В ресурсы обычно входят библиотеки jar, текстовые сообщения в файлах .properties, графические изображения и т.п.

Разработчики могут создавать свои плагины, которые имеют абсолютно равные права с компонентами, изначально входящими в Eclipse; фактически приложение Eclipse представляет собой набор плагинов (для удобства конфигурирования группа связанных плагинов может быть объединена в подсистему (feature).

Eclipse поддерживает концепцию так называемых фрагментов (fragment) плагинов. Фрагменты плагина дополняют основной плагин – они очень похожи на обычные плагины, за исключением того, что не является самостоятельными модулями и могут быть использованы только в комплекте с основным плагином. Eclipse рассматривает плагин и все его обнаруженные фрагменты как единый логический плагин.

Для чего нужны фрагменты плагинов? Их основным свойством является возможность установки независимо от основного плагина. Как правило, фрагменты используются для добавления локализованных ресурсов и зависимых от операционной системы компонентов. Если некоторый плагин поддерживает локализацию, вы можете добавить поддержку нового языка при помощи отдельного фрагмента без изменения оригинального плагина и, более того, абсолютно независимо от его разработчиков (разумеется, по мере выхода новых версий плагина вам может понадобится вносить изменения в его фрагменты).

Расширения

Модульная архитектура еще не обеспечивает расширяемости платформы — она всего лишь обеспечивает механизм загрузки кода, написанного разработчиками. Новая функциональность может быть добавлена в Eclipse с помощью механизма расширений. Ключевое понятие здесь – точка расширения (extension point). Точка расширения определяет группу сервисов и дает возможность разработчикам плагинов добавлять свои сервисы в общий список.

Каким образом разработчики могут добавлять в Eclipse, например, свои редакторы? Eclipse, а точнее входящий в компонент Workbench плагин org.eclipse.ui, определяет точку расширения для редакторов. (Как мы помним, именно Workbench определяет пользовательский интерфейс Eclipse.) Основная задача точки расширения – объявить уникальный идентификатор, который будет использован конкретными расширениями для ссылки на точку расширения. Вот как выглядит соответствующий фрагмент дескриптора плагина org.eclipse.ui:

Разработчик помещает свой редактор в плагин, и указывает в дескрипторе плагина, что он содержит расширение (extension), соответствующее точке расширения редакторов. При инициализации Eclipse зарегистрирует новый редактор в общем списке редакторов и сделает его доступным для пользователей. Для сокращения накладных расходов плагин с редактором будет физически загружен и проинициализирован только в момент создания первого экземпляра редактора.

Следующий пример определяет стандартный текстовый редактор Eclipse (обратите внимание на то, что задано расширение файлов, с которыми работает этот редактор — txt).

Как происходит открытие файла для редактирования? Workbench ищет в списке всех расширений org.eclipse.ui.editors те редакторы, которые способны открыть файл с данным расширением (задается атрибутом extensions). Если обнаружено более одного подходящего редактора, пользователь может выбрать, какой из доступных редакторов он хочет использовать в данном случае. Существует соглашение о том, что все редакторы Eclipse обязаны реализовать интерфейс org.eclipse.ui.IEditorPart, поэтому Workbench создает объект класса, указанного в атрибуте class расширения, и приводит его к известному ему IEditorPart. В дальнейшем управление жизненным циклом редактора осуществляется только через этот интерфейс.

Что здесь является общим для всех реализаций механизма расширения, а что специфично для конкретного примера? Как правило, с точкой расширения действительно ассоциируется определенный интерфейс – через него клиенты точки расширения могут взаимодействовать с конкретными расширениями, не зная о деталях их реализации. Поскольку сценарии работы с различными точками расширениями, вообще говоря, не имеют ничего общего, большинство из точек расширения использует свой, уникальный интерфейс – в случае редактора это IEditorPart.

Разумеется, возможны ситуации, когда использование интерфейса не является необходимым. Например, точка расширения может быть использована для сбора информации о графических ресурсах – в этом случае от расширений требуется лишь указать имя подключаемого файла gif или bmp.

Типичное функционирование механизма расширений пояснит рисунок 4.

Рисунок 4. Механизм расширения Eclipse.

Клиенты точки расширения P (они не обязательно должны находится в плагине A, объявляющем точку расширения) могут получить список обнаруженных расширений P (в этом примере – единственное расширение в плагине B), создать их экземпляры и работать с ними через общий интерфейс I, объявленный в том же плагине, что и точка расширения.

Из приведенного примера может показаться, что существует жесткая взаимосвязь “один плагин – одна точка расширения”. На самом деле никакого ограничения на количество расширений, с которыми может работать один плагин, нет. Один и тот же плагин может объявлять свои точки расширения и подключаться к сторонним – критерием объединения расширений в одном плагине является лишь логическая целесообразность.

Часто оказывается полезным создание плагинов, которые не подключаются к точкам расширения и не объявляет свои. Такие плагины содержат архивы jar и используются в виде своеобразных разделяемых библиотек.


При помощи описанного механизма расширений может быть расширена практически вся функциональность Eclipse – перспективы, редакторы, виды, страницы настроек, инкрементальные билдеры. Предположим, что перед вами стоит задача создания инструментария для поддержки Web-сайта. Вы можете создать новый вид проекта “Web project”, редактор html, средства синхронизации с web-серверами, и разместить все новые элементы интерфейса в отдельной перспективе.

Важно то, что можно предоставить разработчикам возможность дальнейшего расширения вашего продукта. В приведенном выше примере может оказаться полезным удаление жесткой зависимости от одного протокола связи с Web-сервером. Более гибким решением было бы определение новой точки расширения и работа с плагинами, определяющими это расширение, через общий интерфейс работы с сервером (который должен быть определен вместе с точкой расширения). Таким образом, механизм поддержки расширений никоим образом не ограничен стандартной функциональностью, а, напротив, поощряет разработку расширяемых приложений.

Пример: создание инкрементального билдера

Эффективность работы в Eclipse велика не только благодаря таким возможностям, как, например, поддержка рефакторинга. Множество, казалось бы, незначительных деталей также значительно ускоряет процесс разработки. Одна из них – вид Tasks, в котором отображается список задач (tasks). Задача – это напоминание о некоторой деятельности, после выполнения которой задача считается выполненной. JDT автоматически создает задачи для комментариев TODO и FIXME, найденных в исходном коде. Эти задачи позволяют быстро просмотреть фрагменты кода, нуждающиеся в дополнениях или исправлениях. После редактирования кода разработчик удаляет комментарий TODO или FIXME, и соответствующая задача исчезает из вида Tasks.

Предположим, что мы работаем над большим проектом, который должен быть переведен на несколько языков. Для ускорения работы переводчики могут пропускать некоторые сообщения, перевод которых требует дополнительного обсуждения, и возвращаться к ним позже. Хочется иметь возможность отмечать такие сообщения словом TODO для того, чтобы их список был постоянно доступен в виде Tasks.

Разумеется, для поддержки локализации все текстовые сообщения вынесены в файлы .properties, а не закодированы в исходных файлах Java. Поэтому задачи для непереведенных сообщений не появятся в виде Tasks автоматически, поскольку JDT создает задачи TODO только для исходных файлов java. Чтобы получить новую функциональность, нам придется создавать расширение Eclipse.

Прежде всего, при помощи стандартного мастера New Plug-in Project, создадим новый плагин под названием com.mycompany.propbuilder. Вот как выглядит дескриптор плагина plugin.xml:

Мы сразу добавили ссылку на плагин org.eclipse.core.resources, поскольку он понадобится в дальнейшем. Кроме того, в мастере создания проекта была выбрана опция создания класса Java для плагина – PropertyBuilderPlugin. Сразу же добавим в этот класс статический метод для сообщения об ошибках, которые могут произойти во время работы плагина. Сообщения будут записаны в лог-файл eclipse/workspace/.metadata/.log.

СОВЕТ

Во время разработки обычно удобнее выводить отладочные сообщения на консоль при помощи System.err.println(). Но для анализа ошибок, возникающих уже у конечных пользователей, их необходимо записывать в лог, поскольку в таких случаях консоль, как правило, недоступна.

Каким образом можно добавить свои задачи в вид Tasks? С точки зрения реализации, каждая задача представлена отдельным маркером. Вид Tasks отображает маркеры, соответствующие задачам, выделяя их из общего списка маркеров. Для того, чтобы маркеры можно было разделять на группы (например, отличать сообщения компилятора от задач), каждый маркер обладает своим типом (не надо путать этот тип с классами Java). Тип маркеров задач объявлен в плагине org.eclipse.core.resources и имеет идентификатор org.eclipse.core.resources.taskmarker.

Итак, для каждого непереведенного сообщения нам необходимо создавать новый экземпляр маркера. Чтобы легко отделять наши маркеры от задач, создаваемых JDT, их тип должен отличаться от org.eclipse.resources.taskmarker, но в то же время он должен указывать на то, что наши маркеры являются маркерами задач. Этого можно добиться при помощи механизма наследования – тип маркера может быть выведен из одного или нескольких базовых типов. В нашем случае, таким базовым типом является taskmarker; при этом все атрибуты, определенные в базовом типе, наследуются его потомками. Вот как выглядит объявление нового типа маркеров в файле plugin.xml:

Единственный атрибут, который не передается при наследовании маркеров – сохраняемость. Поскольку мы не хотим, чтобы созданные задачи пропадали при перезапуске Eclipse, атрибут persistent устанавливается явным образом.

Следующий вопрос, который необходимо решить – когда и как создавать маркеры задач? Чтобы найти все непереведенные сообщения в отдельном файле .properties, необходимо прочитать содержимое файла и создать маркеры для всех строк файла, в которых присутствует подстрока TODO. Очевидно, что обработка всех файлов .properties в большом проекте может занять продолжительное время, поэтому эффективнее анализировать только измененные файлы, и не менять маркеры, созданные для остальных файлов ранее.

Такой механизм обработки изменений в ресурсах проекта уже реализован в Eclipse – это не что иное, как инкрементальные билдеры. Нам остается только создать класс Java для своего билдера (назовем его PropertyBuilder) и поместить его объявление в дескриптор плагина.

Теперь, когда определены основные интерфейсы и алгоритмы, остается только написать класс PropertyBuilder. Как и любой инкрементальный билдер, он должен быть выведен из класса org.eclipse.resources.InrementalProjectBuilder. Главными методами билдера являются build() и clean() – они вызываются Eclipse для обработки проекта и удаления результатов работы соответственно.

СОВЕТ

После каждого создания, изменения или удаления маркера Workspace рассылает всем зарегистрированным слушателям сообщение об изменении ресурса. Из-за этого создание нескольких сотен или тысяч маркеров может оказаться весьма продолжительной операцией. В таких случаях их следует создавать в контексте метода IWorkspace.run(), вызов которого считается атомарной операцией. Соответственно, независимо от количества созданных маркеров, слушателям будет разослано только одно сообщение.

Как пользоваться новым расширением Eclipse? Прежде всего, необходимо установить плагин com.mycompany.propbuilder. Для этого нужно скопировать файлы plugin.xml и propbuilder.jar в директорию eclipse/plugins/com.mycompany.propbuilder и перезапустить Eclipse. После этого следует выбрать проекты, в которых мы собираемся искать непереведенные сообщения. В случае реального приложения такая возможность должна быть доступна пользователю через графический интерфейс, однако для упрощения примера мы просто добавим ссылку на билдер PropertyBuilder в файлах .project соответствующих проектов:

Наконец, включим отображение нового типа задач в виде Tasks:

Рисунок 5 Настройка вида Tasks.

Теперь в Tasks должны появиться созданные плагином com.mycompany.propbuilder задачи.

Рисунок 6 Новые задачи в виде Tasks.

Разработчикам приложений

Рассмотрим два аспекта создания приложений на базе Eclipse – правовой и технический.

Юридическую сторону вопроса призваны решить лицензии, под которыми распространяется Eclipse SDK – CPL (Common Public License) и более поздняя EPL (Eclipse Public License). Они позволяют использовать, распространять и продавать лицензированные исходные и бинарные коды без уплаты вознаграждения правообладателям. Этим уже воспользовались для создания коммерческих продуктов на базе Eclipse такие поставщики ПО, как Borland, IBM, SAP.

С технической точки зрения, подробно проиллюстрированной в предыдущем разделе, выдающаяся расширяемость Eclipse обусловлена прежде всего его архитектурой и проектными решениями. Модульная архитектура, организация проекта в виде набора расширяемых подсистем Platform, JTD и PDE, возможность расширения сторонними разработчиками практически любой подсистемы Eclipse позволяют использовать его для создания приложений разнообразнейших видов и назначения.

Основной целью проекта Eclipse является интеграция приложений для разработки в рамках различных IDE (одной из этих IDE является сам Eclipse SDK, а именно Platform, дополненный JDT и PDE). В то же время, Eclipse содержит множество компонентов, которые могут быть использованы приложениями самого широкого спектра, не нуждающимися, вообще говоря, в полной инфраструктуре Eclipse (примерами таких компонентов могут служить SWT и JFace). Для поддержки подобных приложений было введено понятие Rich Client Platform (RCP). RCP – это базовый набор компонентов Eclipse, который позволяет использующим его приложениям полностью контролировать внешний вид создаваемого пользовательского интерфейса (перспективы, меню, панели инструментов и т.п.).

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

На прилагающемся к журналу компакт-диске находится Eclipse SDK 3.0.1.

1. Визуальное программирование в среде Eclipse

    Алексей Красинский 2 лет назад Просмотров:

1 1. Визуальное программирование в среде Eclipse 1.1. Установка визуального редактора SWING При написании данного раздела использована работа [ 1]. Для установки нового программного обеспечения (ПО) компьютер должен иметь доступ в Инернет. Для установки редактора визуальных компонентов SWING, нужно в меню Eclipse нажать Help-Install New Software (рис.1). Рис. 1. Команда установки нового ПО В появившемся окне выбрать All Available Sites (рис.2).

2 Рис. 2. Выбор сайтов для поиска ПО Вводим слово SWING в строку поиска. Спустя некоторое появится список компонентов, в названия которых входит слово, указанное для поиска (SWING). Выбираем в списке доступных для установки компонент последнюю версию Swing Designer (рис.3) и инсталлируем.

3 Рис. 3. Выбор компонентов для установки Появится окно с описанием устанавливаемого ПО (рис.4).

4 Рис. 4. Состав устанавливаемого ПО Соглашаемся с условиями лицензирования (рис.5). Рис. 5. Лицензионное соглашение Наблюдаем ход установки (рис.6).

5 Рис. 6. Ход установки После установки слеует перезагрузить Eclipse (рис.). Рис. 7. Сообщение о необходимости перезагрузить Eclipse Если все было сделано правильно, то в меню Eclipse появится кнопка для создания визуальных компонентов Create new visual classes (рис.8). Рис. 8. Кнопка доступа к созданию визуальных компонентов

6 Для доступа к шаблонам приложений, которые можно создать с использованием визуального редактора раскрываем список данной кнопки (рис. ). Рис. 9. Шаблоны разработки Данные шаблоны можно найти в меню File, New, Other, WindowBuilder, Swing Designer Простейшее приложение Программа 149. Цветная форма Создание проекта Создадим новый проект командой File, New, Java Project (рис.10).

7 Рис. 10. Создание нового проекта В поле Project name введем имя проекта, например, ColorForm и выберем место расположения проекта в поле Location. Если установлен флажок Use default location, то для размещения проекта будет использовано место по умолчанию.

8 Рис. 11. Ввод имени проекта Упомянутой выше командой меню File, New, Other, WindowBuilder, Swing Designer запустим мастер по созданию оконного класса на основе класса JFrame (рис.12).

9 Рис. 12. Выбор мастера создания компонента Далее задаем имя создаваемого класса — frmcolorform (рис.)

10 Рис. 13. Ввод имени создаваемого класса После нажатия кнопки Finish откроется среда разработки, где будет окно для автоматически сгенерированного файла frmcolorform.java с двумя закладками. На закладке Source показывается исходный код (рис. 14).

11 Рис. 14. Среда Eclipse в режиме визуальной разработки Автоматически сгенерированный код приведен в листинге 1. Листинг 1. Код автоматически созданного приложения import java.awt.borderlayout; import java.awt.eventqueue; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.border.emptyborder; public >


13 Обратим внимание, что на форме размещена панель contentpane, на которой мы будем размещать компоненты (рис.16). Установим для contentpane абсолютный режим выравнивая, выбрав соответствующее значение для свойства Layout (рис.16). В этот режиме компоненты будут занимать на форме положение, заданное в процессе разработки. Рис. 16. Панель contentpane Выберем в палитре компонентов кнопку JButton (рис. 17) и нарисуем прямоугольник на форме (рис.) Рис. 17. Выбор компонента в палитре

14 Рис. 18. Размещение компонента на форме Используя свойство Variable, зададим кнопке имя btnchangecolor вместо имени btnnewbutton, данного по умолчанию, и зададим свойство text — «Изменить цвет формы», которое содержит надпись на кнопке (рис.19). Рис. 19. Ввод имени кнопки и надписи на ней Расположим на форме метку JLabel, которую назовем lblnamecolor (рис.20). Отображаемый меткой текст содержится в свойстве text. Его сделаем пока пустым, а формировать будем программным путем.

15 Рис. 20. Создание метки Создание обработчиков событий С помощью кнопки Show events (рис.21) переключим окно Properties (свойств) на показ событий кнопки. Рис. 21. Переключение окна Properties между показом свойств и событий Выберем для кнопки событие performed из раздела action и дважды щелкнем нему мышью (рис.22). Будет создана заготовка обработчика события нажатия кнопки (листинг 2).

16 Рис. 22. Создание обработчика события Листинг 2. Заготовка обработчика для кнопки btnchangecolor.addactionlistener(new ActionListener() < public vo );

17 ); btnchangecolor.setbounds(25, 39, 161, 23); contentpane.add(btnchangecolor); JLabel lblnamecolor = new JLabel(«»); lblnamecolor.setbounds(25, 90, 145, 23); contentpane.add(lblnamecolor); Из приведенного кода ясна, что кнопка и метка создаются динамически в конструкторе формы с испоьзованием оператора new, причем сначала создается кнопка, а потом метка, поэтому имя метки lblnamecolor не будет видно в обработчике для кнопки, как создаваемое ниже по тексту программы. Поставим последние три строки, создающие метку, перед созданием кнопки и объявим переменную lblnamecolor как final. Обратим также внимание на конструктор для кнопки, в который передается строка с надписью на кнопке: JButton btnchangecolor = new JButton( «\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0446\u0432\u0435\u0442 \u0444\u043e\u0440\u043c\u044b»); Строка содержит коды русских букв надписи на кнопке в двухбайтовой кодировке Unicode. Можно заменить эту строку обычными символами русских букв. Окончательный вариант конструктора формы приведен в листинге 4. Листинг 4. Окончательный вариант конструктора формы public frmcolorform() < setdefaultcloseoperation(jframe.exit_on_close); setbounds(100, 100, 217, 184); contentpane = new JPanel(); contentpane.setborder(new EmptyBorder(5, 5, 5, 5)); setcontentpane(contentpane); contentpane.setlayout(null); final JLabel lblnamecolor = new JLabel(""); lblnamecolor.setbounds(25, 90, 145, 23); contentpane.add(lblnamecolor); JButton btnchangecolor = new JButton("Изменить цвет формы"); btnchangecolor.addactionlistener(new ActionListener() < public vo );

19 Рис. 24. Добавление в проект класса формы Для панели contentpane установим режим выравнивания absolute (рис. ) Рис. 25. Установка режима absolute выравнивания компонентов На рис. 26 показан интерфейс программы и указаны использованные имена меток (JLabel), текстовых полей (JTextField) и кнопки (JButton). Текстовые поля txt_a, txt_b и txt_c предназначены для ввода соответствующих коэффициентов квадратного уравнения. Метки lbl_a, lbl_b, lbl_c и lblrightpart выполняют декоративную функцию, чтобы картинка на форма была похожей на привычную математиескую запись. По нажатию кнопки Решить уравнение из текстовых полей должны быть прочитаны значения коэффициентов, решено квадратное уравнение и его решение показано в метке lblsolution.

20 Текстовое поле txt_b Метка lbl_a Текстовое поле txt_a Кнопка btnsolve Метка lblsolution Метка lbltaskname Метка lbl_b Текстовое поле txt_c Метка lblrightpart Метка labebl Рис. 26. Интерфейс программы решения квадратного уравнения Программный код, сгенерированный после визуальной разработки интерфейса, должен быть таким, как приведено в листинге 5. Обратите внимание, что ссылки на используемые на форме кнопку, метки и текстовые поля сделаны закрытыми членами класса формы. В конструкторе все компоненты создаются и ссылкам на компоненты присваивается значение. Если код не совпадает с приведенным в листинге, можно отредактировать его вручную. Листинг 5. Код класса frmsquareequation // Файл frmsquareequation.java import java.awt.borderlayout; import java.awt.eventqueue; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.border.emptyborder; import java.awt.panel; import javax.swing.jlabel; import java.awt.font; import javax.swing.springlayout; import javax.swing.jtextfield; import javax.swing.jbutton; import java.awt.color; import javax.swing.swingconstants; public class frmsquareequation extends JFrame < private JPanel contentpane; private JLabel lbltaskname; private JTextField txt_a; private JLabel lbl_a; private JTextField txt_b; private JLabel lbl_b;

21 private JTextField txt_c; private JLabel lblrightpart; private JButton btnsolve; private JLabel label; private JLabel lblsolution; /** * Launch the application. */ public static vo , Font.PLAIN, 12)); txt_b.setcolumns(10);

22 contentpane.add(txt_b); lbl_b = new JLabel(«x + «); lbl_b.setbounds(172, 66, 32, 15); lbl_b.setfont(new Font(«Tahoma», Font.PLAIN, 12)); contentpane.add(lbl_b); txt_c = new JTextField(); txt_c.setbounds(200, 64, 47, 21); txt_c.setfont(new Font(«Tahoma», Font.PLAIN, 12)); txt_c.settext(«0»); contentpane.add(txt_c); txt_c.setcolumns(10); lblrightpart = new JLabel(«= 0»); lblrightpart.setbounds(268, 66, 20, 15); lblrightpart.setfont(new Font(«Tahoma», Font.PLAIN, 12)); contentpane.add(lblrightpart); btnsolve = new JButton(«Решить уравнение»); btnsolve.setbounds(75, 119, 213, 23); contentpane.add(btnsolve); label = new JLabel(«Решение»); label.setbounds(147, 151, 64, 21); label.setfont(new Font(«Tahoma», Font.BOLD, 14)); contentpane.add(label); lblsolution = new JLabel(» «); lblsolution.setbackground(color.white); lblsolution.setbounds(10, 183, 326, 30); lblsolution.sethorizontalalignment(swingconstants.center); lblsolution.setfont(new Font(«Tahoma», Font.BOLD, 14)); contentpane.add(lblsolution); Реализация алгоритма решения квадратного уравнения Решение уравнения реализуем в обработчике события для кнопки Решить уравнение. Текст обработчика приведен в листинге 6. Листинг 6. Код обработчика для кнопки «Решить уравнение» btnsolve.addactionlistener(new ActionListener() < public vo );

24 Рис. 27. Окно программы для решения квадратных уравнений Когда коэффициенты уравнения изменяются, то желательно очищать метку, показывающую решения. Очистку решения будем выполнять в обработчике события textchanged (рис.) Рис. 28. Создание обработчика для события textchanged Литература 1. ГУТОР С.С., ЭНГЛЕВСКИЙ Н.А. Установка SWING — компонента Eclipce для визуального программирования.-

Блог только про Java

Учимся программировать на Java с нуля

Разработка веб-приложений в Eclipse

IDE Eclipse – мощнейшая среда для разработки на Java. Разработчики предпочли удобство пользования легкости обучения. В этой статье мы рассмотрим детальную инструкцию по разработке веб-приложений (JSP/Servlet) в Eclipse при помощи контейнера сервлетов Apache Tomcat.

Подготовительный этап

Чтобы разрабатывать веб-приложения нам нужна версия Eclipse IDE for Java EE Developers, а также Apache Tomcat. Чтобы упростить изложение предположим, что каталогом установки tomcat является %TOMCAT_HOME%, в нашем примере это /opt/apache-tomcat-7.0.6/.

Для выполнения отладки проекта в контейнере сервлетов, его необходимо добавить в Eclipse:

  1. File/New/Server/Server:
  2. Define a New Server. Откроется окно, в котором нужно выбрать необходимый адаптер. Последний объясняет Eclipse каким образом необходимо взаимодействовать с контейнером сервлетов. Так как в этой статье мы рассматриваем работу с Apache Tomcat, то нам нужно выбрать адаптер Apache – Tomcat v0. Прочие параметры можно не менять.
  1. Tomcat Server. Необходимо настроить параметры сервера. Тут самое важное – указать путь к %TOMCAT_HOME%.
  1. Далее предлагается выбрать проекты, запускаемые на данном сервере. Просто кликаем Finish.

После того как вы добавили сервер Eclipse создаст каталог Servers, где будут хранится файлы конфигурации Tomcat. Важно, что при этом не происходит изменения самой установки tomcat’a. Если нужно будет поменять параметры сервера (к примеру, определить набор подключений к БД), вы сможете сделать это в данных файлах.

Также сервер появляется на нижней вкладке Servers. Если у вас отсутствует такая вкладка, нужно проверить перспективу (Java EE) или включить view вручную: Window/Show View/Servers либо при отсутствии в перечне предложенных поискать в Others. Сделав двойной клик по строчке сервера откроются его параметры. Важнейший момент здесь – Timeouts – время ожидания запуска сервера. Рекомендуется увеличивать это значение, дабы избежать проблем при отладке запуска приложения.

Создаем приложение

  1. File/New/Dynamic Web Project.
  2. Dynamic Web Project. Здесь нужно указать название проекта, а остальные поля можно не менять. Заметьте, что Target runtime является сервер, который мы создали ранее. Также вы можете поменять версию спецификации сервлетов в Dynamic web module version.
  3. Java. Стандартные параметры приложения на Java. Можно указать пути к директориям, где расположены исходные коды, а также директорию, где расположены скомпилированные классы. Кликаем
  4. Web Module. Тут менять ничего не нужно, но вы должны понимать, что означают поля:
    1. Context root – контекст, используя который в браузере можно будет получить доступ к вашему приложению. Полным путем будет http://localhost:8080/test-app, а test-app представляет собой значение поля.
    2. Content directory – корневая директория под war-архив. Тут будутWEB-INF/, META-INF.
    3. Generate web.xml – начиная от спецификации Servlets0 веб-приложениям не обязательно нужен файл web.xml. Выбранная опция в любом случае создаст файл. Рекомендуется всегда его создавать.

Чтобы запустить приложение кликните по нему ПКМ и выберите Run As/Run on Server. В открывшемся окне пометьте параметр Always use this server и кликните Finish. Приложение будет во вкладке Servers как узел сервера во встроенном браузере. Для его запуска в прочих браузерах нужно произвести настройку Eclipse: Window/Preferences/General/Web Browser, где указать браузеры.

Учтите, что нужные для разработки библиотеки tomcat’a будут автоматически подключены к проекту.

Разрабатываем приложение

После старта вам будет выведена ошибка 404, так и должно быть, поскольку приложение у вас пустое, соответственно tomcat не понимает, что отдавать пользователю. Начнем заполнять приложение создав простой html-файл:

  1. Кликаем ПКМ по папке проекта WebContent: New/Html File, даем ему имя index.html. Далее выбираем подходящий шаблон и кликаем Finish.
  2. Дополним файлик еще какой-то надписью, к примеру, Hello World и еще раз запустим приложение, либо можно просто обновить страницу в браузере. Вам должна открыться созданная страница.
  3. Создаем новый файлик page.html и тоже чем-то его заполняем. Кликаем ПКМ по созданной страничке и нажимаем Run As/Run on Server. В браузере должен открыться сервер с этой новой страничкой.

Чтобы создать сервлеты и JSP-страницы воспользуемся соответствующими командами, присутствующими в меню файл. В ходе создания сервлета нам будет предложено указать его начальные параметры и отображение (mapping).

Выполняем тонкую настройку проекта

В параметрах проекта есть возможность настройки еще некоторых достаточно важных опций:

  • Deployment Assembly – параметры расположения путей проекта (либо прочих директорий) на сервере приложений. К примеру, у вас существует директория data, находящаяся в корне проекта. Вам нужно, чтобы данные из этой директории попали в приложения по пути /data/. Чтобы это реализовать на вкладке Deployment Assembly необходимо выполнить это: Add/Folder, выбираем здесь папку data. Затем изменяем в таблице Deploy Path на data/.
  • Project Facets – дает возможность подключать к проекту различные фреймворки.
  • Web Project Editor – подключение tag libraries в процессе редактирования JSP.
  • Web Project Settings – изменение контекста приложения.

Экспортируем проект

Чтобы экспортировать проект в файл формата war с целью расположения в контейнере сервлетов, необходимо выполнить File/Export/Web/WAR File. Доступ к этой функции можно получить более быстро, воспользовавшись контекстным меню проекта Export/WAR. Учтите, что в процессе экспорта будут учтены настройки Web Deployment.


Решаем проблемы

Порой (если у вас одна из последних версий Eclipse, то такое происходит крайне редко), случаются проблемы с расположением приложения:

  • Для проверки, что в действительности видит tomcat заходим в директорию %WORKSPACE%/.metadata/.plugins/org.eclipse.wst.server.core/tmpX/wtpwebapps. Вместо Х, как правило, 0, однако может быть и другое.
  • Порой выручает команда из контекстного меню приложения во вкладке Servers (Servers/Server name/app name) Clean module work directory – команда очищает временные файлы приложения.
  • Самый мощный инструмент – это команда из контекстного меню сервера во вкладке Servers Clean tomcat work directory. Она полностью удаляет директорию tmpX, создавая новую. В данном случае все приложения размещаются наново.

Ищите недорогой и красивый домен для своего сайта? В таком случае заходите на 2домейнс.ру. Выбирайте нужную вам зону, придумывайте красивый домен и получайте его на самых выгодных условиях в Рунете!

Один комментарий на “ Разработка веб-приложений в Eclipse ”

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

Создание вашего первого Java-приложения

Далее описывается, как создать минимальное Java-приложение, используя Eclipse. Это будет классическое “Hello World”. Наша программа выведет “Hello Eclipse!” в консоли.

Создание проекта

Выберите в меню File -> New-> Java project. Введите “de.vogella.eclipse.ide.first” в качестве имени проекта. Также выберите “Create separate source and output folders”.

eclipse разработка программа

Нажмите finish для создания проекта. Новый проект создан и будет показан как папка. Откройте папку “de.vogella.eclipse.ide.first”

Создание пакета

Теперь создайте пакет. Хорошей практикой будет использование для пакета того же самого имени, что и для проекта. Соответственно, создаем пакет с именем “de.vogella.eclipse.ide.first”.

Выберите папку src, кликните по ней правой кнопкой мыши и выберите New -> Package.

Создание Java класса

Кликните правой кнопкой на вашем пакете и выберите New -> Class

Создайте MyFirstClass, пометьте опцию “public static void main (String[] args)”

В открывшемся редакторе введем следующий код.

public class MyFirstClass <

public static void main(String[] args) <

Запуск проекта в Eclipse

Теперь запустим полученный код. Для этого удобно кликнуть правой кнопкой над вашим Java-классом и выбрать Run-as-> Java application

Все готово! Сейчас вы можете увидеть вывод в консоли.

Создание проекта в eclipse

Еще одной очень популярной средой для разработки приложений под Java является Eclipse . IDE Eclipse первоначально была создана и развивалась компанией IBM, но впоследствии разработка была выделена в отдельный проект Eclipse Foundation. Eclipse является бесплатной средой, которая к тому же обладает болшими возможностями, позволяя создавать на Java самые разные приложения.

Для начала установим последнюю версию Eclipse, которую можно найти по адресу https://www.eclipse.org/downloads/. На странице загрузок выберем найдем рядом с названием текущей версии Eclipse (на момент написания статьи это весия Oxygen) кнопку «Download» и нажмем на нее.

После нажатия на кнопку нас перенаправит собственно на страницу загрузки, где необходимо будет нажать на кнопку «Download» для загрзуки установочного пакета:

После ее загрузки установочного пакета запустим его:

По факту Eclipse — это целый набор сред для разных ситуаций и языков программирования. И программа установки предлагает нам выбрать одну из опций для инсталляции. Поскольку мы собираемся работать с Java, то нас будут интересовать в данном случае прежде всего две опции:

Eclipse IDE for Java Developers

Eclipse IDE for Java EE Developers

Первая опция предоставляет базовые возможности для работы с Java, а вторая позволяет также создавать веб-приложения и сервисы. По сути вторая опция включает и первую опцию. Поэтому выберем Eclipse IDE for Java EE Developers .

Далее надо будет указать папку для установки (или оставить выбранную папку по умолчанию) и принять пару лицензионных соглашений, и среда будет установлена.

После установки запустим Eclipse. Далее перейдем к пункту меню File -> New -> Project :

Далее нам откроется окно выбора шаблона проекта. Выберем Java Project и нажмем на кноку Next:

Затем будет предложено установить настройки проекта. В частности, в поле Project Name необходимо задать имя проекта. Допустим, оно будет HelloApp:

Все остальные настройки можно оставить по умолчанию, и в конце нажмем на кнопку Finish для создания проекта. После создания проект будет открыт в Eclipse. По умолчанию он будет пуст.

Все файлы с исходным кодом на Java в проекте помещаются в папку src . Нажмем на нее правой кнопкой мыши и в контекстном меню выберем New -> Class :

Затем откроется окно настройки класса. Здесь в поле Name необходимо задать название класс. Допустим, он будет называться Program. Все остальные настройки можно оставить по умолчанию:

После этого в проект будет добавлен файл Program.java, а в центральной части Eclipse мы сможем увидеть его код. Изменим этот код на следующий:

Для запуска проекта нажмем на панели инструментов на зеленую стрелочку, либо на пункт меню Run -> Run . И внизу среды в поле Console мы увидим результат работы программы (то есть фактически консольный вывод).

Создание собственных мастеров Eclipse

Использование мастеров для построения многократно используемых процессов

Первое знакомство


Эта статья продемонстрирует, как добавлять новые файлы к существующему проекту Eclipse с использованием мастера. Мастера Eclipse – это мощный инструмент для создания многократно используемых шаблонов применительно к таким типам файлов, которым недостаточно функциональности встроенных шаблонов. После изучения данной статьи вы сможете реализовать собственные мастера Eclipse, предназначенные для создания новых файлов.

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

Для исполнения приведенных в статье приложений вам потребуется следующее программное обеспечение:

Eclipse V3.2 или выше Хотя вы можете достигнуть определенных результатов и с более ранними версиями, приведенный в статье код тестировался с версией Eclipse V3.2.2 – новейшей официальной версией на момент написания статьи. IBM или Sun JDK версии V1.5 или выше Упражнения были созданы с использованием среды Java V1.5.0_07 под управлением операционной системы Mac OS® X V10.4.8. Используемая вами операционная система не имеет значения. Гораздо важнее версия Java-среды, установленной на вашем компьютере. Я рекомендую использовать версию Java 5.

Общий обзор по мастерам Eclipse

Мне нравятся многие возможности интегрированной среды разработки Eclipse. Одна из них – это расширяемость. Эту интегрированную среду разработки можно легко настроить в соответствии с собственными потребностями посредством добавления подключаемых модулей, реализующих нужные функции – в том числе модулей-мастеров, которые автоматизируют создание классов, интерфейсов, проектов и других ресурсов. Это имеет большое значение для организаций, поскольку позволяет превратить разработку и распространение подключаемых модулей на базе Eclipse IDE в оптимизированный процесс, функциональностью которого в автоматическом режиме сможет пользоваться множество людей.

Наличие процесса, позволяющего группам разработки создавать приложения единообразным способом, обеспечивает любой организации множество существенных преимуществ. Единообразие существенно упрощает сопровождение приложений. Единообразие уменьшает количество ошибок. Кроме того, поскольку приложения создаются единообразным способом, участникам группы проще переносить их из одного проекта в другой.

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

Создание нового мастера

Создаваемый в рамках данной статьи мастер представляет собой проект Eclipse для построения подключаемого модуля. Первые этапы построения специализированного мастера существенно упрощаются благодаря другим мастерам, выполняющим первоначальное создание исходного кода вместо разработчика. На протяжении нескольких следующих шагов вы будете использовать мастер Plug-in Project Wizard для создания начальной части своего подключаемого модуля.

Для создания нового проекта Plug-in Project выполните следующие шаги:

  1. Для выбора мастера проекта последовательно нажмите File > New > Project to select a project wizard.
  2. В списке Plug-in Development выберите строку Plug-in Project (см. Рис. 1).
  3. Для перехода к следующему этапу нажмите Next.
Рис. 1. Выбор мастера Plug-in Project
Рис. 2. Новый проект Plug-in Project
Рис. 3. Ввод необходимых данных для проекта Plug-in Project
Рис. 4. Выбор шаблона
Рис. 5. Окно New Wizard Options

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

Класс Wizard и интерфейсы INewWizard

К данному моменту в вашем проекте есть три класса: NewXHTMLFileWizard , NewXHTMLFileWizardPage и Activator . В следующих разделах рассматривается класс NewXHTMLFileWizard . Класс показан в листинге 1 без детализации кода методов.

Листинг 1. Класс NewXHTMLFileWizard

Последний метод – init() – необходим для реализации интерфейса INewWizard . Далее в статье рассматривается этот и другие методы, которые были автоматически включены в данный шаблон.

Метод addPages()

Метод addPages() добавляет страницы к вашему мастеру. В листинге 2 этот метод добавляет к мастеру единственную страницу NewXHTMLFileWizardPage .

Листинг 2. Метод addPages() добавляет страницы к вашему мастеру

Класс NewXHTMLFileWizardPage содержит элементы управления, позволяющие пользователю задать имя страницы. Если вы впоследствии захотите предоставить конечному пользователю возможности для ввода другой информации, вы сможете добавить к странице соответствующие средства.

Метод performFinish()

Вызов метода performFinish() осуществляется в том случае, когда пользователь нажимает кнопку Finish в данном мастере. После выполнения некоторых проверок он вызывает метод doFinish() с помощью интерфейса IRunnableWithProgress. Использование этого интерфейса избавляет вас от необходимости написания всех элементов пользовательского интерфейса, отвечающих за работу индикатора выполнения метода doFinish() (в том случае, если его выполнение занимает много времени). Этот метод полностью приведен в следующем листинге.

Листинг 3. Метод performFinish()

Метод doFinish()

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

Листинг 4. Первоначальный вид метода doFinish()

Метод openContentStream()

Показанный ниже метод openContentStream() возвращает поток ByteArrayInputStream , содержащий статическую строку, созданную как составная часть шаблона. В этой статье данная строка заменяется контентом файла-шаблона.

Код данного метода подлежит изменению в первую очередь, если вы захотите разрешить при создании нового файла добавление дополнительного полезного контента.

Листинг 5. Метод openContentStream()

Добавление базового контента

Вместо того, чтобы использовать в качестве контента нового файла значение статической строки, вы можете воспользоваться методом getResourceAsStream() для загрузки контента файла в код InputStream , который затем может быть задействован методом doFinish() для заполнения нового файла. Соответствующие изменения показаны ниже.

Листинг 6. Получение потока из ресурса

В файле index-xhtml-template.resource находится полноценная Web-страница стандарта XHTML V1.0 Strict. Эта страница содержит базовые теги и указатели на таблицу стилей и файлы JavaScript гипотетического предприятия. Этот файл показан в листинге 7. Он находится в том же пакете, что и класс NewXHTMLFileWizard ; соответственно, в этой статье он находится в пакете com.example.eclipse.wizards . Если вы разместите этот файл в другом пакете, обращайтесь к нему так, как будто это файл в каком-либо каталоге (другими словами, запись com.example.resources будет означать /com/example/resources ).

Листинг 7. Файл index-xhtml-template.resource

Теперь вы уже можете запустить свой подключаемый модуль Eclipse и посмотреть на него.

Тестирование нового мастера

После того как среда Eclipse создаст три класса, которые используются в этом мастере, вы в любой момент в процессе чтения этой статьи сможете запустить другой экземпляр Eclipse и затем использовать его для прогона и тестирования своего подключаемого модуля. Для запуска своего plug-in-проекта щелкните правой кнопкой мыши на его имени и выберите Run As > Eclipse Application (см. рис. 6). Запустится новый экземпляр Eclipse.

Рис. 6. Прогон проекта в качестве Eclipse-приложения


Теперь вы должны создать временный проект, содержащий ваш новый файл. Имя этого проекта не имеет значения – например, можно назвать его «temp». После появления этого проекта в вашем рабочем пространстве добавьте новый шаблон, для чего выберите File > New > Other.

Если все будет работать так, как ожидалось, в окне Select a Wizard появится новая категория – под той категорией, которую вы ранее сформировали для своего мастера. В этой статье использована категория Example.com Enterprise Templates (см. Рис. 7).

Рис. 7. Использование нового шаблона

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

Настройка страницы мастера

В форме исходной страницы NewXHTMLFileWizardPage имелись только два элемента управления: один для имени контейнера (проект или папка), другой – для имени создаваемого файла. Метод createControl() (полностью приведенный в листинге 8) отвечает за создание этих элементов управления и добавление их к диалоговому окну.

Листинг 8. Метод createControl()

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

Листинг 9. Объявление нового элемента управления

Теперь добавьте к этому тексту т.н. getter-метод. Класс NewXHTMLFileWizard будет использовать этот getter-метод при построения нового файла. Метод getTitle() показан в следующем листинге.

Листинг 10. Метод getTitle()

Внесите в метод createControl() необходимые изменения, добавляющие новые элементы управления вводом и метку для заголовка. Измененный код показан в следующем листинге.

Листинг 11. Метод createControl() с внесенными изменениями

Прежде чем добавлять код к классу NewXHTMLFileWizard , протестируйте изменения, внесенные к настоящему времени, для чего выполните описанные выше шаги.

Проверка введенной пользователем информации

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

В следующем листинге показаны изменения, внесенные в метод dialogChanged() .

Листинг 12. Проверка наличия введенной информации в методе dialogChanged()

После того, как указанные изменения будут внесены, мастер будет генерировать сообщение об ошибке в том случае, если пользователь не введет значение в поле Title. Кроме того, кнопка Finish будет деактивирована до тех пор, пока пользователь не введет в поле Title какое-либо значение. Убедитесь в работоспособности этой функции, для чего выполните описанные выше шаги.

Добавление пользовательского контента

Теперь страница мастера NewXHTMLFileWizardPage уже может принимать введенное пользователем значение для HTML-заголовка, однако пока не способна внедрять это значение в файл. Перед тем как начинать добавление значения к файлу, сначала отредактируйте файл index-xhtml-template.resource, создав в нем т.н. «заполнитель» (placeholder) для этого значения. Для упрощения подстановки значения можно заменить элемент на $ .</p> <p>Напоминаю, что вы модифицируете метод performFinish() для того, чтобы получить заголовок из страницы мастера и передать его в метод doFinish() вместе с остальными значениями.</p> <h5>Листинг 13. Окончательный вид метода performFinish()</h5> <p>Теперь внесите в метод doFinish() небольшие изменения, позволяющие принять заголовок в качестве параметра и передать его в метод openContentStream() .</p> <h5>Листинг 14. Окончательный вид метода doFinish(), принимающего заголовок в качестве параметра</h5> <p>И, наконец, вам необходимо немного модифицировать метод openContentStream() , чтобы он смог заменять значение $title , найденное в файле, значением, введенным пользователем (см. листинг 15). Если шаблон содержит большое количество различных значений, вы можете применить более элегантное решение, например, новый класс, который расширяет FilterInputStream и заменяет сразу весь набор различных значений.</p> <h5>Листинг 15. Окончательный вид метода openContentStream()</h5> <p>Теперь метод openContentStream() не ограничивается загрузкой контента файла ресурсов и возвращением его в качестве потока InputStream . Новый код периодически обращается к потоку, читает его с помощью InputStreamReader и в каждой строке заменяет значение $title . Результат возвращается в виде потока ByteArrayInputStream – это тот же самый поток, который использовался при первоначальном создании класса NewXHTMLFileWizard .</p> <h2 id="sozdanie-novogo-mastera-proekta">Создание нового мастера проекта</h2> <p>Если вы до сих пор следовали моим указаниям, то к настоящему моменту у вас имеется мастер, который создает новый файл в существующем проекте. Однако не будем ограничиваться этим. Современное предприятие может представить свои корпоративные правила, которые оно считает обязательными для соблюдения, в виде таких ресурсов, как XHTML-файлы. Вполне вероятно, что это предприятие захочет иметь аналогичные соглашения по организации новых проектов.</p> <p>Посредством сравнительно небольших изменений в вашем проекте вы сможете построить мастера, которые будет добавлять весь проект к рабочему пространству вместе с необходимыми папками и некоторыми первоначальными файлами. Этот мастер создает новую папку для Web-сайта Example.com, а также образы и папки стилей. Внутри папки стилей этот мастер создает CSS-файл с названием site.css. Мастер функционирует посредством повторного вызова метода из класса NewXHTMLFileWizard для добавления нового XHTML-файла с заголовком, содержащим имя нового проекта, и некоторого нового текста.</p> <h2 id="postroenie-novogo-mastera-newsiteprojectwizard">Построение нового мастера NewSiteProjectWizard</h2> <p>Поскольку к данному моменту вы уже имеете настроенный и работоспособный подключаемый модуль, у вас нет необходимости в использовании мастера для построения нового класса. Вместо этого вы можете построить новый мастер самостоятельно – создав расширением класса Wizard новый класс, который будет реализовывать следующие два интерфейса: INewWizard и IExecutableExtension .</p> <p>Добавьте новый класс NewSiteProjectWizard в тот же пакет, в котором находится класс NewXHTMLFileWizard . Посмотрите на декларацию класса NewSiteProjectWizard в листинге 16 и убедитесь в том, что вы расширяете класс Wizard . Кроме того, добавьте интерфейсы INewWizard и IExecutableExtension .</p> <p>Поскольку класс NewSiteProjectWizard является расширением того же класса NewXHTMLFileWizard и реализует один из интерфейсов, реализованных в классе NewXHTMLFileWizard , вы увидите в этих двух классах общие методы. Для компактности контент методов в листинге 16 показан в сокращенном виде (далее в статье эти методы будут продемонстрированы в полном виде).</p> <h5>Листинг 16. Класс NewSiteProjectWizard</h5> <h3 id="vidoizmenenie-fayla-plugin-xml">Видоизменение файла plugin.xml</h3> <p>После того, как вы добавили новый класс, и перед тем, как вы сможете исполнить его в среде Eclipse в качестве мастера, вам необходимо внести некоторые изменения в файл plugin.xml file , расположенный в базовой части вашего проекта.</p> <h5>Листинг 17. Файл plugin.xml</h5> <p>Изменения, внесенные в файл plugin.xml, позволят среде Eclipse узнать, что класс NewSiteProjectWizard является мастером, который она сможет при необходимости вызвать. Этот класс находится под той же категорией, что и описывавшийся выше класс NewXHTMLFileWizard . Атрибут project=»true» сообщает среде Eclipse, что речь идет о проекте, в результате чего этот проект будет отображаться в соответствующем контексте.</p> <h3 id="metod-addpages-2">Метод addPages()</h3> <p>API-интерфейсы среды Eclipse содержат новые классы мастеров и страниц мастеров. Эти классы окажутся полезными, если вы хотите реализовать базовые функции и не нуждаетесь в реализации большого количества пользовательских функций. В техническом смысле класс NewSiteProjectWizard может являться расширением класса BasicNewProjectResourceWizard — существующего мастера, который используется для создания базовых проектов — хотя в документе JavaDoc отмечается, что этот класс не предназначался для использования в качестве подкласса. Как показано ниже, для получения базовой информации по проекту, например, имени проекта, вы можете использовать ту же страницу, которая использовалась мастером BasicNewProjectResourceWizard , а именно WizardNewProjectCreationPage .</p> <h5>Листинг 18. Метод addPages()</h5> <p>Этот метод создает новый экземпляр класса страницы, вводит описание и заголовок, а затем добавляет все это в качестве страницы мастера.</p> <h3 id="metod-performfinish-2">Метод performFinish()</h3> <p>Как и класс NewXHTMLFileWizard , класс NewSiteProjectWizard содержит показанный в листинге 19 метод performFinish() , который выполняется после того, как пользователь выполнил все шаги в мастере и нажал на кнопку <strong>Finish</strong>. Этот метод вызывает процесс, выполняющий метод createProject() , который, в свою очередь, выполняет большую часть основной работы, включая создание проекта, папки и файлов.</p> <p><center><iframe width="420" height="315" src="https://www.youtube.com/embed/XcsZvDLR7ak" frameborder="0" allowfullscreen></iframe><br /> </center></p> <h5>Листинг 19. Метод performFinish()</h5> <p>После вызова метода createProject() для создания файлов и папок метод performFinish() вызывает два статических метода для обновления текущей перспективы и для выбора вновь созданного проекта в среде разработки.</p> <h3 id="metod-createproject">Метод createProject()</h3> <p>Метод createProject() , показанный в листинге 20, создает, а затем открывает новый проект. Затем этот метод добавляет к указанному проекту два новых файла и две новые папки. Эти файлы добавляются private-методом addFileToProject() , который был написан для того, чтобы до некоторой степени сохранить «чистоту» метода createProject() .</p> <h5>Листинг 20. Метод createProject()</h5> <h3 id="metod-addfiletoproject">Метод addFileToProject()</h3> <p>Возможно, вы обратили внимание, что большая часть кода в методе addFileToProject() по существу совпадает с кодом метода doFinish() , показанного в листинге 14. Однако сигнатура этого метода совершенно другая. Внесенные изменения позволяют принимать параметры, что расширяет возможности повторного использования в контексте метода createProject() .</p> <h5>Листинг 21. Метод addFileToProject()</h5> <p>Если этот файл уже существует, его контент соответствует контенту потока contentStream , переданного в этот метод. Если этот файл не существует, он будет создан вместе с находящимся внутри него контентом.</p> <p>В материалы для загрузки по данной статье включен полный текст класса NewSiteProjectWizard . После того как вы добавите показанные здесь реализации метода и реализацию интерфейсов INewWizard и IExecutableExtension , вы сможете выполнять свои проекты в качестве Eclipse-приложений, как было показано выше. На этот раз помимо создания нового файла с помощью мастера NewXHTMLFileWizard , вы сможете создать и новый проект.</p> <h2 id="ustranenie-nepoladok">Устранение неполадок</h2> <p>Если в процессе прогона вы получили сообщения об ошибке, вы можете в процессе отладки прогнать свой проект как подключаемый модуль Eclipse. В таких случаях я предпочитаю использовать перспективу <strong>Debug Perspective</strong> среды разработки Eclipse. Чтобы начать прогон подключаемого модуля в среде Eclipse одновременно с пошаговым выполнением вашего кода, выберите <strong>Run > Debug Last Launched</strong>.</p> <p>Имеет смысл ввести контрольную точку в первую строку метода performFinish() , поскольку именно здесь начинаются реальные действия. После того, как вы в своем мастере нажмете кнопку <strong>Finish</strong>, отладчик должен будет прервать свою работу в этой контрольной точке (при условии, что ошибка не возникла <em>до</em> этой контрольной точки).</p> <h2 id="zaklyuchenie">Заключение</h2> <p>Одно из величайших достоинств среды разработки Eclipse – это простота расширения функциональности посредством создания подключаемых модулей, добавляющих новые мастера для создания новых файлов. Использование специфических для конкретного предприятия мастеров для создания таких файлов обеспечивает единообразную и быструю разработку приложений.</p> <h2 id="java-eclipse-kak-sozdat-proekt-i-dobavit">Java Eclipse — как создать проект и добавить класс, пакет — пример</h2> <h2 id="primary-tabs">Primary tabs</h2> <h3 id="forums">Forums:</h3> <p>Видеоурок создания нового проекта доступно здесь: <strong>youtu.be/Wzrnhilm5Aw</strong></p> <h3 id="sozdanie-proekta-2">Создание проекта</h3> <p>Создадим проект в эклипс <em>(проект — это скорее форма хранения различных файлов нашей программы и имеет больше отношения к организации разработки чем к языку Ява непосредственно)</em></p> <h3 id="sozdanie-paketa-2">Создание пакета</h3> <p>Создать пакет можно так:</p> <p>В открывшемся окне указываем имя пакета</p> <h3 id="dobavlenie-fayla-klassa">Добавление файла класса</h3> <p>Теперь нам надо добавить файл , в котором мы размести исходный код — файл класса = <br />для этого в Эклипсе выбираем в главном меню -></p> <p>Имя классу даём какое захотим, например <strong>HelloWorldSwing</strong> — при указании имени можно указать и к какому пакету относится класс.</p> <h2 id="sozdanie-proekta-v-eclipse-2">Создание проекта в eclipse</h2> <p>IDE (Integrated Development Environment) или же по-русски интегрированная среда разработки, это инструмент, предназначенный для разработки программного обеспечения. В предыдущем уроке мы писали код программы в текстовом редакторе, потом компилировали и запускали программу через командную строку, что не совсем удобно. IDE же позволяет в единой среде писать, компилировать, запускать и отлаживать программу.</p> <p>Наиболее популярными бесплатными IDE для Java программистов являются: Eclipse, NetBeans и IntelliJ IDEA. В интернете существует много споров о том, какая же IDE лучше, однако, однозначного ответа на этот вопрос не существует, все зависит от круга задач, которые необходимо решать. Также, каждый программист обычно выбирает ту, которая ему удобнее и к которой он привык. На начальном этапе можете выбрать любую, это не имеет значения.</p> <p>Также, существует много сторонников теории, что несколько первых месяцев следует работать исключительно с блокнотом и командной строкой, поскольку только так можно понять, как все работает изнутри, и правда в этом есть. Но, после нескольких неудачных попыток компиляции и ручного исправления синтаксических ошибок в коде, может просто пропасть желание заниматься этим дальше, поэтому я сторонник того, чтобы сразу переходить к IDE. <br />В любом случае, выбор за вами.</p> <p>В этом уроке мы рассмотрим, как начать работу с Eclipse IDE.</p> <p><ul> Установим Eclipse >Установка и запуск Eclipse IDE <br /></h3> </p> </ul> <ol> <li>Переходим по ссылке http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/keplerr и скачиваем Eclipse, соответствующую операционной системе. <br /><strong>Далее будет рассмотрена установка для Windows.</strong></li> <li>Распаковываем скаченный .zip архив в директорию <strong>C:\Program Files\</strong></li> <li><strong>На этом установка завершена!</strong></li> <li>Чтобы запустить Eclipse >eclipse.exe</strong> , находящийся в папке <strong>C:\Program Files\eclipse\</strong>.</li> <li>При запуске откроется окно, предлагающее выбрать рабочую область (Workspace), где будут храниться программные файлы проекта. Указываем удобную для нас директорию (рис. 3.1.) и нажимаем <strong>OK</strong>.</li> </ol> <p>6. Закрываем приветственное сообщение (рис. 3.2.), тем самым перейдя в рабочую среду.</p> <h3 id="nachalo-raboty-s-eclipse-ide">Начало работы с Eclipse IDE</h3> <p>Теперь создадим новый проект. Для этого выберем меню <strong>File->New->Project..</strong></p> <p>В открывшемся окне выберем <strong>Java Project</strong> (рис. 3.3.) и нажмем <strong>Next</strong>.</p> <p>В следующем окне введем имя нашего проекта (рис. 3.4.) и нажмем <strong>Finish</strong>.</p> <p>Проект отобразится в левой части экрана и должен в себе содержать элемент <strong>JRE System Library</strong> (рис. 3.5.)</p> <p> <strong>Если этого элемента нет, то его необходимо добавить вручную!</strong> Для этого выберем <strong>Windows -> Preferences</strong>, в открывшемся окне <strong>Preferences</strong> слева выберем <strong>Java -> Installed JREs</strong>, нажмем кнопку <strong>Add…</strong> справа (рис 3.6.). В открывшемся окне выберем <strong>Standard VM</strong> и нажмем кнопку <strong>Next.</strong></p> <p>В открывшемся окне <strong>Add JRE</strong>, укажем директорию, в которой установлена Java (рис 3.7.) и нажмем <strong>Finish</strong>.</p> <p>Далее рассмотрим создание программы <strong>Hello World</strong> из урока 2, но уже в Eclipse.</p> <p>Первым делом необходимо создать класс. Нажмем правой кнопкой на папке с проектом и выберем из контекстного меню <strong>New -> Class</strong> (рис 2.7.).</p> <p>В открывшемся окне <strong>New Java Class</strong> введем имя класса проекта <strong>HelloWorld</strong> и установим флажок для метода <strong>public static void main(String[] args)</strong> (рис 2.8.). <strong>Нажмем Finish</strong>.</p> <p>В итоге, Eclipse создаст новый класс <strong>Hello World</strong></p> <p>Откроем созданный класс и завершим нашу программу. Добавим в метод main следующий код (рис 2.9.).</p> <p>Сохраним изменения с при помощи клавиш Ctrl+S или специального значка вверху на панели инструментов. Готово!</p> <p>Далее запустим наш проект, для этого в меню выберем <strong>Run -> Run Configurations.</strong></p> <p>В открывшемся окне в левой части 2 раза кликнем на <strong>Java Application</strong> после чего, будет создан новый под элемент с именем <strong>New_configuration</strong>, которое впоследствии в правой части можем изменить . В правой части также заполним поля <strong>Project</strong> и <strong>Main Class</strong>. Project должен содержать имя проекта, Main Class — имя главного класса, в нашем случае — <strong>HelloWorld (</strong>рис. 3.10). После чего нажмем <strong>Apply</strong> и <strong>Run</strong>.</p> <p>В результате, в консоле будут напечатаны слова <strong>Hello World</strong> (рис. 3.11).</p> <p>Для запуска программы в дальнейшем, достаточно нажимать специальный значок на панели инструментов, выбрав <strong>Hello World</strong> (рис. 3.12.).</p><div style="clear:both; margin-top:0em; margin-bottom:1em;"><a href="https://studiowb.ru/chto-takoe-kod-pdf-setpolydash/" target="_blank" class="u9233b15f3b2510f06e1ac7186f1fde35"><!-- INLINE RELATED POSTS 2/3 //--><style> .u9233b15f3b2510f06e1ac7186f1fde35 { padding:0px; margin: 0; padding-top:1em!important; padding-bottom:1em!important; width:100%; display: block; font-weight:bold; background-color:#eaeaea; border:0!important; border-left:4px solid inherit!important; text-decoration:none; } .u9233b15f3b2510f06e1ac7186f1fde35:active, .u9233b15f3b2510f06e1ac7186f1fde35:hover { opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; text-decoration:none; } .u9233b15f3b2510f06e1ac7186f1fde35 { transition: background-color 250ms; webkit-transition: background-color 250ms; opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; } .u9233b15f3b2510f06e1ac7186f1fde35 .ctaText { font-weight:bold; color:#C0392B; text-decoration:none; font-size: 16px; } .u9233b15f3b2510f06e1ac7186f1fde35 .postTitle { color:#2C3E50; text-decoration: underline!important; font-size: 16px; } .u9233b15f3b2510f06e1ac7186f1fde35:hover .postTitle { text-decoration: underline!important; } </style><div style="padding-left:1em; padding-right:1em;"><span class="ctaText">Илон Маск рекомендует:</span>  <span class="postTitle">Что такое код pdf_setpolydash</span></div></a></div> </div><!-- .entry-content --> </article><!-- #post-## --> <div class="entry-footer"> </div> <div class="b-share b-share--post"> <div class="b-share__title">Понравилась статья? Поделиться с друзьями:</div> <span class="b-share__ico b-share__vk js-share-link" data-uri="https://vk.com/share.php?url=https%3A%2F%2Fstudiowb.ru%2Fsozdanie-proekta-v-eclipse%2F"></span> <span class="b-share__ico b-share__fb js-share-link" data-uri="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fstudiowb.ru%2Fsozdanie-proekta-v-eclipse%2F"></span> <span class="b-share__ico b-share__tw js-share-link" data-uri="https://twitter.com/share?text=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5+%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0+%D0%B2+eclipse&url=https%3A%2F%2Fstudiowb.ru%2Fsozdanie-proekta-v-eclipse%2F"></span> <span class="b-share__ico b-share__ok js-share-link" data-uri="https://connect.ok.ru/dk?st.cmd=WidgetSharePreview&service=odnoklassniki&st.shareUrl=https%3A%2F%2Fstudiowb.ru%2Fsozdanie-proekta-v-eclipse%2F"></span> <span class="b-share__ico b-share__gp js-share-link" data-uri="https://plus.google.com/share?url=https%3A%2F%2Fstudiowb.ru%2Fsozdanie-proekta-v-eclipse%2F"></span> <span class="b-share__ico b-share__whatsapp js-share-link js-share-link-no-window" data-uri="whatsapp://send?text=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5+%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0+%D0%B2+eclipse%20https%3A%2F%2Fstudiowb.ru%2Fsozdanie-proekta-v-eclipse%2F"></span> <span class="b-share__ico b-share__viber js-share-link js-share-link-no-window" data-uri="viber://forward?text=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5+%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0+%D0%B2+eclipse%20https%3A%2F%2Fstudiowb.ru%2Fsozdanie-proekta-v-eclipse%2F"></span> <span class="b-share__ico b-share__telegram js-share-link js-share-link-no-window" data-uri="https://telegram.me/share/url?url=https%3A%2F%2Fstudiowb.ru%2Fsozdanie-proekta-v-eclipse%2F&text=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5+%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0+%D0%B2+eclipse"></span> </div> <div class="b-related"> <div class="b-related__header"><span>Вам также может быть интересно</span></div> <div class="b-related__items"> <div id="post-11784" class="post-card post-11784 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jeffekt-linzy-watcom-c/"> <img width="310" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/images-4-310x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jeffekt-linzy-watcom-c/" rel="bookmark" >Эффект линзы (watcom c)</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Эффект линзы (watcom c) Просветляющие покрытия от ZEISS Высококачественные линзы требуют высоколассного подхода: защита, </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11800" class="post-card post-11800 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyk-xml-xml-v-microsoft-internet-explorer-5-0/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/5-Top-Technology-Trends-In-2019-And-The-Opportunities-They-Will-Create-1030x672-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" srcset="https://studiowb.ru/wp-content/uploads/2019/11/5-Top-Technology-Trends-In-2019-And-The-Opportunities-They-Will-Create-1030x672-330x140.jpg 330w, https://studiowb.ru/wp-content/uploads/2019/11/5-Top-Technology-Trends-In-2019-And-The-Opportunities-They-Will-Create-1030x672-770x330.jpg 770w" sizes="(max-width: 330px) 100vw, 330px" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyk-xml-xml-v-microsoft-internet-explorer-5-0/" rel="bookmark" >Язык xml xml в microsoft internet explorer 5 0</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Основы XML для начинающих пользователей Введение в правильную разметку XML означает Extensible Markup Language, </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11816" class="post-card post-11816 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyki-programmirovanija/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/IT-Technology-DANIA-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" srcset="https://studiowb.ru/wp-content/uploads/2019/11/IT-Technology-DANIA-330x140.jpg 330w, https://studiowb.ru/wp-content/uploads/2019/11/IT-Technology-DANIA.jpg 700w" sizes="(max-width: 330px) 100vw, 330px" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyki-programmirovanija/" rel="bookmark" >Языки программирования</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Языки программирования Язык программирования — искусственный (формальный) язык, предназначенный для записи программ для исполнителя </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11785" class="post-card post-11785 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jeffekt-plameni/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/AI-is-coming-—-and-HR-is-not-prepared-8b38574-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jeffekt-plameni/" rel="bookmark" >Эффект пламени</a></div> </header><!-- .entry-header --> <div class="post-card__content"> По-настоящему яркие ролики: эффект огня для видеомонтажа Как поразить зрителей с первых кадров? Самый </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11801" class="post-card post-11801 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyk-xml-vvedenie/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/homepage-image-1-330x140.png" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyk-xml-vvedenie/" rel="bookmark" >Язык xml введение</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Язык xml введение XML технологии и средства разработки Gupta Team Developer: XML технологии (Часть </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11817" class="post-card post-11817 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jakorja-html/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/shutterstock_306988172-1024x683-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" srcset="https://studiowb.ru/wp-content/uploads/2019/11/shutterstock_306988172-1024x683-330x140.jpg 330w, https://studiowb.ru/wp-content/uploads/2019/11/shutterstock_306988172-1024x683-770x330.jpg 770w" sizes="(max-width: 330px) 100vw, 330px" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jakorja-html/" rel="bookmark" >Якоря HTML</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Что такое ссылка якорь в HTML и как ее сделать? Когда мы имеем дело </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11786" class="post-card post-11786 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jeffekt-razbitogo-teksta/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/IT-1-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" srcset="https://studiowb.ru/wp-content/uploads/2019/11/IT-1-330x140.jpg 330w, https://studiowb.ru/wp-content/uploads/2019/11/IT-1-770x330.jpg 770w" sizes="(max-width: 330px) 100vw, 330px" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jeffekt-razbitogo-teksta/" rel="bookmark" >Эффект разбитого текста</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Создаем эффект разрушающегося текста при помощи Stipplism В сегодняшнем уроке мы создадим эффект разрушающегося </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11802" class="post-card post-11802 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyk-xml-ispolzovanie-java-xml-obrabotchikov/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/54398_luca-bravo-217276-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyk-xml-ispolzovanie-java-xml-obrabotchikov/" rel="bookmark" >Язык xml использование java xml обработчиков</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Java XML J ava Development Kit поставляется с двумя парсерами XML: DOM и SAX, </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11818" class="post-card post-11818 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jandeks-krupnejshaja-poiskovaja-sistema/"> <img width="275" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/images-2-275x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jandeks-krupnejshaja-poiskovaja-sistema/" rel="bookmark" >Яндекс — крупнейшая поисковая система русскоязычного Интернета!</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Поисковые системы интернета – Полный список всех поисковых систем Чтобы увеличить посещаемость вашего сайта, </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11787" class="post-card post-11787 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jeffekt-skruchivanija/"> <img width="57" height="57" src="https://studiowb.ru/wp-content/uploads/2019/11/images2.png" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jeffekt-skruchivanija/" rel="bookmark" >Эффект скручивания</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Как добиться эффекта скручивания? Люди добрые помогите! Как сделать так чтобы здание скрутилось вокруг </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11803" class="post-card post-11803 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyk-xml-opisanie-tehnologii/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/cloud_lines-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyk-xml-opisanie-tehnologii/" rel="bookmark" >Язык xml описание технологии</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Синтаксис и основные понятия языка XML, создание валидных документов Понятие о языке XML XML </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11819" class="post-card post-11819 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jachejka-zagolovka/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/it_eng-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jachejka-zagolovka/" rel="bookmark" >Ячейка заголовка</a></div> </header><!-- .entry-header --> <div class="post-card__content"> 17 Таблицы 17.1 Введение в таблицы Таблицы представляют отношения между данными. Авторы определяют эти </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11788" class="post-card post-11788 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jeffektivnoe-ispolzovanie-gnu-make/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/information-technology-330x140.png" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jeffektivnoe-ispolzovanie-gnu-make/" rel="bookmark" >Эффективное использование gnu make</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Эффективное использование gnu make Создание данного текста не имело своей целью дать полное описание </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11804" class="post-card post-11804 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyk-xml-prakticheskoe-vvedenie/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/IT-Tools-for-Development-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyk-xml-prakticheskoe-vvedenie/" rel="bookmark" >Язык xml практическое введение</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Описание данных с помощью XML Если вы программируете на Java, за последние пару лет </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11789" class="post-card post-11789 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jeffektivnyj-kopirajting-kak-pisat-kopirajting/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/artificial-intelligence_resize_md-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jeffektivnyj-kopirajting-kak-pisat-kopirajting/" rel="bookmark" >Эффективный копирайтинг, как писать копирайтинг</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Как написать эффективный продающий текст. Часть первая. Подготовка Грамотно написанный продающий текст позволяет превращать </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11805" class="post-card post-11805 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyk-xml-prosmotr-xml-dokumentov/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/AI-is-coming-—-and-HR-is-not-prepared-8b38574-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyk-xml-prosmotr-xml-dokumentov/" rel="bookmark" >Язык xml просмотр xml документов</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Чем открыть XML Web — это место, где миллионы людей ежедневно связываются друг с </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11790" class="post-card post-11790 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jeffektivnyj-sposob-primenenija-interfejsov-v-mdi/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/960x0-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" srcset="https://studiowb.ru/wp-content/uploads/2019/11/960x0-330x140.jpg 330w, https://studiowb.ru/wp-content/uploads/2019/11/960x0-770x330.jpg 770w" sizes="(max-width: 330px) 100vw, 330px" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jeffektivnyj-sposob-primenenija-interfejsov-v-mdi/" rel="bookmark" >Эффективный способ применения интерфейсов в mdi приложениях</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Многооконный интерфейс. Создание MDI-приложения , страница 3 Вместо дополнительных байт окна приложение может использовать </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11806" class="post-card post-11806 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyk-xml-stilevye-tablicy-xsl/"> <img width="308" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/images-308x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyk-xml-stilevye-tablicy-xsl/" rel="bookmark" >Язык xml стилевые таблицы xsl</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Отображение XML с использованием XSLT При помощи XSLT вы можете преобразовывать XML документ в </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11791" class="post-card post-11791 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jeffekty-s-izobrazhenijami/"> <img width="275" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/images-2-275x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jeffekty-s-izobrazhenijami/" rel="bookmark" >Эффекты с изображениями</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Как сделать — визуальные эффекты изображениям Узнайте, как добавить визуальные эффекты к изображениям. Фильтры </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11807" class="post-card post-11807 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyk-xml-shemy-dannyh/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/IT-Tools-for-Development-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyk-xml-shemy-dannyh/" rel="bookmark" >Язык xml схемы данных</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Понимание XML Узнайте, как Расширяемый язык разметки (Extensible Markup Language — XML) облегчает универсальный </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11792" class="post-card post-11792 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jumor-pivo-dlja-programmista/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/5-Top-Technology-Trends-In-2019-And-The-Opportunities-They-Will-Create-1030x672-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" srcset="https://studiowb.ru/wp-content/uploads/2019/11/5-Top-Technology-Trends-In-2019-And-The-Opportunities-They-Will-Create-1030x672-330x140.jpg 330w, https://studiowb.ru/wp-content/uploads/2019/11/5-Top-Technology-Trends-In-2019-And-The-Opportunities-They-Will-Create-1030x672-770x330.jpg 770w" sizes="(max-width: 330px) 100vw, 330px" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jumor-pivo-dlja-programmista/" rel="bookmark" >Юмор пиво для программиста</a></div> </header><!-- .entry-header --> <div class="post-card__content"> ХАЙФХАК: ПРОГРАММИСТ ВЗЛОМАЛ СИСТЕМУ, ЧТОБЫ ПОПИТЬ ПИВО БЕСПЛАТНО / пиво :: geek новости :: </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11808" class="post-card post-11808 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyk-obrabotki-dannyh-awk/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/cloud_lines-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyk-obrabotki-dannyh-awk/" rel="bookmark" >Язык обработки данных awk</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Примеры команды AWK в Linux Введение AWK назван в честь фамилии его авторов: Альфред </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11793" class="post-card post-11793 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/ja-zagruzhaju-timagelist-dinamicheski-kak-sdelat/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/Info-tech-banner-1024x305-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/ja-zagruzhaju-timagelist-dinamicheski-kak-sdelat/" rel="bookmark" >Я загружаю timagelist динамически как сделать картинки из timagelist прозрачными</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Я загружаю timagelist динамически как сделать картинки из timagelist прозрачными? Элемент управления ImageList содержит </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11809" class="post-card post-11809 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyk-preobrazovanij-xsl-xslt/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/SoCIT-IT-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyk-preobrazovanij-xsl-xslt/" rel="bookmark" >Язык преобразований xsl (xslt)</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Введение в XSLT XSLT представляет собой способ для XML-документов в другие XML или документы </div><!-- .entry-content --> </div><!-- #post-## --> </div> </div> <meta itemprop="author" content="Study"> <meta itemprop="datePublished" content="2019-11-13T20:44:33+03:00"/> <meta itemscope itemprop="mainEntityOfPage" itemType="https://schema.org/WebPage" itemid="https://studiowb.ru/sozdanie-proekta-v-eclipse/" content="Создание проекта в eclipse"> <meta itemprop="dateModified" content="2019-11-13"> <meta itemprop="datePublished" content="2019-11-13T20:44:33+03:00"> <div itemprop="publisher" itemscope itemtype="https://schema.org/Organization"><div itemprop="logo" itemscope itemtype="https://schema.org/ImageObject" style="display: none;"><img itemprop="url image" src="https://studiowb.ru/wp-content/uploads/2019/11/images-2.png" alt="Кодинг, CSS и SQL"></div><meta itemprop="name" content="Кодинг, CSS и SQL"><meta itemprop="telephone" content="Кодинг, CSS и SQL"><meta itemprop="address" content="https://studiowb.ru"></div> </main><!-- #main --> </div><!-- #primary --> </div><!-- micro --> <aside id="secondary" class="widget-area" itemscope itemtype="http://schema.org/WPSideBar"> <div id="search-2" class="widget widget_search"> <form role="search" method="get" id="searchform_2856" action="https://studiowb.ru/" class="search-form"> <label class="screen-reader-text" for="s_2856">Поиск: </label> <input type="text" value="" name="s" id="s_2856" class="search-form__text"> <button type="submit" id="searchsubmit_2856" class="search-form__submit"></button> </form></div> </aside><!-- #secondary --> </div><!-- #content --> <footer class="site-footer container" itemscope itemtype="http://schema.org/WPFooter"> <div class="site-footer-inner "> <div class="footer-info"> © 2021 Кодинг, CSS и SQL </div><!-- .site-info --> <div class="footer-counters"> </div> </div><!-- .site-footer-inner --> </footer><!-- .site-footer --> <button type="button" class="scrolltop js-scrolltop"></button> </div><!-- #page --> <script type="text/javascript"> <!-- var _acic={dataProvider:10};(function(){var e=document.createElement("script");e.type="text/javascript";e.async=true;e.src="//www.acint.net/aci.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})() //--> </script><script type='text/javascript'> /* <![CDATA[ */ var lang_array = {"text1":"\u0441\u0440\u0435\u0434\u043d\u0435\u0435","text2":"\u0438\u0437"}; var wps_ajax = {"url":"https:\/\/studiowb.ru\/wp-admin\/admin-ajax.php","nonce":"d0e32ed5da"}; /* ]]> */ </script> <script src='https://studiowb.ru/wp-content/themes/root/js/scripts.min.js?ver=2.3.2'></script> <script src='https://studiowb.ru/wp-includes/js/comment-reply.min.js?ver=5.2.11'></script> <script src='https://studiowb.ru/wp-includes/js/wp-embed.min.js?ver=5.2.11'></script> <!--LiveInternet counter--><script type="text/javascript"> new Image().src = "//counter.yadro.ru/hit?r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+ ";h"+escape(document.title.substring(0,150))+ ";"+Math.random();</script><!--/LiveInternet--> </body> </html>