2015-07-20 110 views
0

我有一个项目中,我有两个不同的“子项目”,主库和在目录结构中的编程语言,像这样的编译器:摇篮包括源文件

​​

我的身材。 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

还有类似的问题on SO here

我本地复制您的情况和修复是添加一行到sourceSets为compiler如下:

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