FixCRLF

描述

调整文本文件以符合本地约定。

可以使用 includesincludesfileexcludesexcludesfiledefaultexcludes 属性来细化要调整的文件集。通过 includesincludesfile 属性提供的模式指定要包含的文件。通过 excludeexcludesfile 属性提供的模式指定要排除的文件。此外,可以使用 defaultexcludes 属性指定默认排除项。有关文件包含/排除模式及其用法的详细信息,请参阅有关 基于目录的任务 的部分。

此任务形成一个隐式的 FileSet,并支持大多数 <fileset> 的属性(dir 变为 srcdir),以及嵌套的 <include><exclude><patternset> 元素。

只有在输出文件是新文件或与现有文件不同时才会写入输出文件。这可以防止基于未更改的文件(这些文件已由此任务重新生成)的虚假重建。为了评估文件是否已更改,此任务将在 临时目录 中创建源文件的预处理版本。

从 Apache Ant 1.7 开始,此任务可以在 filterchain 中使用。

参数

属性 描述 必需
作为任务 作为过滤器
srcDir 查找要修复的文件的位置。 以下选项之一 N/A
file 要修复的单个文件的文件名。从 Ant 1.7 开始
destDir 放置更正后的文件的位置。 否;默认为 srcDir(替换原始文件)
includes 必须包含的文件模式的逗号或空格分隔列表。 否;默认为全部(**
includesfile 文件名称。此文件的每一行都被视为包含模式。
excludes 必须排除的文件模式的逗号或空格分隔列表。 否;默认为默认排除项,如果 defaultexcludesno,则为无
excludesfile 文件名称。此文件的每一行都被视为排除模式。
defaultexcludes 指示是否应使用默认排除项 (yes|no)。 否;默认为 yes
encoding 文件的编码。 否;默认为默认 JVM 字符编码
outputencoding 写入文件时使用的编码。从 Ant 1.7 开始 否;如果设置了 encoding,则默认为 encoding,否则默认为默认 JVM 字符编码
preservelastmodified 是否保留源文件的最后修改日期。从 Ant 1.6.3 开始 否;默认为 false
eol 指定如何处理行尾 (EOL) 字符。EOL 字符是 CR、LF 和 CRLF 对。此属性的有效值为
  • asis:保留 EOL 字符不变
  • cr:将所有 EOL 转换为单个 CR
  • lf:将所有 EOL 转换为单个 LF
  • crlf:将所有 EOL 转换为 CRLF 对
  • mac:将所有 EOL 转换为单个 CR
  • unix:将所有 EOL 转换为单个 LF
  • dos:将所有 EOL 转换为 CRLF 对

这是指定 EOL 的首选方法。现在不推荐使用 cr 属性(见下文)。

注意:识别一个特殊情况。三个字符 CR-CR-LF 被视为单个 EOL。除非此属性指定为 asis,否则此序列将转换为指定的 EOL 类型。

否;默认为平台特定:对于 Unix 平台(包括 Mac OS X/macOS),默认为 lf;对于基于 DOS 的系统(包括 Windows),默认为 crlf;对于除 OS X 之外的 Mac 环境,默认为 cr
cr 已弃用。指定如何处理行尾 (EOL) 处的 CR 字符。此属性的有效值为
  • asis:保留 EOL 字符不变。
  • add:在任何单个 LF 字符之前添加 CR。目的是将所有 EOL 转换为 CRLF 对。
  • remove:从文件中删除所有 CR。目的是将所有 EOL 转换为单个 LF。

注意:识别一个特殊情况。三个字符 CR-CR-LF 被视为单个 EOL。除非此属性指定为 asis,否则此序列将转换为指定的 EOL 类型。

否;默认为平台特定:对于 Unix 平台,默认为 remove;对于基于 DOS 的系统(包括 Windows),默认为 add
javafiles 仅与 tab 属性(见下文)一起使用,此布尔属性指示文件集是否是一组 Java 源文件 (yes|no)。有关详细信息,请参阅有关 tab 的部分。 否;默认为 no
tab 指定如何处理制表符。此属性的有效值为
  • add:将跨越制表位的空格序列转换为制表符
  • asis:保留制表符和空格字符不变
  • remove:将制表符转换为空格

注意:当属性 javafiles(见上文)为 true 时,出现在 Java 字符串或字符常量中的文字 TAB 字符永远不会被修改。此功能还需要识别 Java 风格的注释。

注意:此版本与先前版本在处理行尾空白方面存在不兼容性。此版本不会删除行尾的空白。

否;默认为 asis
tablength TAB 字符间隔。有效值为 280(含)。 否;默认为 8
eof 指定如何处理 DOS 文件结束符 (control-Z) 字符。此属性的有效值为
  • add:确保文件末尾有一个 EOF 字符
  • asis:保留 EOF 字符不变
  • remove:删除在末尾找到的任何 EOF 字符
否;默认为平台特定:对于 Unix 平台,默认为 remove;对于基于 DOS 的系统(包括 Windows),默认为 asis
fixlast 是否在处理后的文件的最后一行添加缺失的 EOL。
如果 eofasis,则忽略。
从 Ant 1.6.1 开始
否;默认为 true

示例

用 LF 字符替换 EOL,并从 shell 脚本中删除 EOF 字符。制表符和空格保持原样。

<fixcrlf srcdir="${src}" includes="**/*.sh"
         eol="lf" eof="remove"/>

在批处理文件中用 cr-lf 对替换所有 EOL。制表符和空格保持原样。如果在 DOS 系统上运行,则 EOF 字符保持原样,如果在 Unix 系统上运行,则删除 EOF 字符。

<fixcrlf srcdir="${src}"
         includes="**/*.bat" eol="crlf"/>

根据本地操作系统约定设置 EOL,并将空格和制表符的序列转换为将保留行内间距的最小空格和制表符集。制表符设置为 8 个字符间隔。如果在 DOS 系统上运行,则 EOF 字符保持原样,如果在 Unix 系统上运行,则删除 EOF 字符。许多版本的 make 需要命令之前的制表符。

<fixcrlf srcdir="${src}"
         includes="**/Makefile" tab="add"/>

将包含的 Java 源文件中的所有 EOL 转换为单个 LF。用空格替换所有制表符(字符串或字符常量中的制表符除外),假设制表符宽度为 3。如果在 Unix 系统上运行,则删除文件末尾的任何 CTRL-Z EOF 字符。在 DOS/Windows 上,任何此类 EOF 字符将保持不变。

<fixcrlf srcdir="${src}" includes="**/*.java"
         tab="remove" tablength="3"
         eol="lf" javafiles="yes"/>

根据本地操作系统约定设置 EOL,并将所有制表符转换为空格,假设制表符宽度为 8。如果在 DOS 系统上运行,则 EOF 字符保持原样,如果在 Unix 系统上运行,则删除 EOF 字符。您永远不知道用户将使用哪个编辑器来浏览 README。

<fixcrlf srcdir="${src}"
         includes="**/README*" tab="remove"/>