3

アーティファクトをリモートのNexusリポジトリにアップロードしたい。したがって、Nexusでスナップホットとリリースリポジトリを構成しました。両方の作品への展開。

次に、ビルドを構成して、デプロイするリポジトリを決定できるようにします。

  • gradle uploadArchivesスナップショットリポジトリにデプロイする必要があります
  • gradle release uploadArchivesリリースリポジトリにデプロイする必要があります

これは私の試みでした:

apply plugin: 'war'
apply plugin: 'maven'

group = 'testgroup'
version = '2.0.0'
def release = false

repositories {
    mavenCentral()
    mavenLocal()
}

dependencies{ providedCompile 'javax:javaee-api:6.0' }

task release <<{
    release = true;
    println 'releasing!'
}

uploadArchives {
    repositories {

        mavenDeployer {
            repository(url: "http://.../nexus/content/repositories/releases"){
                authentication(userName: "admin", password: "admin123")
            }
            addFilter('lala'){ x, y -> release }
        }
        mavenDeployer {
            repository(url: "http://.../nexus/content/repositories/snapshots"){
                authentication(userName: "admin", password: "admin123")
            }
            addFilter('lala'){ x, y ->!release}
            pom.version = version + '-SNAPSHOT'
        }
    }
}

2つのmavenDeployer構成の1つをコメントアウトするとビルドは機能しますが、全体としては機能しません。
1つのビルドファイルで2つのターゲットアーカイブを構成する方法について何かアイデアはありますか?

4

2 に答える 2

5

if-else1 つの解決策は、状況に応じて 2 つのデプロイヤのうちの 1 つだけを追加するステートメントを追加することです。例えば:

// should defer decision until end of configuration phase
gradle.projectsEvaluated {
    uploadArchives {
        repositories {
            mavenDeployer {
                if (version.endsWith("-SNAPSHOT")) { ... } else { ... }
            }               
        }
    }
}

一部のタスクが「存在する」かどうかに基づいて構成を変更する必要がある場合は、それに基づいて熱心な決定を下すことができますgradle.startParameter.taskNames(ただし、Gradle 呼び出しの一部として指定されたタスクのみをキャッチします)。gradle.taskGraph.whenReady( の代わりにgradle.projectsEvaluated) コールバックし、タスクの実行がスケジュールされているかどうかを確認します。

于 2013-02-09T08:00:49.090 に答える