Gradle项目取决于兄弟项目创建的工件

时间:2013-07-26 07:37:15

标签: dependencies gradle siblings

我有这个Gradle设置有四个项目,一个有三个孩子的父项,其中一个Java Servlet JSON'后端'被内置到一个war文件中,然后一个静态HTML5'前端'消费它被内置到一个zip中。这些都将他们的艺术品“安装”到当地的maven仓库。

第三个兄弟项目'合并'取决于这两个工件,通过简单地“将它们拉到一起”来构建“合并”战争。

但是,一旦我按照预期启动并运行,我显然必须通过删除本地存储库中的工件来测试引导程序。

现在我突然得到“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:

基于彼得关于没有达到兄弟姐妹的项目结构及其具体建议的评论,这是最终的结果(注意:它有效!):

// ## 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)
}

2 个答案:

答案 0 :(得分:12)

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

相反,merger需要在其他两个项目上声明项目依赖项。例如:

configurations {
     merge
}

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

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

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

您会在Gradle User Guide中找到更多相关内容,尤其是多项目构建章节。

答案 1 :(得分:0)

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