1

アーティファクトを Ivy リポジトリに公開したいのですが、うまくいきません。私はこの記事を読み、読んだ後、このサンプルビルドを作成しました:

task ivyPublishTest << {
    def buildDir = new File("build")
    buildDir.mkdirs()
    def fileToPublish = new File("build/file.abc")
    fileToPublish.write("asdasdasd")
}

artifacts {
    archives(ivyPublishTest.fileToPublish) {
        name 'gradle-test-artifact'
        builtBy ivyPublishTest
    }
}

uploadArchives {
    repositories {
        ivy {
            url "http://my.ivy.repo/ivyrep/shared"
        }
    }
}

もちろん、問題はそれが機能しないことです。このエラーが発生しますCould not find property 'fileToPublish' on task ':ivyPublishTest'

4

1 に答える 1

1

Groovy では、defレキシカル スコープのローカル変数を作成します。したがって、fileToPublishタスク アクションの外では表示されません。さらに、構成は構成フェーズで行う必要があります(つまり、タスク アクションでの宣言と割り当てfileToPublishが遅すぎます)。正しい解決策は次のとおりです。

task ivyPublishTest {
    // configuration (always evaluated)
    def buildDir = new File("build")
    ext.fileToPublish = new File("build/file.abc")
    doLast {
        // execution (only evaluated if and when the task executes)
        buildDir.mkdirs()
        fileToPublish.write("asdasdasd")
    }
}

artifacts {
    // configuration (always evaluated)
    archives(ivyPublishTest.fileToPublish) {
        name 'gradle-test-artifact'
        builtBy ivyPublishTest
    }
}

ext.fileToPublish = ...追加のプロパティを宣言します。これは、オブジェクト (この場合はタスク) が表示されるすべての場所で表示される、既存のオブジェクトに関連付けられた新しいプロパティです。追加のプロパティの詳細については、Gradle ユーザー ガイドを参照してください

于 2013-06-03T07:33:15.283 に答える