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.host
、priv.user
和 priv.pass
变量包含正确的信息。
如果您从家用计算机启动程序时发生该错误,家用计算机通常经过 NAT 处理并且没有 public 可路由 IP,您可以尝试使用 FTP 被动模式。从 Ant task 文档中,您只需将 passive: 'yes'
添加到 ftpArgs
.
FTP 是一个非常奇怪的协议:为了下载和上传文件,另一个连接被服务器打开到客户端,这通常会让家庭用户头疼,谁没有 public IP。简单的解决方案称为 "passive mode"
我的 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.host
、priv.user
和 priv.pass
变量包含正确的信息。
如果您从家用计算机启动程序时发生该错误,家用计算机通常经过 NAT 处理并且没有 public 可路由 IP,您可以尝试使用 FTP 被动模式。从 Ant task 文档中,您只需将 passive: 'yes'
添加到 ftpArgs
.
FTP 是一个非常奇怪的协议:为了下载和上传文件,另一个连接被服务器打开到客户端,这通常会让家庭用户头疼,谁没有 public IP。简单的解决方案称为 "passive mode"