1

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

認証に失敗しているようです。アンパサンドをエスケープしないと、ビルド ファイルの形式が正しくありません。アンパサンドを正しくエスケープしていますか、それとも何か間違っていますか?

4

1 に答える 1

1

使用している方法に明らかな問題があるとは思いません。エンティティは正しく翻訳する必要があります。

自動化された ftp を診断するには、最初に同様の (または同一の!) 転送を手動で試すのがおそらく最善です。通常、これにより、接続資格情報またはターゲット ファイル システムのアクセス許可に関する外部の問題が明らかになります。

手動転送が機能する場合、次のステップは、手動転送と Ant 駆動の転送の「違いを見つける」ことです。

ftp の問題のスタック トレースは、接続前の問題を示している可能性があります。接続が確立されると、代わりに次のような FTP エラー メッセージが表示されます。

  • FTP サーバーにログインできませんでした

これは、ログインとパスワードの組み合わせに問題があることを示している可能性があります。

サーバーがダウンしている場合、次のようなトレースが表示されます。

  • java.net.ConnectException: 接続が拒否されました

あなたの場合、中間プロキシに問題があったようです。今後の読者のために、このリソースは、ファイアウォールの問題を介したパッシブ ftp の診断に役立つ可能性があります。

これらすべてに失敗した場合は、Ant を詳細 ( -v) または診断 ( -diagnostics) モードで実行して、Ant が行っていることの内部を確認することも手がかりになる可能性があります。

于 2012-09-25T20:25:40.483 に答える