【问题标题】:How to FTP a file from an Android Gradle build?如何从 Android Gradle 构建 FTP 文件?
【发布时间】:2013-06-16 14:41:04
【问题描述】:

我正在尝试在 Gradle 构建后对已签名的 APK 进行 FTP 传输。我已经添加了将签署 APK 的新构建配置,但我一直在试图弄清楚如何调用 FTP 任务。

我在section 59.6 找到了一个官方的样本,但是它抱怨它无法解析依赖关系 org.apache.ant:ant-commons-net:1.8.4。所以显然我在这里遗漏了一些明显的东西,比如在哪里放置给定的 jar 文件或引用它,尽管我认为 maven 会处理这种事情?

作为参考,这里是链接示例,它失败并显示有关依赖项的消息:

configurations {
    ftpAntTask
}

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"
        }
    }
}

task ftp << {
    ant {
        taskdef(name: 'ftp',
                classname: 'org.apache.tools.ant.taskdefs.optional.net.FTP',
                classpath: configurations.ftpAntTask.asPath)
        ftp(server: "ftp.apache.org", userid: "anonymous", password: "me@myorg.com") {
            fileset(dir: "htdocs/manual")
        }
    }
}

失败并显示以下消息:

> Could not find org.apache.ant:ant-commons-net:1.8.4.

这是我完整的 gradle.build 文件,删除了一些敏感信息:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}

apply plugin: 'android'

dependencies {
    compile files('libs/android-support-v4.jar')
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 17
    }

    signingConfigs {
        signed {
            storeFile file("(removed)")
            storePassword "(removed)"
            keyAlias "(removed)"
            keyPassword "(removed)"
        }
     }

    buildTypes {
        signed {
            debuggable false
            jniDebugBuild false
            signingConfig signingConfigs.signed
        }
    }
}

configurations {
    ftpAntTask
}

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"
        }
    }
}

task ftp << {
    ant {
        taskdef(name: 'ftp',
                classname: 'org.apache.tools.ant.taskdefs.optional.net.FTP',
                classpath: configurations.ftpAntTask.asPath)
        ftp(server: "(removed)", userid: "(removed)", password: "(removed)", remoteDir: "(removed)") {
            fileset(dir: "(removed)") {
                include(name: "(removed)")
            }
        }
    }
}

【问题讨论】:

    标签: android ftp gradle


    【解决方案1】:

    您尚未声明可用于解析已声明工件的存储库。尝试将以下 sn-p 添加到您的 build.gradle 文件中:

    repositories{
        mavenCentral()
    }
    

    干杯,

    勒内

    【讨论】:

    • 谢谢,但是,我的构建文件中有这个。我更新了我的问题。
    • 不,您刚刚为您的 gradle 插件声明了一个存储库(buildscript 部分中的存储库块)您需要另一个顶层的存储库,就像我在我的 sn-p 中所做的那样。有计划在未来更容易应用插件并使其更容易。
    【解决方案2】:

    您也可以使用支持 FTP 的原生 ant get 任务,无需外部依赖:

      ant {
        get(src: "ftp://<hostname>/remote/path/to/file.jar", dest: "/local/path/to/file", username: 'anonymous', password: 'anonymous')
      }
    

    【讨论】:

    • 反方向有类似的方法吗?我想上传一个文件到一个 ftp 服务器...
    • @Rosso 当然只使用 ant { put(...) } 而不是 get
    猜你喜欢
    • 2017-06-13
    • 1970-01-01
    • 2020-04-09
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 2019-02-18
    相关资源
    最近更新 更多