我有一个项目,其中我有两个不同的子项目',主库和编译语言的编译器,如下所示:
- 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'
}
但这没有帮助。我知道我理论上可以将srcDirs
从sourceSets.library
复制到sourceSets.compiler
,如下所示:
compiler
{
java
{
srcDir 'src/library'
srcDir 'src/asm'
srcDir 'src/compiler'
}
}
但出于明显的原因,这似乎是一个坏主意。
编译编译器时是否有其他方法可以包含库中的源文件( duh )?
答案 0 :(得分:1)
还有一个类似的问题on SO here。
我在本地复制了您的情况,修复方法是为compiler
的sourceSets添加一行,如下所示:
compiler
{
java {
srcDir 'src/compiler'
}
compileClasspath += library.output
}