8

既存のディレクトリと tar アーカイブを .tar.gz にアセンブルするための非 Java プロジェクト用の Gradle ビルドを作成しています。次のような定義を使用すると、tar タスクがスキップされます。

task archive(dependsOn: 'initArchive',type: Tar) << {
    baseName = project.Name
    destinationDir = new File(project.buildDir.path+'/installer')
    compression = Compression.GZIP
    from (archiveDir)
    doLast{
        checksum(archivePath)
    }
}

ここにコンソール出力があります

:jenkins-maven-sonar:archive
Skipping task ':jenkins-maven-sonar:archive' as it has no source files.
:jenkins-maven-sonar:archive UP-TO-DATE

BUILD SUCCESSFUL

Total time: 9.056 secs

tar タスクをメソッドとして使用しようとすると、メソッドが見つからないと不平を言って失敗します

task archive(dependsOn: 'initArchive') << {
    tar{
    baseName = project.Name
    destinationDir = new File(project.buildDir.path+'/installer')
    compression = Compression.GZIP
    from (archiveDir)
    doLast{
        checksum(archivePath)
    }
    }
}

FAILURE: Build failed with an exception.

* Where:
Build file '/home/anadi/Code/da-ci-installers/build.gradle' line: 29

* What went wrong:
Execution failed for task ':jenkins-maven-sonar:archive'.
> Could not find method tar() for arguments [build_6a2bckppv2tk8qodr6lkg5tqft$_run_closure3_closure5_closure7@4a5f634c] on task ':jenkins-maven-sonar:archive'.

* Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output.

BUILD FAILED

Total time: 8.749 secs

Gradle でコピーを実行できるのと同じ方法で tar タスクを実行できますか? 同じビルドで次のようなブロックがあり、tar を同じように使用できるかどうかを知りたい

            copy {
                project.logger.info("Copying bundle :: "+bundle[x])
                from(rootProject.projectDir.path+"/3rd-party-tools/"+bundle[x]) {
                    include '**/*.*'
                }
                into(archiveDir)
           }

上記の最初の形式を使用している場合、ビルドが「tar」タスクをスキップしないようにする方法。

4

2 に答える 2

11

あなたは、構成段階ではなく実行段階でタスクを構成するという古典的な間違いに陥っています。解決策は、最初のコード スニペットのを削除することです。<<

(およびそれがもたらす違い) が混乱している場合<<、適切な解決策は決して使用しないことです<<が、常により明示的なdoLast {}.

方法はありませんtarが、通常はこれらを別のタスクにする方がよいでしょう。(copy強力な理由がある場合にのみ、対応するタスクよりも次のような方法を優先する必要があります。)

于 2012-07-19T10:44:37.257 に答える