2015-07-20 89 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 
}