java - Gradle Jaxb 插件问题

标签 java gradle jaxb

我正在尝试从多个 .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/

相关文章:

java - 为什么我的 Java 类可以在不使用 "this."的情况下工作?

browser - 自动安装 JRE

java - Iterable 实现中的 Lambda 表达式

java - 在 Axis Web 服务中使用 Java 中的复杂数据类型

Android Studio 在 gradle 同步期间无限期地卡住,但同一个项目在 Intellij Idea 中运行良好

cordova - Android使用Phonegap编译时出错。类似于Gradle Android构建工具

android - 如何使用 Gradle 创建发布签名的 apk 文件?

java - 如何知道使用了什么 JAXB 实现?

java - 仅在 getter 上使用 XmlTransient 注释?

java - JAXB/xjc 生成的异常类不可抛出