8

我想达到什么目标?

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

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

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

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

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

为什么是马文?(为什么不是 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 并单独签出每个模块?
  • 任何一般性建议将不胜感激。

谢谢你的时间!

4

5 回答 5

5

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

请参阅Open Atrium make 文件了解它的功能示例。

于 2010-05-11T21:14:19.317 回答
4

绝对你没有使用 Maven,这里有一些想法:

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

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

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

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

于 2009-06-10T08:37:08.733 回答
2

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

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

  • mvn 清洁
  • mvn包
  • mvn 部署
  • mvn网站

将正常工作。

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

于 2011-11-12T13:05:09.713 回答
2

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

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

于 2009-06-10T18:10:09.903 回答
1

我喜欢 maven,尽管我认为它是上面提到的 Java 特有的。

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

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

这个对我有用。

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

于 2011-09-29T14:21:13.453 回答