Gradle 中的 Maven jaxb2 插件

Far*_*zad 5 gradle maven maven-jaxb2-plugin

我需要将 Maven 项目迁移到 gradle。maven 项目使用的maven-jaxb2-plugin是这样的(插件的版本设置在 root 中pom.xml):

<plugin>
  <groupId>...</groupId>
  <artifactId>maven-jaxb2-plugin</artifactId>
  <executions>
    <execution>
      <goals>
        <goal>generate</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <generatePackage>package for generated classes</generatePackage>
    <schemaDirectory>directory containing XSD files</schemaDirectory>
    <includeSchemas>
        <includeSchema>XSD file name</includeSchema>
        <includeSchema>XSD file name</includeSchema>
        ...
    </includeSchemas>
    <strict>true</strict>
    <verbose>true</verbose>
    <extension>true</extension>
  </configuration>
<plugin>
Run Code Online (Sandbox Code Playgroud)

所以,我想在 gradle 中实现相同的功能,这就是我所拥有的:

plugins {
  id "com.github.jacobono.jaxb" version "1.3.5"
}
dependencies {
  jaxb "org.glassfish.jaxb:jaxb-runtime:2.2.11"
  jaxb "org.glassfish.jaxb:jaxb-xjc:2.2.11"
}
jaxb {
  xsdDir = "directory containing XSD files"
  xjc {
    taskClassname = "com.sun.tools.xjc.XJC2Task"
    generatedPackage = "package for generated classes"
  }
}
compileJava.dependsOn xjc
Run Code Online (Sandbox Code Playgroud)

该项目是多项目构建的一部分,依赖于其他项目等,但我认为这些无关紧要。

我在正确的轨道上吗??我这么问是因为行为似乎并不相同,当我做mvn clean installgradle clean build

题:

  • 有没有办法指定我们想要在 gradle 中使用的 XSD 文件名(就像我们includeSchema在 maven 中使用的那样)?

我的问题:

小智 4

这就是我在进行研究后完成这项任务的方法。这正如预期的那样。将以下内容添加到您的构建文件中。

buildscript {

    dependencies {
        classpath 'com.github.jacobono:gradle-jaxb-plugin:1.3.5'
    }
}

apply plugin: 'com.github.jacobono.jaxb'

dependencies {

    jaxb 'com.sun.xml.bind:jaxb-xjc:2.2.7-b41'
    jaxb 'com.sun.xml.bind:jaxb-impl:2.2.7-b41'
    jaxb 'javax.xml.bind:jaxb-api:2.2.7'
    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 "org.jvnet.jaxb2_commons:jaxb2-value-constructor:3.0"
}


jaxb {

    System.setProperty('javax.xml.accessExternalSchema', 'all') //To solve external schema dependencies
    xsdDir = "src/main/resources/schema/" //xsd directory
    xjc {
        taskClassname = "org.jvnet.jaxb2_commons.xjc.XJC2Task" // This is for setter plugin
        args = ["-Xsetters","-Xsetters-mode=direct"]
    }
}
Run Code Online (Sandbox Code Playgroud)

您应该运行“gradle xjc”从 xsd 文件生成相关的 java 文件。