Начало работы с Alfresco Maven SDK
Jeff Potts, Январь, 2014 <= ч.1- Работаем с вашим проектом в IDE
- Понимание структуры проекта
- Создание проекта адаптированного для Share доступа
- Общие зависимости проекта
- Цель WAR
- Попробуем это: Создание Share проекта используя архетип
- Разбираемся с структурой каталогов Share доступа
- Запуск внутреннего тестирования на Share
- Управление зависимостями
- Другие темы для самостоятельного исследования
- Где найти еще информации
Работаем с вашим проектом в IDE
В этом нет необходимости, но многие люди предпочитают работать в IDE когда настраивают Alfresco. Любая IDE сделает это, но одна из самых популярных - Eclipse так, что давайте посмотрим как это работает. Я использую Kepler версию Eclipse Java EE IDE для Web Developers. Она поставляется с встроенной поддержкой Maven. Для открытия созданного проекта, выполните следующее:- File, Import, Maven, Existing Maven Projects. Кликните Далее.
- Укажите каталог, содержащий директорию someco-mvn-tutorial-repo. Eclipse проверит эту директорию и покажет ваш проект в списке проектов. Убедитесь, что чекбокс рядом с именем проекта выбран и жмите Далее.
- Eclipse покажет настройки панели плагинов Maven. Сейчас можно спокойно проигнорировать ее. Жмите Готово.
- Правый-клик на ошибке и выбор "Quick Fix".
- Выбор "Permanently mark goal set-version in pom.xml as ignored in Eclipse build". Готово.
- Выберите место где находится ваш POM (у меня это com.someco : someco-mvn-tutorial-repo : 1.0-SNAPSHOT) и жмите OK.
- Правый-клик на проекте и выбор Maven, Update Project.
- Убедитесь, что проект выбран, жмите OK.
Понимание структуры проекта
Структура каталогов вашего проекта немного более приятна для изучения в вашей IDE. Посмотрим, что у нас тут.- pom.xml В корне проекта вы видите pom.xml. Он сообщает Maven все что необходимо знать о вашем проекте. Вспомнили какие-то настройки забытые при создании проекта из шаблона? Вы можете внести изменения в настройках здесь. Для примера, версия 1.1.1 архетипа позволяет вам работать с Alfresco Community Edition версии 4.2.e. Если вы хотите работать с другой версией - просто измените несколько свойств и скажите Maven обновить их, а он позаботится об остальном.
- src/main/java То место где вы должны создавать ваши собственные пакеты для организации вашего Java кода. Такие вещи как custom action executer classes, custom behaviors, Java контроллеры для web-скриптов находятся здесь. Ели вы не знаете, что это все такое - не парьтесь, есть доступные учебники здесь. Эти файлы в конечном итоге будут размещены в JAR. Когда AMP установится в Alfresco WAR, JAR будет находится внутри WEB-INF/lib.
- src/test Все внутри src/test связано с выполнением тестирования. Сами юнит-тесты находятся в src/test/java. Любые ресурсы необходимые этим классам будут в src/test/resources. Внутри src/test/properties/local вы увидите файл alfresco-global.properties. Если вы уже знаете что-то об Alfresco вы знаете, что это используется для конфигурации сервера Alfresco. В этом случае это используется только для запуска встроенного сервера, для тестирования.
- src/main/amp Все остальное находится где-то в этой части проекта. Структура AMP хорошо документирована так, что я не хочу дублировать ее тут. Укажу только на основные моменты:
- Файл module.properties сообщает Alfresco, что ему необходимо знать об AMP такое как его ID, версию, минимальную и максимальную версию Alfresco необходимую ля запуска AMP, и любой другой AMPs с этими же зависимостями.
- Каталог config/alfresco/module/someco-mvn-tutorial-repo это сердце AMP. То место, где вы разместите конфиги XML файлов Spring, контент модель XML файлов, и пользовательскую конфигурацию интерфейса. Как вы увидите позже, я предпочитаю разделять подкаталоги для каждой из таких вещей.
- Если ваш модуль включает в себя web-скрипты или рабочие процессы (workflows), то они не содержатся в каталоге модулей. Вместо этого они находятся в config/alfresco/extension/templates/webscripts и config/alfresco/extension/workflows.
- Ваш модуль может включать клиентские ресурсы, которые должны быть развернуты в корень web-приложения. Они находятся в src/main/amp/web в каталогах css, jsp, scripts, и images.
Создание проекта адаптированного для Share доступа
Во-первых вы должны понимать что структура для проекта который создается на уровне репозитория, точно такая же как и для проекта адаптированного длоя Share доступа. В перспективе Alfresco Maven SDK, есть две вещи отличающие Share проект: Зависимости проекта и WAR AMP-а будут встроены в.Общие зависимости проекта
На минутку остановимся и поговорим об управлении зависимостями. На данный момент реализация такова, что по-умолчанию сконфигурированный архетип в проектном pom.xml использует зависимости артефакта alfresco-repository. Общие проекты не имеют такой зависимости. Факт, многие Общие проекты не используют Java вообще. Сейчас отредактируем pom.xml и удалим зависимости alfresco-repository. Это приведет к тому что демо-компоненты и ассоциированные тест классы выдадут ошибку при компилировании. Их можно удалить.Цель WAR
Другая вещь которая отличает Share проект это WAR в который развертывается AMP. Вместо alfresco WAR здесь нужно развертываться в Share WAR. Это конфигурируется в свойстве alfresco.client.war в вашем pom.xml. По-умолчанию это устанавливается в "alfresco". Для Share проекта тут нужно заменить на "share".Попробуем это: Создание Share проекта используя архетип
Давайте создадим новый проект с Общими настройками. Вы можете идти в командную строку и выполнить такую же команду архетипа как и выполняли ранее, исключая новый artifactId, и тогда изменить свойство alfresco.client.war на "share". Если вы не используете Eclipse, идите далее и сделайте это сейчас, пропустив следующий раздел. Другим варианто является настройка Eclipse чтобы вы смогли создать новый проект Alfresco используя Alfresco Maven SDK не выходя из IDE. Давайте сделаем это.- File, New Maven Project.
- Выберите каталог который содержит директорию проекта "repo", жмите Далее.
- Щелкните Configure и мы сможем добавить директорию Alfresco в список.
- Жмите Add Remote Catalog
- Выберите "https://artifacts.alfresco.com/nexus/content/groups/public/archetype-catalog.xml" как Catalog File. Выберите описание "Alfresco Archetypes". После, щелкайте OK и OK снова ближе к панели Preferences.
- Сейчас выберите "Alfresco Archetypes" в директории и вы увидите кучу архетипов в списке.
- Выбирайте "org.alfresco.maven.archetype" в фильтре появятся те самые два архетипа как и в начале учебника.
- Выбирайте alfresco-amp-archetype и жмите Далее.
- Выбор "com.someco" для groupId, "someco-mvn-tutorial-share" как artifactId, и смените alfresco_target_amp_client_war в "share". Жмите Готово.
Разбираемся с структурой каталогов Share доступа
Как я упоминал ранее структура этого проекта такая же точно, как и нашего репо-проекта. Только дно отличие - стоит отметить, что такие вещи в репо-проекте как web scripts находятся внутри src/main/amp/config/alfresco/extension/templates/webscripts.В Общем проекте они будут в src/main/amp/config/alfresco/web-extension/site-webscripts.Запуск внутреннего тестирования на Share
Часто вы будете одновременно работать на обоих уровнях настроек. Вашему Общему уровню необходим репозиторий для сообщений. Один из путей сделать это - сообщить Maven стартовать ваш репо-проект используя:cd someco-mvn-tutorial-repo mvn integration-test -Pamp-to-warИ тогда запускать ваш Share проект используя:
cd someco-mvn-tutorial-share mvn integration-test -Pamp-to-war -Dmaven.tomcat.port=8081Когда оба сервера поднимутся, вы можете открыть http://localhost:8081/share и логиниться для тестирования вашего модуля.
Управление зависимостями
Клевая штука в Apache Maven то, что он управляет зависимостями вашего проекта для вас. Все что вам надо - это сообшить Maven о них сконфигурировав ваш pom.xml. По-умолчанию, Alfresco Maven SDK создает две зависимости для вашего проекта: alfresco-repository и junit. Как я писал ранее, проект Alfresco Share не зависит от репозитория Alfresco так, что для проекта someco-mvn-tutorial-share, эти зависимости можно удалить. Но что если я захочу положить несколько вещей Java в мой Share проект, например web-скрипты на основе Java? В этом случае нам необходимо добавить зависимости. Web-скрипты могут работать в любом уровне. Если вы пишете Java-based web-скрипты в вашем репо-проекте, класс соберется потому, что зависимости артефакта alfresco-repository в свою очередь зависят от артефакта spring-webscripts. Вы можете увидеть это если откроете Dependency Hierarchy в Eclipse в вашем файле pom.xml:
Иерархия зависимостей в Eclipse
Еще вариант. Вы можете увидеть иерархию зависимостей запустив:
mvn dependency:listИтак, для добавления Java-based web-скриптов в ваш Share проект, нам необходимо добавить spring-webscripts как зависимость. Вы можете сделать это редактируя pom.xml, так:
<dependency> <groupId>org.springframework.extensions.surf</groupId> <artifactId>spring-webscripts</artifactId> <version>1.2.0-M14</version> <scope>provided</scope> </dependency>Теперь Java-based web-скрипты смогут найти свой родительский класс - DeclarativeWebScript. Вы можете быть удивлены как вы должны были узнать, что класс DeclarativeWebScript был включен в артефакт spring-webscripts. Ну например найдя го пройдя на http://artifacts.alfresco.com. Вы можете сделать поиск по классу и вам покажут все артефакты которые содержат его.
Другие темы для самостоятельного исследования
Вы теперь знаете как использовать Alfresco Maven SDK для создания проектов и в качестве вашего репозитория Alfresco и настройки Alfresco Share. Если вы новичок в разработке под Alfresco, я надеюсь вы согласитесь, что это реально легко собрать проект для начала работы. Если вы уже набили руку в Alfresco но все еще используете старые SDK я надеюсь это мотивирует вас перейти на новый SDK для создания ваших AMP. Есть много тем, которые не были охвачены в этом учебнике. Я оставлю их вам для самостоятельного исследования по своему усмотрению. Вот некоторые из них:- Alfresco Maven SDK поддерживает динамическую перезагрузку класса когда используется в сочетании с инструментом называющемся JRebel.
- Этот учебник охватывает архетип AMP. Но Alfresco Maven SDK включает в себя еще другой архетип под названием All-in-One. Этот архетип дает вам полную установку Alfresco включая SOLR.
- Alfresco Maven SDK поддерживается в обоих редакциях Community Edition и Enterprise Edition. Если вам необходима помощь в доступе к артефактам в Enterprise Edition, обратитесь в Alfresco Support.
Где найти еще информации
- Официальная документация на Alfresco Maven SDK находится по адресу http://docs.alfresco.com.
- Больше детальной документации по Alfresco Maven SDK можно найти на artifacts.alfresco.com.
- Презентация Gab-а на Alfresco SummitTest-Driven, Rapid Development, and Continuous Delivery of Alfresco Solutions
- Instant Apache Maven StarterКнига Maurizio Turatti и Maurizio Pillitu может быть отличным ресурсом, если вы заинтересованы в изучении большего о Apache Maven.
- Getting Started with Alfresco Development Презентация Gethin James'a с Alfresco Summit
- Alfresco Developer Series on ECM Architect содержит свободные учебники по custom content models, actions, behaviors, workflows, и web-скриптам.