0
我有一個多項目Gradle構建,具有自定義的定義xjc任務來構建jaxb生成的對象,並且我正在按照正確的順序構建步驟。Gradle中的自定義任務構建順序
我有3個項目,通用,參考和產品。參考取決於共同和產品取決於參考和共同。命名對於我的問題很重要,因爲它看起來像gradle按字母順序執行某些操作,並且我已經剝離了一些其他依賴項,因爲它們不會影響問題。
在每個項目中,順序應該是jaxb,java編譯,然後scala編譯。
在頂層的build.gradle我指定的JAXB任務是:
task jaxb() {
description 'Converts xsds to classes'
def jaxbTargetFile = file(generatedSources)
def jaxbSourceFile = file (jaxbSourceDir)
def jaxbEpisodesFile = file (jaxbEpisodeDir)
def bindingRootDir = file (rootDir.getPath() + '/')
inputs.dir jaxbSourceDir
outputs.dir jaxbTargetFile
doLast {
ant.taskdef(name: 'xjc', classname: 'com.sun.tools.xjc.XJCTask', classpath: configurations.jaxb.asPath)
jaxbTargetFile.mkdirs()
jaxbEpisodesFile.mkdirs()
for (xsd in bindingsMap) {
if (!episodeMap.containsKey(xsd.key)) {
ant.fail("Entry no found in the episodeMap for xsd $xsd.key")
}
def episodeFile = projectDir.getPath() + '/' + jaxbEpisodeDir + '/' + episodeMap.get(xsd.key)
println("Processing xsd $xsd.key with binding $xsd.value producing $episodeFile")
ant.xjc(destdir: "$jaxbTargetFile", extension: true, removeOldOutput: true) {
schema(dir:"$jaxbSourceFile", includes: "$xsd.key")
binding(dir:"$bindingRootDir" , includes: "$xsd.value")
arg(value: '-npa')
arg(value: '-verbose')
arg(value: '-episode')
arg(value: episodeFile)
}
}
}
}
在產品個體的build.gradle文件我指定(在參考類似)
dependencies {
compile project(':common')
compile project(':ref')
}
並在我指定的所有三個項目中,我指定
compileJava.dependsOn(jaxb)
當我在產品項目中運行發佈(或jar)時,我可以看到下面的輸出:
common:jaxb
common:compileJava
common:compileScala
common:jar
product:jaxb
ref:jaxb
refcompileJava
ref:compileScala
ref:jar
product:compileJava
product:compileScala
這給了我一個錯誤,因爲在產品的XSD指裁判和裁判還沒有運行JAXB還沒有發作約束力文件ref和產品再生進口類與錯包裹名字。
如何確保ref jaxb在產品jaxb之前運行?
是的,這工作,謝謝。我希望找到一個更通用的方法,使用已經設置的依賴關係,但這確實解決了這個問題。 – Klunk
你也可以試試這個:'任務jaxb(dependsOn:configurations.compile)' –