私はこの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)
}