【问题标题】:Using Maven to setup a Drupal PHP project使用 Maven 设置 Drupal PHP 项目
【发布时间】:2010-11-01 17:41:37
【问题描述】:

我想达到什么目的?

我们目前正在开发一个使用 Drupal 的 PHP 项目。

我非常想学习如何为整个项目创建一个One-step build。 最好使用一些新的(对我来说)看起来非常强大的东西:Maven

基本上我想自动化以下过程:

  1. 从官方CVS repository签出 Drupal。
  2. 从各自的 CVS 存储库中签出官方的第 3 方模块。
  3. 从我们的 mercurial 存储库中签出我们的自定义模块。
  4. 将所有模块复制/移动到 Drupal 中的相应目录。
  5. 结帐并安装我们的自定义主题。
  6. 添加自定义 drupal 安装配置文件。
  7. 创建一个新的 MySQL 数据库架构。
  8. 如果可能,请自动设置 drupal 数据库连接。

将来我想在 Hudson(或任何其他)继续集成服务器上运行此构建。

为什么选择 Maven? (为什么不是 Ant 或 Phing?)

除了想要学习新东西(我以前用过 Ant)之外,我认为 Maven 的依赖管理可能适用于 drupal 模块。

您是否认为这是使用 Maven 的充分理由,即使 Maven 最初并非用于 PHP 项目?我知道 Ant 最初也不是用于 PHP,但是还有更多的人同时使用 Ant 和 PHP 的例子。

顺便说一句,如果我不能让 Maven 尽快工作,我想我会切换到 Ant。 Ant的程序风格对我来说更容易理解。

到目前为止我有什么?

我有一个使用 SCM 插件的 pom.xml 文件来检查 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 并单独签出每个模块?
  • 如有任何一般性建议,我们将不胜感激。

感谢您的宝贵时间!

【问题讨论】:

    标签: drupal build maven-2 build-automation drupal-distributions


    【解决方案1】:

    我 98% 确定您真正需要的是 Drush Make,它可以递归地构建 Drupal 项目,前提是它们提供自己的 .make 文件列出其依赖项。它可以从多个 SCM、Web、补丁文件下载,并且您可以控制它们的下载位置。它还支持外部库,例如所见即所得、PHP 文件或 JS 库。

    查看Open Atrium make 文件,了解它的功能示例。

    【讨论】:

    • drush make 会做你需要的一切。并且由于安装配置文件,您也可以使用“drush make install”。
    【解决方案2】:

    你肯定没有使用 Maven,这里有一些想法:

    • Maven 是一个 Java 构建工具和依赖管理软件,具有明确定义的生命周期,如下所示:验证、编译、测试、打包、集成测试、验证、安装、部署。您使用的是 scm 插件,它可以坚持到此处定义的任何阶段并执行一些操作,但除非您在 POM 中进行复杂的更改(我还没有听说有人这样做)生命周期将继续执行。
    • Maven 还被设计用于打包 JAR、WAR 以及使用一些插件 EAR、SAR、RAR(不是那个 RAR)和一些其他文件;您可能必须编写一个新插件来获得您期望的包类型或使用 assembly 插件,这会使事情变得更加复杂。

    由于前面几点,Maven 没有命令将文件移动到特定目录(不是本机目录),并且您不应调用安装阶段将文件复制到本地存储库以外的任何其他位置。你所做的就像把洗衣机变成搅拌机

    在阅读了您想对项目执行的操作后,我建议您创建一个脚本(shell 脚本或批处理脚本,具体取决于您的操作系统)来完成这项工作。 SVN 和 CVS 具有命令行工具,可以从构建脚本内部调用。我猜你选择 Maven 的原因之一是,因为 Hudson 和许多其他持续集成软件都很好地集成了它,但你也可以将它们与脚本一起使用。

    如果您习惯使用 Ant 并且您考虑使用它会缩短应用程序的构建时间,我认为这还不错;)(除了 Java 项目,我没有将 Ant 用于其他目的)

    【讨论】:

    • 感谢 Victor 富有洞察力的回答。除其他原因外,我确实确实选择了 Maven 来进行 Hudson 集成。另一个原因是我希望尽快从事 Java 项目,我肯定会想使用 Maven。显然,我会回到绘图板上考虑您的观点。再次感谢您的帮助!
    • 没问题,我很高兴这对你有帮助;)
    • 虽然 Maven 最适合 Java,但不一定只适用于 Java。像 Drupal 或 Magento 这样的系统(它们甚至没有 drush 好用的东西)可以从项目和生命周期模型中受益匪浅。当我使用 PHP 开发时,我非常想念 Maven。
    【解决方案3】:

    Drush 'module' 是在 Drupal 中编写脚本的好工具。但是,除此之外,我认为您为每个“构建”进行 CVS 签出的方法有点偏离基础 - 除非您有 - 非常好的理由将项目的每一块都放在单独的存储库中,否则最好的选择是修复了提交到项目存储库的 Drupal 核心和贡献模块的签出。这不仅消除了对网络连接和外部服务器稳定性的依赖,而且还允许您对贡献的模块进行本地修改(不幸的是,您可能最终会在某个地方这样做)。

    一旦您取消了从多个存储库进行签出的要求,您可能会注意到您的任务变得 - 更容易,只剩下一些简单的 MySQL 操作并写出 settings.php。

    【讨论】:

      【解决方案4】:

      http://www.php-maven.orgknow 项目附带一个构建插件,使 php 世界能够进入 maven(或 php 项目的 maven 世界)。版本 2 快照可以在我们的 google 群组中找到(新闻线程位于 https://groups.google.com/group/maven-for-php/t/e055e49c89ccb8c5?hl=de)。

      但是,这使您可以完全控制项目并尊重默认的 maven 生命周期,以便 maven 命令:

      • mvn clean
      • mvn 包
      • mvn 部署
      • mvn 网站

      会正常工作。

      Drupal 支持可能在 2.1 版本中启用,我们专注于框架(zend、flow3...)和项目类型(web、cli、libs...)。弄清楚 maven 是什么以及它如何在 php 开发过程中为您提供帮助将是非常重要的。正如 Vistor Hugo 在他早期的评论中所说,Maven 的好处不仅在于手动执行特定命令,还在于通过 Maven 嵌入整个项目结构和整个项目生命周期。 由于大多数 php 人还没有接触过 java,尤其是 maven,因此我们正在创建教程,以便每个人都能在 maven 世界中获得相当简单的入门。

      【讨论】:

        【解决方案5】:

        我喜欢 maven,虽然我认为上面提到的它是非常特定于 java 的。

        我成功地用 phing 处理了可重复的任务。我在 Zend 项目中用于准备构建或只是固定正常的可重复任务(例如清理数据库、加载数据库转储)。

        Phing 不会像 maven 那样为您提供完整的生命周期管理,但您可以自己手写。您可以将 shell 脚本命令嵌入到 build.xml 中,这样您就可以使用在普通 shell 脚本中使用的所有内容。 我更喜欢 phing 而不是普通的 shell 脚本,因为它可以处理依赖的目标,所以如果你的 build.xml 包含设计良好的相互依赖的目标,你将获得非常有用的链来实现指定的目标。

        它对我有用。

        drupal 的另一个出色工具是 drush,它使 drupal 管理可编写脚本。您可以从控制台执行许多特定于 drupal 的事情。我认为您可以从 phing 脚本中调用 drush 命令。

        【讨论】:

          猜你喜欢
          • 2019-01-03
          • 2013-10-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-16
          • 2013-09-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多