繁体   English   中英

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

[英]How can Gradle build an Rpm containing the outputs of some subprojects?

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

项目布局如下所示:

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

两种服务都依赖于commonLib。

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

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

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

  1. commonLibs的输出(罐子)(甚至可能是所有依赖罐子)
  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
    ..
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM