14

私はこのGradleセットアップを4つのプロジェクト、3つの子を持つ親、JavaサーブレットJSONの「バックエンド」がwarファイルに組み込まれ、次にこれを消費する静的なHTML5「フロントエンド」がzipに組み込まれています。これらはどちらも、アーティファクトをローカルの Maven リポジトリに「インストール」します。

3 番目の兄弟プロジェクト 'merger' は、これら 2 つのアーティファクトに依存しており、単に「それらをまとめて圧縮する」ことで「マージされた」戦争を構築します。

ただし、これを意図したとおりに実行した後、ローカル リポジトリからアーティファクトを削除して、ブートストラップ シナリオをテストする必要がありました。

今、突然「Artifact 'no.company:frontend:1.0-SNAPSHOT@zip' not found」が表示されます。

現在のビルドによって生成されるアーティファクトに依存することはできませんか?

編集:

別のアイデア (およびこの Maven ロジックを思いとどまらせる Peter からの返信) に基づいて、このバージョンは有望に見えますが、Maven をトラバースしません (注: 動作します!):

// ## From frontend's build.gradle:
task zipFrontend(dependsOn: 'buildFrontend',  type: Zip) {
    from ('dist/')
}

// ## From backend's build.gradle:
apply plugin: 'war'

// ## From merger's build.gradle:
task mergeFrontAndBack(dependsOn: [':backend:war', 
                                   ':frontend:zipFrontend'], type: War) {
    from zipTree(project(':frontend').tasks['zipFrontend'].archivePath)
    from zipTree(project(':backend').tasks['war'].archivePath)
    destinationDir(buildDir)
}

編集2:

兄弟のプロジェクト構造に手を差し伸べないことについてのピーターのコメントと彼の具体的な提案に基づいて、結果として得られた作品は次のとおりです(注:機能します!):

// ## From frontend's build.gradle:
task zipFrontend(dependsOn: 'buildFrontend',  type: Zip) {
    from ('dist/')
}
configurations { zip }
artifacts { zip zipFrontend }

// ## From backend's build.gradle:
apply plugin: 'war'
configurations { jsonOnlyWar }
artifacts { jsonOnlyWar war }

// ## From merger's build.gradle:
configurations { merge }
dependencies {
    merge project(path: ':backend', configuration: 'jsonOnlyWar')
    merge project(path: ':frontend', configuration: 'zip')
}
task mergeFrontAndBack(dependsOn: configurations.merge, type: War) {
    from { configurations.merge.collect { zipTree(it) } }
    destinationDir(buildDir)
}
4

2 に答える 2