如何使用 gradle 运行 jaxb xjc 任务?
我为 jaxb/xjc 选择了 3 个 gradle 插件,但没有一个对我有用。
对于每种情况,我都将 maven 模型 xsd maven-4.0.0.xsd
https://maven.apache.org/xsd/maven-4.0.0.xsd 中src/main/xsd
。 (这只是一个例子,任何其他xsd都可以)
- no.entitas.gradle.jaxb:gradle-jaxb-plugin:2.0
http://github.com/stianh/gradle-jaxb-plugin
该插件在以下位置查找 xsd 文件src/<源集>/xsd/**/*.xsd
。
这是 build.gradle
:
apply plugin: 'jaxb'
dependencies {
jaxb 'com.sun.xml.bind:jaxb-xjc:2.2.4-1'
}
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'no.entitas.gradle.jaxb:gradle-jaxb-plugin:2.0'
}
}
错误:
* What went wrong:
A problem occurred evaluating root project 'test-gradle'.
> Failed to apply plugin [id 'jaxb']
> Could not find method add() for arguments [jaxb, no.entitas.gradle.jaxb.plugin.JaxbPlugin$_apply_closure1@62c72501] on configuration container.
- org.hibernate.build.gradle:gradle-xjc-plugin:1.0.2.Final
https://github.com/hibernate/gradle-xjc-plugin
这是build.gradle
:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.hibernate.build.gradle:gradle-xjc-plugin:1.0.2.Final'
}
}
apply plugin: 'org.hibernate.build.gradle.xjc'
dependencies {
xjc 'org.glassfish.jaxb:jaxb-xjc:2.2.11'
xjc 'org.jvnet.jaxb2_commons:jaxb2-basics:0.9.3'
xjc 'org.jvnet.jaxb2_commons:jaxb2-basics-ant:0.9.3'
}
xjc {
xjcTaskName = 'org.jvnet.jaxb2_commons.xjc.XJC2Task'
// access the schemas NamedDomainObjectContainer
schemas {
// and add a new SchemaDescriptor to it under the name 'cfg'
cfg {
// and now, configure the SchemaDescriptor
xsd = file( 'src/main/xsd/maven-4.0.0.xsd')
}
}
}
错误:
* What went wrong:
Neither path nor baseDir may be null or empty string. path='null' basedir='C:\Users\xxxxx\eclipse-workspace\test-gradle'
- com.intershop.gradle.jaxb:jaxb-gradle-plugin:5.1.0
https://github.com/IntershopCommunicationsAG/jaxb-gradle-plugin
这是build.gradle
:
plugins {
id 'java'
id 'com.intershop.gradle.jaxb' version '5.1.0'
}
jaxb {
javaGen {
posConfig {
packageName = 'org.apache.maven.model'
schema = file('src/main/xsd/maven-4.0.0.xsd')
}
}
}
repositories {
mavenCentral()
}
dependencies {
jaxb 'com.sun.xml.bind:jaxb-xjc:3.0.1'
jaxb 'com.sun.xml.bind:jaxb-jxc:3.0.1'
jaxb 'com.sun.xml.bind:jaxb-impl:3.0.1'
jaxb 'com.sun.xml.bind:jaxb-core:3.0.1'
jaxb 'org.glassfish.jaxb:jaxb-runtime:3.0.1'
jaxb 'jakarta.xml.bind:jakarta.xml.bind-api:3.0.1'
jaxb 'jakarta.activation:jakarta.activation-api:2.0.1'
}
错误:
* What went wrong:
An exception occurred applying plugin request [id: 'com.intershop.gradle.jaxb', version: '5.1.0']
> Failed to apply plugin [id 'com.intershop.gradle.jaxb']
> Could not generate a proxy class for class com.intershop.gradle.jaxb.extension.JaxbExtension.
经过更多研究,我发现了另外 2 个适合我的插件,但我仍在寻找没有插件的解决方案。
jacobono/gradle-jaxb-plugin 使用相对目录并创建目标目录
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "com.github.jacobono:gradle-jaxb-plugin:1.3.5"
}
}
apply plugin: "com.github.jacobono.jaxb"
repositories {
mavenCentral()
}
sourceSets {
main {
java {
srcDirs = ["${project.buildDir}/generated-sources/xjc",'src/main/java']
}
resources {
srcDirs = ['src/main/resources']
}
}
}
dependencies {
jaxb 'org.jvnet.jaxb2_commons:jaxb2-basics-ant:1.11.1'
jaxb 'org.jvnet.jaxb2_commons:jaxb2-basics:1.11.1'
jaxb 'org.jvnet.jaxb2_commons:jaxb2-basics-annotate:1.1.0'
jaxb 'org.glassfish.jaxb:jaxb-xjc:2.2.11'
jaxb 'org.glassfish.jaxb:jaxb-runtime:2.2.11'
jaxb 'javax.xml.bind:jaxb-api:2.2.11'
jaxb 'org.slf4j:slf4j-nop:1.7.30'
}
jaxb {
xsdDir = "src/main/xsd"
xjc {
taskClassname = "org.jvnet.jaxb2_commons.xjc.XJC2Task"
generatePackage = "org.apache.maven.model"
destinationDir = "build/generated-sources/xjc"
args = ["-Xinheritance", "-Xannotate"]
}
}
compileJava.dependsOn 'xjc'
: rackerlabs/gradle-jaxb-plugin 使用绝对目录并仅在默认目录时创建目标目录 ${project.buildDir}/ generated-sources/xjc
:
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath 'gradle.plugin.org.openrepose:gradle-jaxb-plugin:2.5.0'
}
}
apply plugin: "org.openrepose.gradle.plugins.jaxb"
repositories {
mavenCentral()
}
sourceSets {
main {
java {
srcDirs = ["${project.buildDir}/generated-sources/xjc",'src/main/java']
}
resources {
srcDirs = ['src/main/resources']
}
}
}
dependencies {
jaxb 'org.jvnet.jaxb2_commons:jaxb2-basics-ant:1.11.1'
jaxb 'org.jvnet.jaxb2_commons:jaxb2-basics:1.11.1'
jaxb 'org.jvnet.jaxb2_commons:jaxb2-basics-annotate:1.1.0'
jaxb 'org.glassfish.jaxb:jaxb-xjc:2.2.11'
jaxb 'org.glassfish.jaxb:jaxb-runtime:2.2.11'
jaxb 'javax.xml.bind:jaxb-api:2.2.11'
jaxb 'org.slf4j:slf4j-nop:1.7.30'
}
jaxb {
xsdDir = "${project.projectDir}/src/main/xsd"
xjc {
generateEpisodeFiles = false
taskClassname = "org.jvnet.jaxb2_commons.xjc.XJC2Task"
generatePackage = "org.apache.maven.model"
args = ["-Xinheritance", "-Xannotate"]
}
}
compileJava.dependsOn 'xjc'
- Gradle 版本:2.3(这是我必须使用的版本)
- JDK版本:1.8.0_311
命令:gradle build
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是一个不使用特定插件的示例(仅
java
),以及 jaxb-xjc 的 v4:(配置需要
maven-4.0.0.xsd
位于src/main/resources
中)使用
./gradlewgenerateSources< 运行/code> (使用 Gradle v7.4.2 验证)。
Here is an example without using specific plugins (just
java
), and v4 of jaxb-xjc:(config expects
maven-4.0.0.xsd
to be insrc/main/resources
)Run with
./gradlew generateSources
(verified with Gradle v7.4.2).