0

ディスク上のカスタム ローカル Maven リポジトリにいくつかの依存関係を公開し、このフォルダーをディストリビューション zip に追加する必要があるマルチプロジェクト ビルドがあります。

maven-publish プラグインを使用して、各サブプロジェクトの公開タスクを定義します。

subprojects {
    apply plugin: 'maven-publish'

    configurations {
        offlineDependencies
    }

    publishing {
        publications {
            configurations.each { config ->
                if (config.name == "offlineDependencies") {
                    def files = config.files
                    config.dependencies.each { dep ->
                        files.each { file ->
                            if (file.name == "${dep.name}-${dep.version}.jar") {
                                "${dep.name}"(MavenPublication) {
                                    artifact (file) {
                                        groupId = "${dep.group}"
                                        artifactId = "${dep.name}"
                                        version = "${dep.version}"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        repositories {
            maven {
                name 'dependencies'
                url '../build/repository'
            }
        }
    }
}

配布プラグインを使用して、zip ファイルを作成します

distributions {
    release {
        baseName 'release'
        contents {
            from('src/main/resources/')
            into("repository"){
                from("$buildDir/repository")
            }
        }
    }
}

zip ファイルを作成する前に、動的に作成されたすべての発行タスクが実行されていることを確認するにはどうすればよいですか?

動的に作成されたタスクに依存するすべてのサブプロジェクトに対して新しいタスクを作成しようとしましたが、その時点ではまだ作成されていないようです。

subprojects {
    task offlineDep << {
        println 'Creating offline dependencies'
    }
    offlineDep.dependsOn {
        tasks.findAll { task -> task.name.endsWith('PublicationToDependenciesRepository') }
    }
}
4

1 に答える 1

0

この問題の解決策を見つけました。アーティファクトの名前を収集し、後で作成されることがわかっているタスク名を生成し、それらを依存関係として追加します。

subprojects {
    apply plugin: 'maven-publish'
    def offlineDependencyNames = []

    publishing {
        publications {
            configurations.each { config ->
                if (config.name == "offlineDependencies") {
                    def files = config.files
                    config.dependencies.each { dep ->
                        files.each { file ->
                            if (file.name == "${dep.name}-${dep.version}.jar") {
                                offlineDependencyNames << dep.name
                                "${dep.name}"(MavenPublication) {
                                    artifact (file) {
                                        groupId = "${dep.group}"
                                        artifactId = "${dep.name}"
                                        version = "${dep.version}"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        repositories {
            maven {
                name 'dependencies'
                url "${rootProject.buildDir}/repository"
            }
        }
    }

    task publishOfflineDependencies
    publishOfflineDependencies.dependsOn {
        offlineDependencyNames.collect { name ->
"publish${name[0].toUpperCase()}${name.substring(1)}PublicationToDependenciesRepository"
        }
    }
}


releaseDistZip.dependsOn {
    subprojects.collect {
        p -> p.path + ':publishOfflineDependencies'
    }
}
于 2015-12-01T09:34:49.783 に答える