14

我有这个带有四个项目的 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)
}
4

2 回答 2

14

本地 Maven 存储库(和 Gradle 的install任务)仅应在与 Maven 构建交换工件时使用。它并不意味着用于在 Gradle 构建的项目之间交换工件,并且不会自动安装到本地 Maven 存储库中。

相反,merger需要声明对其他两个项目的项目依赖关系。例如:

configurations {
     merge
}

dependencies {
    merge project(":frontend"), project(":backend")
}

task merge(type: Zip) {
    from { configurations.merge.collect { zipTree(it) } }
}

这假设frontendbackend正确声明了他们的工件。(这可能会自动发生,例如,如果使用了war插件。)

您可以在Gradle 用户指南中找到更多相关信息,尤其是多项目构建章节。

于 2013-07-26T08:01:52.653 回答
0

使用这篇文章和其他地方的想法,我做了一个 github 项目 - https://github.com/istomisgood/WarNode

于 2017-11-16T08:47:40.813 回答