如何通过在 gradle 中使用 xmlbeans 从 xsd 生成 java class

how to generate java class from xsd by using xmlbeans in gradle

我是 gradle 的新手。在我的项目中,我有 xsd 个文件,我想从 xsd 生成 java 类(仅使用 xmlbeans)。如何在 gradle.

中做到这一点

我正在使用 axis2 1.6.1,gradle,xmlbean 2.3.0`(JAXB 在我当前的项目中不是一个选项)。

据我所知,您可以为此使用 "xmlbeansPlugin"。现在不能说,是否可以将 xmlbean 的版本更改为旧版本。

您只需将插件应用到您的构建脚本即可:

apply from: 'https://raw.github.com/rartavia/gradle-plugins/master/xmlbeansPlugin/xmlbeans.gradle'

然后声明xmlbeans配置及其依赖

configurations {
    xmlbeans
}

dependencies {
    xmlbeans 'org.apache.xmlbeans:xmlbeans:2.5.0'
}

之后您必须指定 xsd 文件位置

sourceSets {
    schemas {
            srcDir = 'src/main/schemas'
    }
}

现在可以调用compileXmlSchemas任务生成类

java -classpath xbean.jar org.apache.xmlbeans.impl.tool.SchemaCompiler 
     -src <OUTPUT_SOURCE_FOLDER> 
     -out <OUTPUT>.jar <SOURCE>.xsd 
     -compiler "javac.exe" 
     -javasource "1.5"

我必须稍微修改一下 Stanislav 的回答才能让插件正常工作。即按以下方式设置 sourceSets:

sourceSets {
    xmlbeans {
        java {
            srcDirs = ['dir/schema']
        }
    }
}

以防有人遇到同样的问题。

任何使用最新 gradle 版本(6.x)寻找此问题答案的人,这里是我如何在 eclipse 中配置项目(版本:2020-06 (4.16. 0)) 并使用 gradle 任务从 XSD 文件自动生成 Java (8) 类。

build.gradle 文件中的代码片段

buildscript {
   repositories {
    maven {
        url "https://plugins.gradle.org/m2/"
     }
   }
   dependencies {
     classpath 'gradle.plugin.com.liferay:gradle-plugins-xsd-builder:1.0.10'
  } 
}
dependencies {
  compile "org.apache.xmlbeans:xmlbeans:4.0.0"
  ... //other dependencies
}
.... // other code
apply plugin: "com.liferay.xsd.builder"

添加以上代码后,刷新eclipse,然后更新eclipse中的gradle任务视图,应该可以看到任务:buildXSDbuild 组下。将所有 XSD 文件添加到 xsd 文件夹中(将此文件夹保留在项目文件夹的根目录下)并双击 buildXSD 任务以从 XSD 生成所有 Java 类型,非常干净。如果您以后要添加任何 XSD,只需将其放入 xsd 文件夹中,然后再次 运行 执行相同的任务。此任务将生成一个 jar 文件,其中包含项目的 lib 文件夹中的所有 Java 类型。

对于好奇的人 - 目前,我们所做的是:

  1. 运行build文件夹下的jar任务,实际生成项目的jar文件(本项目使用Java类从XSD生成一定网络服务调用)
  2. 然后复制两个 jar 文件:从第一步生成的 jar 文件 + XSD 基于生成的 jar 文件到本地机器的部署文件夹
  3. 另一个 gradle 任务是 运行,它调用远程机器来停止服务器,将 jars 部署到所需位置,然后启动服务器。这个 gradle 任务还使用了另一个插件:https://gradle-ssh-plugin.github.io/,它也很好用。

以上所有步骤都是通过单个 gradle 任务(clean + jar + customCopyTask + deployToServer)自动执行的,可以完美地实现自动化。 注意:jar 任务也会生成基于 XSD 的 jar 文件。因此,您可能想要编写自定义 jar 任务。