gradle项目中路径的配置

时间:2013-04-05 03:25:31

标签: gradle

我有一个像这样格式化的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等时,将输出放在container / dist文件夹中。我该怎么做?

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

2 个答案:

答案 0 :(得分:2)

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

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

这个解决方案有一些开销,并不被认为是最佳实践,因为你开始在构建中填充内容。更好的方法是重新配置相应的任务,在所需的文件夹中创建默认的罐子,战争,拉链:

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

希望有所帮助。

欢呼声, 勒内

答案 1 :(得分:0)

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