2

私はgradleでzipを使用しようとしていますが、これを「webserver」プロジェクトのセクションに追加するまで、ビルドは正常に機能していました(おそらく、私の質問は、その前にタスクがなくてもコピーが機能するのはなぜですか?????. ..zipの前にタスクが必要で、下にコピーが必要ない場合、copyとzipの違いに本当に混乱しています)

assemble << {
    zip {
       from '.'
       includes ['app/*','conf/*','public/*','play-1.2.4/*','run*.sh']
    }
}

エラーは

  • 問題: タスク ':webserver:assembly' の実行に失敗しました。

    タスク ':webserver:assembly' の引数 [build_3nljqgmljp29v06751h102sq8b$_run_closure3_closure16_closure18@7cc8e407] のメソッド zip() が見つかりませんでした。

コピーをうまく使っているのでわかりません

copy { from fixedLibDir into genLibDir }

また、ドキュメンテーションにあるように、ドキュメンテーションに本当に混乱しています。ほとんどの場合、

task myZip(type: Zip) {

}

毎回新しいタスクを作成するのではなく、zipタスクを呼び出したいだけなので、ドキュメントの例は非常に悪いようです...それらは、新しいタスクを作成せずにzipタスクを使用する例である必要があります(結局のところ、作成したい人既に存在する場合の新しい zip タスク??) または、ここに何か不足していますか? いずれにせよ、gradle を使い始めたとき、それは私を混乱させました。他の人を混乱させると思います。それを使用することと、新しいものを定義することの両方を示すのはいいことかもしれません (ただし、新しいものを定義する理由はまだわかりません)。

詳細情報/更新: 実行されるこのコードも試してみましたが、出力メッセージが表示されますが、期待どおりに webserver/output/libs ディレクトリに zip ファイルが表示されませんか???

assemble << {
    println "I'm zipping up now"
    task zip(type: Zip) {
        from('.') {
            fileMode = 0755
            include 'run*.sh'
            include 'app/*'
        }
    }

}

後、ディーン

4

3 に答える 3

6

機能する理由copyは、これが で定義されているグローバル ユーティリティ関数だからですProject(こちらを参照)。copyそのため、どこからでも呼び出すことができ、機能します。

一方、同等のzip方法はありません。おそらく、zipアーカイブ名を指定するなど、通常、zipにはコピーよりも多くの構成が必要なためか、単にそれを見逃しただけかもしれません。これは、task zip(type: Zip){ from ... into ... } zip の構文を使用する必要があることを意味します。

于 2012-06-26T00:43:06.827 に答える
2

とは対照的にCopycopyはタスクではありません。それはProjectクラスの単なるメソッドです。Gradle は、タスクの場合とは異なり、メソッドに関する情報を持たず、メソッドの実行を制御しません。したがって、メソッドには、対応するタスクに比べていくつかの欠点があり (たとえば、最新のチェックがない)、タスクがオプションでない場合にのみ使用する必要があります (これは思ったほど頻繁ではありません)。

に関しては、特にクラスzipにはそのようなメソッドはありません。Projectこのような情報を調べるのに最適な場所は、Gradle DSL リファレンスです。

結局のところ、zip タスクが既に存在する場合に新しい zip タスクを作成したい人

それが何を意味するのかわかりません。タスクタスク タイプを混同している可能性があります。作成する zip ファイルごとに個別のタスクを使用するのは、まったく普通のことです。

PS: 実際のビルドに取り組む前に、一歩下がって Gradle について詳しく学ぶことをお勧めします。

于 2012-06-26T00:45:44.140 に答える
-1

今これを行う正しい方法は

task myZip(type: Zip) {
    from('.') {
        include 'run*.sh'
        include 'app/*'
    }
}

assemble.dependsOn('myZip')
    //This last line is important of course!!!!

println以外は何もしないので、正直なところ、次のことが何をするのかわかりません

assemble << {
    println "I'm zipping up now"
    task zip(type: Zip) {
        from('.') {
            fileMode = 0755
            include 'run*.sh'
            include 'app/*'
        }
    }

}
于 2012-06-26T12:17:40.750 に答える