我有这个带有四个项目的 Gradle 设置,一个有三个孩子的父级,其中一个 Java Servlet JSON“后端”内置到一个战争文件中,然后一个静态 HTML5“前端”使用它被内置到一个 zip 中。这两个都将他们的神器“安装”到本地 maven repo。
第三个兄弟项目“合并”依赖于这两个工件,通过简单地“将它们压缩在一起”来构建“合并”战争。
但是,一旦我按预期启动并运行它,我显然必须通过从本地存储库中删除工件来测试引导场景。
现在我突然得到“Artifact 'no.company:frontend:1.0-SNAPSHOT@zip' not found”。
是否不可能依赖当前构建将产生的工件?
编辑:
基于另一个想法(以及 Peter 的回复不鼓励这种 Maven 逻辑),这个版本看起来很有希望,而不是遍历 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:
根据 Peter 关于未触及兄弟姐妹的项目结构的评论和他的具体建议,这是最终的作品(注意:它有效!):
// ## 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)
}