【发布时间】:2014-10-31 14:30:14
【问题描述】:
我有一个多项目设置,我想从某些子项目构建 Rpm 文件,其中包含来自其他子项目的人工制品。看来我需要一些 Gradle 基础知识的帮助。
项目布局如下:
rootProject
|
|-commonLibs
|
|---serviceA
| |
| |--module1
| \--module2
|
\---serviceB
|
|--module3
\--module4
这两个服务都依赖于 commonLibs。
我正在使用nebula.os-package 2.0.2 和 Gradle 2.2 快照版本。
由于服务 A 和 B 将在不同的机器上运行,我当然希望它们使用不同的 RPM。
我想要完成的是让每个 Rpms 包括:
- commonLibs 的输出(jar)(或者可能是所有依赖 jar,甚至)
- 子模块的某些工件(jar 和资源文件)
我宁愿避免列出要包含的每个文件,因为我稍后会添加更多子模块。我们当然可以在这里利用 Gradle 的按惯例构建机制。
所以,我想我会在 serviceA 和 serviceB 的 build.gradle 中做这样的事情:
apply plugin: 'os-package'
ospackage {
ext.outputFiles = []
project.childProjects.each {
jar.outputs.files.each { File f ->
outputs.add (f)
}
}
from files(outputFiles) {
into '/opt/mybusiness/product/lib'
}
}
显然,这是行不通的:
gradlew serviceA:buildRpm
[...]
* What went wrong:
A problem occurred evaluating project ':serviceA'.
> Could not find property 'jar' on com.netflix.gradle.plugins.packaging.ProjectPackagingExtension_Decorated@2805c769.
好的,serviceA不是Java项目,所以我没有应用java插件,只有os-package插件。然而,子模块都应用了“java”插件,所以我假设我可以从each 闭包访问它们的 jar 任务。这一定是构建顺序问题。对吧?
在我的位置上,我应该做什么?欢迎使用 nebula.os-package 的多项目构建策略示例。我一直在网上搜索,但找不到任何东西。
【问题讨论】: