50

httpを使用してインターネット上のどこかで利用可能ないくつかのデータファイルを必要とするgradleプロジェクトがあります。目標は、この不変のリモート ファイルが最初のビルド時に 1 回プルされることです。後続のビルドは再度ダウンロードしないでください。

指定されたファイルをローカルディレクトリにフェッチするようにgradleに指示するにはどうすればよいですか?

私はもう試した

task fetch(type:Copy) {
   from 'http://<myurl>'
   into 'data'
}

しかし、コピー タスク タイプは http を処理できないようです。

おまけの質問: 以前に中止または中断されたダウンロードを再開する方法はありwget -cますか?

4

7 に答える 7

32

これには、おそらくAnt タスクの Getを使用できます。この Ant タスクはダウンロードの再開をサポートしていないと思います。

そのために、 name のカスタム タスクを作成できますMyDownload。それは基本的に任意のクラス名にすることができます。このカスタム タスクは、タスクを実行する必要があるかどうかを決定する入力と出力を定義します。たとえば、ファイルが指定したディレクトリにすでにダウンロードされている場合、タスクは UP-TO-DATE とマークされます。Get内部的には、このカスタム タスクは組み込みの を介してAnt タスクを使用しAntBuilderます。

このカスタム タスクを配置すると、タイプMyDownload(カスタム タスク クラス) の新しい拡張タスクを作成できます。このタスクは、入力と出力のプロパティを設定します。dependsOnこのタスクを実行したい場合は、タスクの依存関係 (メソッド)を介して、通常実行するタスクにフックします。次のコード スニペットは、アイデアを与える必要があります。

task downloadSomething(type: MyDownload) {
    sourceUrl = 'http://www.someurl.com/my.zip'
    target = new File('data')
}

someOtherTask.dependsOn downloadSomething

class MyDownload extends DefaultTask {
    @Input
    String sourceUrl

    @OutputFile
    File target

    @TaskAction
    void download() {
       ant.get(src: sourceUrl, dest: target)
    }
}
于 2013-06-15T13:09:02.980 に答える
26

そのようにしてみてください:

plugins {
    id "de.undercouch.download" version "1.2"
}

apply plugin: 'java'
apply plugin: 'de.undercouch.download'

import de.undercouch.gradle.tasks.download.Download

task downloadFile(type: Download) {
    src 'http://localhost:8081/example/test-jar-test_1.jar'
    dest 'localDir'
}

ここで詳細を確認できます: https://github.com/michel-kraemer/gradle-download-task

私にとってはうまくいきます..

于 2015-05-13T11:08:32.433 に答える
4

Ben Manes のコメントの提案には、Maven 座標と Maven 依存関係の解決を利用できるという利点があります。たとえば、Derby jar をダウンロードするには、次のようにします。

新しい構成を定義します。

configurations {
  derby
}

依存関係セクションで、カスタム構成の行を追加します

dependencies {
  derby "org.apache.derby:derby:10.12.1.1"
}

次に、必要に応じて適切なファイルをプルダウンするタスクを追加できます (maven キャッシュを利用しながら)。

task deployDependencies() << {
   String derbyDir = "${some.dir}/derby"
   new File(derbyDir).mkdirs();
      configurations.derby.resolve().each { file ->
        //Copy the file to the desired location
        copy {
          from file 
          into derbyDir
          // Strip off version numbers
          rename '(.+)-[\\.0-9]+\\.(.+)', '$1.$2'
        }
      }
}

(これはhttps://jiraaya.wordpress.com/2014/06/05/download-non-jar-dependency-in-gradle/から学びました)。

于 2016-08-09T09:23:37.653 に答える
2

ちょうど今、gradle フォーラムの次のダウンロード タスクに関する投稿に出くわしました。
私には完璧な解決策のように見えます..公式のgradleリリースでは(まだ)利用できません

于 2013-09-30T10:57:28.433 に答える