我正在尝试从多个 .xsd
生成类在 gradle 中。尝试如下,但它不起作用,我收到错误 file not exists
.
buildscript {
ext {
springBootVersion = '1.5.4.RELEASE'
}
repositories {
jcenter()
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath("com.github.jacobono:gradle-jaxb-plugin:1.3.6")
}
}
apply plugin: 'java'
apply plugin: 'eclipse-wtp'
apply plugin: 'org.springframework.boot'
apply plugin: 'war'
apply plugin: 'com.github.jacobono.jaxb'
version = '0.0.1-SNAPSHOT'
repositories {
mavenCentral()
}
configurations.all {
exclude module: 'spring-boot-starter-logging'
}
configurations {
jaxb
}
task createDirs {
file("$buildDir/generated-sources").mkdirs()
}
xjc.dependsOn createDirs
jaxb {
xsdDir = "src/main/resources/xsd"
xjc {
destinationDir = "$buildDir/generated-sources"
taskClassname = "org.jvnet.jaxb2_commons.xjc.XJC2Task"
generatePackage = "com.test.generated1"
args = ["-Xinheritance", "-Xannotate"]
}
}
compileJava {
dependsOn(xjc)
}
compileTestJava {
dependsOn(xjc)
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-web')
compile('org.springframework.boot:spring-boot-starter-log4j2')
compile('org.springframework.boot:spring-boot-starter-actuator')
jaxb('org.jvnet.jaxb2_commons:jaxb2-basics-ant:0.6.5')
jaxb('org.jvnet.jaxb2_commons:jaxb2-basics:0.6.4')
jaxb('org.jvnet.jaxb2_commons:jaxb2-basics-annotate:0.6.4')
jaxb('com.sun.xml.bind:jaxb-xjc:2.2.7-b41')
jaxb('com.sun.xml.bind:jaxb-impl:2.2.7-b41')
}
如果我删除 destinationDir = file("build/generated-sources")
,它在 src/main/java
内生成类我不想要。
我收到错误 .../build/generated-sources: non-existent directory
感谢任何帮助:)
注意:Gradle 版本 3.2.1
最佳答案
尝试为构建目录使用变量“$buildDir/generated-sources”
就像吸血鬼注意到你需要先创建目录一样。
我建议使用 doFirst()
为其创建一个任务,它将在执行阶段更快地执行。
task createDirs {
doFirst{
file("$buildDir/generated-sources").mkdirs()
}
}
然后在 xjc 之前运行 if:
xjc.dependsOn createDirs
在此任务中,特定任务尝试仅传递原始 /build
路径,因为 destinationDir
似乎已经指向根目录。不知道这里发生了什么。除此之外,我强烈建议使用变量 $buildDir
jaxb {
xsdDir = "src/main/resources/xsd"
xjc {
destinationDir = "build/generated-sources"
taskClassname = "org.jvnet.jaxb2_commons.xjc.XJC2Task"
generatePackage = "com.test.generated1"
args = ["-Xinheritance", "-Xannotate"]
}
}
另一件事是,如果您不想一直运行昂贵的 xjc 任务,您可以监视目录更改。
xjc {
inputs.dir ("$projectDir/src/main/resources/xsd")
outputs.dir ("$buildDir/generated-sources")
}
关于java - Gradle Jaxb 插件问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44820347/