1

我有一个像这样格式化的 gradle 项目

  • container/
    • dist/
    • mod1/
      • build.gradle
    • mod2/
      • build.gradle
    • mod3/
      • build.gradle
    • build.gradle

基本上是一个有很多子模块的年级项目。我想要做的是,当您在 container/build.gradle 上运行程序集时,它会在所有子项目上运行构建。那部分很容易。现在我正在尝试在所有内容中集中配置设置和参数。

这是我的 container/build.gradle 文件中的一个片段

subprojects {
    apply plugin: 'java'
    apply plugin: 'scala'

    jar {
        manifest.attributes provider: 'OnusPride'
    }

    property {
        sourceCompatibility = 1.7
        archivePath = file("dist")
    }

    ext {
        springVersion = "3.2.1.RELEASE"
        springSecurityWebVersion = "3.1.3.RELEASE"
        springSecurityOauth2Version = "1.0.1.RELEASE"
        jacksonCoreVersion = "2.1.2"
    }

    dependencies {
        testCompile 'junit:junit:4.8.2'
    }
}

我正在尝试配置所有模块,当它们完成各种组装任务时,javajar、scalajar、war 等,以将输出放在容器/dist 文件夹中。我怎么做?

另外,有没有人有一个相当复杂、编写良好的多模块 gradle 项目的例子。比 hello world 内容更重要的东西会非常有帮助。同时学习 groovy 和 gradle 有点困难。

4

2 回答 2

2

我认为你有不同的选择。一种解决方案可能是在子项目中引入一个通用任务,将 AbstractArchiveTask 类型的任务的所有输出复制到 dist 文件夹。这看起来像这样:

subprojects{
    task copyToDists(type:Copy){
         into project.rootProject.file("dists")
         from tasks.withType(AbstractArchiveTask)
    }
}

这个解决方案有一些开销,并且不被认为是最佳实践,因为您开始在构建中重新排列东西。更好的方法是重新配置相应的任务,以在所需文件夹中默认创建 jars、wars、zips:

subprojects{
    tasks.withType(AbstractArchiveTask){
        destinationDir = project.rootProject.file("dists")
    }
}

希望有帮助。

干杯,勒内

于 2013-04-05T14:12:24.140 回答
0

这是一个我还没有达到但我即将面对的问题。我计划在其中创建一个任务,该任务container/build.gradle将在其所有子项目中找到人工制品,然后将它们复制到dist目录中。

于 2013-04-05T18:35:33.363 回答