Gradle 包含源文件

Gradle Include Source Files

我有一个项目,其中有两个不同的 'sub-projects',主库和编程语言的编译器,目录结构如下:

- 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)?

有一个类似的问题on SO here

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

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