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

Bur*_*ear 7 java gradle

我在这里问了一个相关的问题JOOQ类生成和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
}
Run Code Online (Sandbox Code Playgroud)

结构就是这样

  • 所述自举源集保存所需要的代码生成一些核心Java类,加上将用于pouplate数据库中的SQL文件
  • 生成任务使用的类和sql文件中的自举生成类
  • 生成源组保持生成任务的输出,和
  • 主要来源集保存什么可以被称为"正常"类(即那些利用数据库通过引导被描述和生成的类)

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

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

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

任何帮助将不胜感激.

Bur*_*ear 10

好的,我想我找到了这个问题的答案.有两个部分....

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

configurations {
    generatedCompile {
        extendsFrom compile
    }
    bootstrapCompile { 
        extendsFrom compile
    }
}
Run Code Online (Sandbox Code Playgroud)

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

jar 
{
    from sourceSets.generated.output
    from sourceSets.bootstrap.output
    dependsOn bootstrapClasses
    dependsOn generatedClasses
}
Run Code Online (Sandbox Code Playgroud)