Gradle ant ftp error: "425 Connection timed out"

Gradle ant ftp error: "425 Connection timed out"

我的 gradle 构建脚本有问题:

apply plugin: 'java'

/*
 * Sources:
 * 
 * https://github.com/Vazkii/Botania/blob/master/build.gradle
 */

repositories {
    mavenCentral()
}

configurations {
    ftpAntTask
}

/*
 * Load configuration file.
 */
ext.priv = parseConfig(file('private.properties'))

/*
 * Some project properties
 */
version = '0.0.1'
group = 'randers.notenoughvocab'
archivesBaseName = 'NotEnoughVocab'

dependencies {
    ftpAntTask('org.apache.ant:ant-commons-net:1.8.4') {
        module('commons-net:commons-net:1.4.1') {
            dependencies 'oro:oro:2.0.8:jar'
        }
    }
}

void ftp(Map args, Closure antFileset = {}) {
    ant {
        taskdef(name: 'ftp',
                classname: 'org.apache.tools.ant.taskdefs.optional.net.FTP',
                classpath: configurations.ftpAntTask.asPath)
        Map ftpArgs = args + [ //some default options
                               verbose : 'yes',
                               server  : priv.host,
                               userid  : priv.user,
                               password: priv.pass
        ]
        delegate.ftp(ftpArgs) {
            antFileset.delegate = delegate
            antFileset()
        }
    }
}

def parseConfig(File config) {
    config.withReader {
        def prop = new Properties()
        prop.load(it)
        return (new ConfigSlurper().parse(prop))
    }
}

/**
 * Uploads the javadoc to the server specified in private.properties
 */
task('uploadJavadoc', dependsOn: 'javadoc') << {
    ftp(action: 'send') {
        fileset(dir: 'build/docs/javadoc')
    }
}

jar {
    manifest {
        attributes 'Main-Class': 'randers.notenoughvocab.main.NotEnoughVocab'
    }
}

task('prepareBuild') {
    ant.replace(file: 'src/main/java/randers/notenoughvocab/main/Reference.java', token: '@VERSION@', value: version)
}

build.dependsOn(tasks.prepareBuild)

我收到以下错误消息:

could not put file: 425 Could not open data connection to port 55080: Connection timed out

显然有效 for others。 我在 private.properties 中指定的服务器可以与 FTP 客户端(如 FileZilla)一起正常工作,我不会超时。我也用本地 FTP 服务器尝试过同样的方法,但由于传输没有带宽限制,传输是即时的。
我能做些什么来防止超时?我应该关注端口 55080 吗?

我之前也做了一些调试,确保 priv.hostpriv.userpriv.pass 变量包含正确的信息。

如果您从家用计算机启动程序时发生该错误,家用计算机通常经过 NAT 处理并且没有 public 可路由 IP,您可以尝试使用 FTP 被动模式。从 Ant task 文档中,您只需将 passive: 'yes' 添加到 ftpArgs.

FTP 是一个非常奇怪的协议:为了下载和上传文件,另一个连接被服务器打开到客户端,这通常会让家庭用户头疼,谁没有 public IP。简单的解决方案称为 "passive mode"