`
arthurln
  • 浏览: 43051 次
社区版块
存档分类
最新评论

关于Ant的Copy Task

阅读更多
  一个配置文件是xml格式的,里边有中文字段,编码格式为UTF-8,在Unit Test里边跑没有问题,用ant发布到服务器上就出xml解析异常:Invalid byte 3 of 3-byte UTF-8 sequence。打开服务器上的文件,是乱码,根源是ant的Copy Task的问题。在Ant的文档(http://ant.apache.org/manual/CoreTasks/copy.html)中是如此记述的:

Important Encoding Note:  The reason that binary files when filtered get corrupted is that filtering involves reading in the file using a Reader class. This has an encoding specifing how files are encoded. There are a number of different types of encoding - UTF-8, UTF-16, Cp1252, ISO-8859-1, US-ASCII and (lots) others. On Windows the default character encoding is Cp1252, on Unix it is usually UTF-8. For both of these encoding there are illegal byte sequences (more in UTF-8 than for Cp1252).

How the Reader class deals with these illegal sequences is up to the implementation of the character decoder. The current Sun Java implemenation is to map them to legal characters. Previous Sun Java (1.3 and lower) threw a MalformedInputException. IBM Java 1.4 also thows this exception. It is the mapping of the characters that cause the corruption.

On Unix, where the default is normally UTF-8, this is a big problem, as it is easy to edit a file to contain non US Ascii characters from ISO-8859-1, for example the Danish oe character. When this is copied (with filtering) by Ant, the character get converted to a question mark (or some such thing).

There is not much that Ant can do. It cannot figure out which files are binary - a UTF-8 version of Korean will have lots of bytes with the top bit set. It is not informed about illegal character sequences by current Sun Java implementions.

One trick for filtering containing only US-ASCII is to use the ISO-8859-1 encoding. This does not seem to contain illegal character sequences, and the lower 7 bits are US-ASCII. Another trick is to change the LANG environment variable from something like "us.utf8" to "us".

在copy标签上加上encoding="UTF-8",问题解决了。
分享到:
评论

相关推荐

    替换文本文件中Ant表达式的Ant扩展任务

    <taskdef name="copy-with-replace" classpath="${basedir}/release/ant-task-ext.jar;${basedir}/lib/ant-1.9.1.jar;${basedir}/lib/commons-lang-2.6.jar" classname="kingspider.tools.ant.task....

    ant-deb-task.jar.zip

    "ant.license.txt"文件则提供了关于这个工具的许可信息,确保用户在符合开源协议的条件下正确使用该软件。在实际操作中,开发者会将这个JAR添加到Ant的类路径中,并通过"build.xml"配置文件调用相关任务来完成他们的...

    ant.jar下载

    org.apache.tools.ant.Task org.apache.tools.bzip2.CRC org.apache.tools.ant.Target org.apache.tools.ant.Project org.apache.tools.zip.ZipFile org.apache.tools.zip.ZipLong org.apache.tools.ant....

    org.apache.tools.*需要的ant.jar包

    - **任务(Task)**:Ant通过各种预定义的任务来完成构建过程,如`<javac>`用于编译Java源代码,`<jar>`用于打包JAR,`<copy>`用于复制文件等。 - **属性(Property)**:Ant允许定义属性来存储可配置的值,这些值...

    Ant & SVN task script

    ### 关于Ant与SVN任务脚本的知识点 #### 一、引言 在软件开发过程中,版本控制是一项至关重要的技术。它不仅帮助团队管理代码变更,还支持并行开发,确保不同开发者能够同时在同一个项目上工作而不会发生冲突。...

    Ant简介-----关于ant使用的简单教程

    Task是Ant中最基本的操作单元,执行具体的构建动作,如编译Java源代码、拷贝文件、创建目录等。Task可以通过Target中的嵌套元素来定义,并且可以带有各种属性来定制其行为。 - copy任务:用于文件或文件夹的复制...

    关于ant简介及 配置

    Ant 的任务(Task)是其功能的基础,它们负责执行具体的构建操作。Ant 内置了许多任务,例如`<javac>`用于编译Java源码,`<jar>`用于打包成JAR文件,`<delete>`用于删除文件或目录,而`<copy>`如上所述,用于文件...

    ant脚本资料ant

    - **任务(Task)**:是Ant的基本工作单元,比如编译源代码、复制文件、运行测试等,每个任务都有其特定的用途和属性。 2. **Ant脚本编写** - **XML结构**:Ant脚本以XML格式编写,遵循特定的命名空间和元素结构...

    ant 1.10.3 源码和bin

    这些任务可以是内置的,如编译Java代码(javac task)、复制文件(copy task)或运行测试(junit task),也可以是用户自定义的任务。Ant的XML配置文件,通常命名为build.xml,定义了整个构建过程的步骤和依赖关系。...

    ant工具和ant教程

    Ant的构建文件是基于XML的,其基本结构包括项目(project)、目标(target)和任务(task)。项目元素定义了整个构建的根,通常包括版本信息和属性(property)定义。属性可以在整个构建文件中引用,允许动态配置。...

    Ant入门-ant入门pdf

    Ant的核心概念是基于任务(task)的,这些任务可以是编译源代码、打包、测试、部署等任何构建过程中的步骤。在《Ant入门》这本书中,读者会了解到如何设置Ant环境,包括下载和安装Ant,以及配置环境变量。 书中的内容...

    关于ANT脚本中使用macrodef

    它的核心概念是任务(Task),这些任务通过XML元素来定义,并由Ant引擎执行。 在Ant脚本中,`<macrodef>`元素用于定义一个宏,它封装了一段可重用的任务逻辑。例如,在描述中的`copydir`宏可能用于复制一个目录及其...

    ant介绍Ant是什么

    除了内置任务,开发者可以通过实现 `Task` 接口创建自己的任务,这使得 Ant 能够处理几乎任何类型的构建需求。XML 配置文件的结构清晰,使得多人协作变得容易,也方便自动化工具的集成。 总之,Ant 是 Java 开发中...

    ant 中文手册2.0

    在Ant中,XML标签用于定义这些任务,比如`<javac>`用于编译Java源代码,`<jar>`用于创建JAR文件,`<copy>`用于文件复制,以及`<mkdir>`用于创建目录等。 在Ant中,属性(property)用于存储可配置的值,可以通过...

    Ant参考教程,Ant使用指南,Ant全攻略

    任务(task)是Ant中最基本的工作单元,例如`javac`用于编译Java源码,`copy`用于复制文件,`jar`用于创建JAR文件等。 "ant+初步.doc"可能会涵盖Ant的安装、环境配置以及第一个简单的构建文件的创建。一个基本的...

    Ant权威指南(ant 学习)

    一个基本的Ant脚本包含项目(Project)、目标(Target)和任务(Task)元素。项目定义了整个构建的上下文,目标是一系列任务的集合,任务则是实际执行的动作。 四、Ant的依赖关系 在Ant中,目标之间可以设置依赖...

    apache ANT 源代码

    Ant内置了许多任务,如`javac`用于编译Java源码,`jar`用于创建JAR文件,`copy`用于复制文件等。同时,用户也可以自定义任务来扩展Ant的功能。 3. **Property**:属性是Ant中用来存储值的变量,它们可以在整个构建...

    Ant使用详细介绍(中文版)

    这取决于 Ant 的任务(Task),Ant 有哪些任务,就能完成哪些工作! Ant 的基本概念 Ant 的运行,靠的是一个构建脚本,默认的名称叫 build.xml,如果你在任何目录下运行 ant 命令,Ant 将自动查找当前目录下有没有 ...

    ant文档集合(自己学习ant时的资料)

    这个压缩包文件集合提供了一系列关于Ant的学习资料,对于初学者来说是非常宝贵的资源。以下将详细阐述Ant的相关知识点。 1. **Ant简介** Ant是一个基于Java的构建工具,它的设计目标是简化Java项目构建过程,通过...

Global site tag (gtag.js) - Google Analytics