Gradle:将多个源组合成一个罐子

时间:2014-12-03 04:29:36

标签: java gradle

我在这里问了一个相关的问题JOOQ class generation and gradle

在那个问题中,我试图找到进行多阶段构建的最佳方法,包括在中间步骤中生成类。我已经采用了Option Two方法,现在发现自己陷入了僵局。

我有以下build.gradle文件

apply plugin: 'java'
apply plugin: 'eclipse'

sourceSets
{
    bootstrap 

    generated {
        compileClasspath += bootstrap.output
    }

    main {
        compileClasspath += bootstrap.output
        compileClasspath += generated.output
    }
}

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'org.jooq:jooq-codegen:3.5.0'
        classpath 'postgresql:postgresql:9.1-901.jdbc4'
        classpath project(":")
    }
}

dependencies
{
    compile 'org.jooq:jooq:3.5.0'
    compile 'org.jooq:jooq-codegen:3.5.0'
    compile 'org.apache.poi:poi:3.10.1'
    compile 'com.google.guava:guava:18.0'

    generatedCompile 'org.jooq:jooq:3.5.0'
    generatedCompile 'org.jooq:jooq-codegen:3.5.0'
    generatedCompile 'org.apache.poi:poi:3.10.1'
    generatedCompile 'com.google.guava:guava:18.0'

    bootstrapCompile 'org.jooq:jooq:3.5.0'
    bootstrapCompile 'org.jooq:jooq-codegen:3.5.0'
    bootstrapCompile 'org.apache.poi:poi:3.10.1'
    bootstrapCompile 'com.google.guava:guava:18.0'
}

task generate << {
    //Use JOOQ to generate classes, with the output going into the generated sourceSet
          .withDirectory(file("src/generated/java").getAbsolutePath())
}

generatedClasses
{
    dependsOn bootstrapClasses
    dependsOn generate
}

jar
{
    dependsOn generatedClasses
    dependsOn bootstrapClasses
}

结构就是那个

  • bootstrap 源代码集包含代码生成所需的一些核心java类,以及用于制作数据库的sql文件
  • 生成任务使用 boostrap 中的类和sql文件生成类
  • 生成的源集保存生成任务的输出,
  • 源集包含可能被称为“普通”类的内容(即使用由引导程序和生成的类描述的数据库的类)

我有几个问题,我无法解开:

  1. 我似乎必须复制每个源集的依赖关系
  2. 当构建jar文件时,它只包含从源集
  3. 生成的类

    我应该注意,上面的构建将成功生成每个源集。

    非常感谢任何帮助。

1 个答案:

答案 0 :(得分:10)

O.K。我想我找到了这个问题的答案。有两个部分......

第一个问题,必须多次指定相同的依赖项,通过添加以下内容得到修复:

configurations {
    generatedCompile {
        extendsFrom compile
    }
    bootstrapCompile { 
        extendsFrom compile
    }
}

第二个问题,jar文件没有所有构建工件,通过将jar任务更改为

来修复
jar 
{
    from sourceSets.generated.output
    from sourceSets.bootstrap.output
    dependsOn bootstrapClasses
    dependsOn generatedClasses
}