Использование Maven для настройки проекта Drupal PHP - PullRequest
7 голосов
/ 10 июня 2009

Чего я хочу достичь?

В настоящее время мы работаем над проектом PHP, который использует Drupal .

Я отчаянно хочу узнать, как создать Одношаговую сборку для всего проекта. Желательно использовать что-то новое (для меня), которое кажется очень мощным: Maven

В основном я хочу автоматизировать следующий процесс:

  1. Оформить заказ Drupal из официального CVS-репозитория .
  2. Оформление официальных сторонних модулей из соответствующих репозиториев CVS.
  3. Оформление наших пользовательских модулей из нашего ртутного хранилища.
  4. Скопируйте / переместите все модули в соответствующий каталог в Drupal.
  5. Оформить заказ и установить нашу пользовательскую тему.
  6. Добавление пользовательского профиля установки drupal.
  7. Создание новой схемы базы данных MySQL.
  8. Если возможно, автоматизируйте настройку соединения с drupal db.

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

Почему Мейвен? (почему не муравей или Phing ?)

Кроме желания узнать что-то новое (я раньше использовал Ant), я думаю, что управление зависимостями в Maven может хорошо работать для модулей drupal.

Считаете ли вы, что это достаточная причина для использования Maven, хотя Maven изначально не предназначался для проектов PHP? Я знаю, что Ant тоже изначально не использовался для PHP, но есть гораздо больше примеров людей, использующих Ant и PHP вместе.

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

Что у меня до сих пор?

У меня есть файл pom.xml, который использует плагин SCM для извлечения исходного кода drupal. Когда я бегу:

mvn scm:checkout

источник извлечен в новый каталог:

target/checkout

Когда я пытаюсь:

mvn scm:bootstrap

жалуется на то, что цель установки не определена.

Вот pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                      http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example</groupId>
  <artifactId>drupal</artifactId>
  <version>1.0</version>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-scm-plugin</artifactId>
          <version>1.1</version>
          <configuration>
            <username>anonymous</username>
            <password>anonymous</password>
          </configuration>
      </plugin>
    </plugins>
  </build>
  <scm>
    <connection>scm:cvs:pserver:cvs.drupal.org:/cvs/drupal:drupal</connection>
    <developerConnection>scm:cvs:pserver:cvs.drupal.org:/cvs/drupal:drupal</developerConnection>
    <tag>DRUPAL-6-12</tag>
    <url>http://cvs.drupal.org/viewvc.py/drupal/drupal/?pathrev=DRUPAL-6</url>
  </scm>
</project>

Наконец, какие у меня вопросы?

  • Является ли Maven неправильным инструментом для этого?

Если нет,

  • Как бы вы это сделали?
  • Это scm:bootstrap цель, которую я должен использовать?
  • Как Maven перемещает каталоги в файловой системе?
  • Следует ли использовать цель install для перемещения модулей в каталог drupal?
  • В настоящее время все наши пользовательские модули находятся в одном хранилище Mercurial. Можно ли создать pom.xml и оформить каждый модуль отдельно?
  • Буду признателен за любой общий совет.

Спасибо за ваше время!

Ответы [ 5 ]

5 голосов
/ 12 мая 2010

Я на 98% уверен, что вам действительно нужно Drush Make , которая может рекурсивно создавать проекты Drupal, если они предоставляют собственный файл .make со списком своих зависимостей. Он может загружать файлы из нескольких SCM, веб-сайтов, файлов исправлений, и вы можете контролировать, где они будут загружены. Он также поддерживает внешние библиотеки, такие как wysiwyg, файлы PHP или библиотеки JS.

См. Файл Open Atrium make для примера того, что он может сделать.

4 голосов
/ 10 июня 2009

