首页 文章

Gradle:将多个源组合成一个 jar

提问于
浏览
7

我在这里问了一个相关的问题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文件

  • generate 任务使用 boostrap 中的类和sql文件生成类

  • generated 源集保存生成任务的输出,和

  • main 源集拥有可能被称为"normal"类的东西(即使用由引导程序和生成的类描述的数据库的类)

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

  • 我似乎必须复制每个源集的依赖项

  • 构建jar文件时,它只包含从 main 源集生成的类

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

任何帮助将不胜感激 .

1 回答

  • 10

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

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

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

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

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

相关问题