如何在ANT目标中指定的FTP密码中转义实体

时间:2012-09-19 16:03:59

标签: ant ftp

我试图通过ANT将文件FTP到服务器,其中密码包含&符号(&) 以下ANT目标:

<target name="upload_zip">
    <ftp server="myhost.net"
         userid="myusername"
         password="topsecret&amp;"
         port="21"
         remotedir="/public_html"
         passive="yes"
         binary="yes">
        <fileset dir=".">
            <include name="${updatefile}"   />
        </fileset>
    </ftp>
</target>

收到此消息失败:

error during FTP transfer:  java.net.SocketException: Permission denied: recv failed  
   at java.net.SocketInputStream.socketRead0(Native Method) 
   at java.net.SocketInputStream.read(SocketInputStream.java:150)  
   at ... // really long stack trace

看起来认证并不成功。如果我没有逃脱&符号,那么我的构建文件就不能很好地形成了。我是否正确地逃避了&符号或做错了什么?

1 个答案:

答案 0 :(得分:1)

我认为你使用的方法没有明显的问题 - 实体应该正确翻译。

要诊断自动ftp,最好先手动尝试类似(或相同!)的传输。通常,这将揭示目标文件系统中连接凭据或权限的任何外部问题。

如果手动传输有效,那么下一步就是“发现手动传输与Ant驱动传输之间的差异”。

ftp问题的堆栈跟踪可能表示存在连接前问题 - 一旦建立连接,您将看到FTP错误消息,例如:

  • 无法登录FTP服务器

这可能表示登录密码组合存在问题。

如果服务器关闭,您将获得类似以下内容的跟踪:

  • java.net.ConnectException:拒绝连接

在您的情况下,似乎是中间代理的问题。对于未来的读者,this resource可能有助于通过防火墙问题诊断被动ftp。

尽管如此,在详细(-v)或诊断(-diagnostics)模式下运行Ant以查看Ant所做的内部结构也可能提供线索。