gpt4 book ai didi

java - Gradle 如何构建包含某些子项目输出的 Rpm?

转载 作者:行者123 更新时间:2023-12-01 12:20:42 25 4
gpt4 key购买 nike

我有一个多项目设置,我想从某些子项目构建 Rpm 文件,其中包含其他子项目的工件。看来我需要一些 Gradle 基础知识方面的帮助。

项目布局如下:

rootProject
|
|-commonLibs
|
|---serviceA
| |
| |--module1
| \--module2
|
\---serviceB
|
|--module3
\--module4

这两项服务都依赖于 commonLibs。

我正在使用nebula.os-package 2.0.2 和 Gradle 2.2 快照版本。

由于服务 A 和 B 将在不同的机器上运行,我当然希望它们以不同的 RPM 运行。

我想要完成的是让每个 Rpm 包括:

  1. commonLibs 的输出(jar)(甚至可能是所有依赖项 jar)
  2. 子模块的某些工件(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 进行多项目构建策略的任何示例。我一直在网上搜索,但找不到任何内容。

最佳答案

我想,类似这样的东西应该可以解决问题 - 添加到 :serviceA 和 :serviceB 的 build.gradle 中

configurations {
commonJars
}

dependencies {
commonJars project( path: ':commonLibs' ) // might be needed to add 'configuration' as well
}

ospackage {
from configurations.commonJars
..
}

关于java - Gradle 如何构建包含某些子项目输出的 Rpm?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26677075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com