Определенно, вы не используете Maven, вот некоторые мысли:

  • Maven - это инструмент сборки Java и программное обеспечение для управления зависимостями с четко определенным жизненным циклом, который выглядит следующим образом: проверка, компиляция, тестирование, пакетирование, интеграция-тестирование, проверка, установка, развертывание. То, что вы используете, это плагин scm, который может придерживаться к любой из фаз, определенных здесь, и выполнять некоторые действия, но если вы не вносите сложные изменения в POM (я не слышал, чтобы кто-то делал это) жизненный цикл будет продолжаться.
  • Maven также предназначен для упаковки JAR, WAR и с использованием некоторых плагинов EAR, SAR, RAR (не , что RAR) и некоторых других файлов; вам, возможно, придется запрограммировать новый плагин, чтобы получить ожидаемый тип пакетов, или использовать плагин assembly , который усложнит ситуацию.

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

После прочтения того, что вы хотите сделать со своим проектом, я бы предложил вам создать сценарий (сценарий оболочки или пакетный сценарий в зависимости от вашей ОС) для выполнения этой работы. SVN и CVS имеют инструменты командной строки, которые могут быть вызваны из ваших скриптов сборки. Я полагаю, что вы выбрали Maven, в числе прочих причин, потому что Hudson и многие другие программы Continuous Integration хорошо интегрированы с ним, но вы можете использовать их и со скриптами.

Если вам удобно использовать Ant и вы планируете использовать его, это сократит время сборки вашего приложения, я думаю, что это не так плохо;) (Я не использовал Ant для других целей, кроме проектов Java)

2 голосов
/ 12 ноября 2011

Проект http://www.php -maven.org know поставляется с плагином сборки, позволяющим php-миру maven (или миру maven для php-проектов). Снимок версии 2 можно найти в наших группах Google (новостная лента доступна по адресу https://groups.google.com/group/maven-for-php/t/e055e49c89ccb8c5?hl=de).

Однако это дает вам полный контроль над проектом и учитывает жизненный цикл maven по умолчанию, поэтому команды maven:

  • mvn clean
  • мвн пакет
  • mvn deploy
  • мвн сайт

будет работать правильно.

Поддержка Drupal может быть включена в версии 2.1, где мы ориентируемся на фреймворки (zend, flow3 ...) и типы проектов (web, cli, libs ...). Было бы очень важно выяснить, что такое Maven и как она может помочь вам при разработке php. Как сказал Вистор Хьюго в своем раннем комментарии, преимущества Mavens состоят не только в том, чтобы выполнить определенную команду вручную, но и встраивать всю структуру проекта и весь жизненный цикл проекта через maven. Так как большинство php ребят еще не общались с java и особенно с maven, мы создаем учебные пособия, чтобы у каждого был довольно простой вход в мир maven.

2 голосов
/ 10 июня 2009

Drush 'module' - отличный инструмент для написания сценариев в Drupal. Но, помимо этого, я думаю, что ваш подход к проверке CVS для каждой «сборки» немного отстает - если только у вас нет действительно веских причин для размещения каждого куска проекта в отдельном репозитории, лучше всего иметь исправлены проверки ядра Drupal и добавленных модулей, привязанных к репозиторию вашего проекта. Это не только устраняет зависимость от сетевого подключения и стабильности внешнего сервера, но и позволяет вам вносить локальные изменения в предоставленные модули (к сожалению, вы, вероятно, в конечном итоге будете делать это где-то в будущем).

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

1 голос
/ 29 сентября 2011

Я люблю Maven, хотя я думаю, что это очень специфично для Java, как упомянуто выше.

Мне удалось обработать повторяемое задание с помощью phing. Я использовал в проекте Zend для подготовки сборки или просто закрепить обычные повторяемые задачи (например, очистка базы данных, загрузка дампа базы данных).

Phing не предоставит вам полное управление жизненным циклом, как Maven, но вы можете написать самостоятельно. Вы можете встроить команды сценария оболочки в build.xml, чтобы вы могли использовать все, что вы использовали бы в обычном сценарии оболочки. Я предпочитаю phing, а не обычный сценарий оболочки, потому что он может обрабатывать зависимые цели, поэтому, если ваш build.xml содержит хорошо спроектированные цели, которые зависят друг от друга, вы получите очень полезные цепочки для достижения указанных целей.

У меня это работает.

Еще один замечательный инструмент для drupal - это drush, который позволяет администрировать drupal. Вы можете сделать множество вещей, специфичных для друпалов, из консоли. Я думаю, что вы можете вызывать команды drush из phing-скриптов.

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