Gradle包含源文件

时间:2015-07-20 12:19:59

标签: java gradle dependencies javac build.gradle

我有一个项目,其中我有两个不同的子项目',主库和编译语言的编译器,如下所示:

- build.gradle
- src
  - library
  - compiler
  - ...

我的build.gradle看起来像这样:

sourceSets
{
    library
    {
        java
        {
            srcDir 'src/library'
            srcDir 'src/asm'
        }
    }
    compiler
    {
        java
        {
            srcDir 'src/compiler'
        }
    }
    //...
}

// ...

task buildLib(type: Jar, dependsOn: 'classes') {
    from sourceSets.library.output
    classifier = 'dyvil-library'
}

task buildCompiler(type: Jar, dependsOn: 'classes') {
    from sourceSets.compiler.output
    classifier = 'dyvil-compiler'
}

我的问题是,每当我尝试运行buildCompiler任务时,构建都会失败,Java编译器会在编译器源代码引用库中的类的地方给出数百个错误。我已经尝试使编译器依赖于像这样的库类:

task buildCompiler(type: Jar, dependsOn: [ 'classes', 'libraryClasses' ]) {
    from sourceSets.compiler.output
    classifier = 'dyvil-compiler'
}

但这没有帮助。我知道我理论上可以将srcDirssourceSets.library复制到sourceSets.compiler,如下所示:

compiler
{
    java
    {
        srcDir 'src/library'
        srcDir 'src/asm'
        srcDir 'src/compiler'
    }
}

但出于明显的原因,这似乎是一个坏主意。

编译编译器时是否有其他方法可以包含库中的源文件( duh )?

1 个答案:

答案 0 :(得分:1)

还有一个类似的问题on SO here

我在本地复制了您的情况,修复方法是为compiler的sourceSets添加一行,如下所示:

compiler
{
    java {
        srcDir 'src/compiler'
    }
    compileClasspath += library.output
}