vasdek-purchart / phing-copy-files-task

比默认的Phing CopyTask提供更好的文件复制控制

2.0 2018-12-31 11:40 UTC

README

比默认的Phing CopyTask提供更好的文件复制控制。

默认任务的主要缺点是它忽略了overwrite="false"设置(这也是默认设置),如果源文件较新,则总是重写目标文件(见phingofficial/phing#538)。这种行为是不可预料的,尤其是在复制配置文件等情况下,可能会非常危险。

CopyFilesTask具有更窄的使用场景,但提供了对复制文件的更多控制。它只与文件(而不是目录或文件集)一起工作,您可以指定每个文件的确切复制方式以及当目标已存在时应该做什么。

用法

要复制文件,您可以简单地写出

<target name="copy-configs">
	<copy-files>
		<file source="parameters.local.yml.dist" target="parameters.local.yml"/>
	</copy-files>
</target>

路径相对于构建文件的位置。如果您想使用绝对路径,可以使用${project.basedir}来写出路径,它包含构建文件的位置。

您还可以在单个任务定义中复制多个文件

<target name="copy-configs">
	<copy-files>
		<file source="parameters.local.yml.dist" target="parameters.local.yml"/>
		<file source="${environment}/parameters.yml" target="parameters.yml"/>
	</copy-files>
</target>

目标文件存在模式

如果目标文件已存在,有三种方式可以选择如何处理这种情况

  1. skip(默认)- 跳过文件复制(并记录到输出)
  2. replace - 总是替换目标文件,即使它已存在
  3. fail - 不覆盖目标文件并失败构建

您可以使用<copy-files>上的existsmode参数一次性为所有文件设置模式

<target name="copy-configs">
	<copy-files existsmode="skip">
		<file source="parameters.local.yml.dist" target="parameters.local.yml"/>
		<file source="${environment}/parameters.yml" target="parameters.yml"/>
	</copy-files>
</target>

也可以为每个<file>设置,这意味着它将覆盖<copy-files>设置

<target name="copy-configs">
	<copy-files existsmode="skip">
		<file source="parameters.local.yml.dist" target="parameters.local.yml"/>
		<file source="${environment}/parameters.yml" target="parameters.yml" existsmode="replace"/>
	</copy-files>
</target>

安装

  1. 使用Composer安装包 vasek-purchart/phing-copy-files-task
composer require vasek-purchart/phing-copy-files-task
  1. 注册此任务为您选择的名称。

有几种方法可以注册任务,请参阅TaskDefTask文档。推荐的方法是将以下内容放入您的build.xml

<taskdef name="copy-files" classname="VasekPurchart\Phing\CopyFiles\CopyFilesTask"/>

如果您愿意,可以为命令选择任何其他名称。