使用 Gradle,Apache cxf WSDLToJava 生成的源代码将无法编译 - 缺少 jakarta 包,但依赖项已被引用

问题描述 投票:0回答:0

编译生成的Java 时找不到Jakarta 包。 模块的 build.gradle 中引用了 Jakarta 依赖项:

plugins {
    id 'java-library'
}
configurations {
    wsdl2java
}

dependencies {
    wsdl2java 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.0'
    wsdl2java 'com.sun.xml.bind:jaxb-ri:4.0.2'
    wsdl2java 'com.sun.xml.bind:jaxb-xjc:4.0.2'
    wsdl2java 'com.sun.xml.bind:jaxb-core:4.0.2'
    wsdl2java 'com.sun.xml.bind:jaxb-impl:4.0.2'
    wsdl2java 'org.apache.cxf:cxf-tools-wsdlto-core:4.0.0'
    wsdl2java 'org.apache.cxf:cxf-tools-wsdlto-frontend-jaxws:4.0.0'
    wsdl2java 'org.apache.cxf:cxf-tools-wsdlto-databinding-jaxb:4.0.0'
}

Gradle 生成代码包括

classpath configurations.wsdl2java

生成的示例代码包括无法解析的导入

import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlType;

当任务尝试编译时,错误是:

error: package jakarta.xml.bind.annotation does not exist
import jakarta.xml.bind.annotation.XmlAccessType;

然而,所有这些都应该包含在

jakarta.xml.bind:jakarta.xml.bind-api:4.0.0

完整的 build.gradle 文件是:

plugins {
    id 'java-library'
}
configurations {
    wsdl2java
}

dependencies {
    wsdl2java 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.0'
    wsdl2java 'com.sun.xml.bind:jaxb-ri:4.0.2'
    wsdl2java 'com.sun.xml.bind:jaxb-xjc:4.0.2'
    wsdl2java 'com.sun.xml.bind:jaxb-core:4.0.2'
    wsdl2java 'com.sun.xml.bind:jaxb-impl:4.0.2'
    wsdl2java 'org.apache.cxf:cxf-tools-wsdlto-core:4.0.0'
    wsdl2java 'org.apache.cxf:cxf-tools-wsdlto-frontend-jaxws:4.0.0'
    wsdl2java 'org.apache.cxf:cxf-tools-wsdlto-databinding-jaxb:4.0.0'
}

def allmyWsdl = task allmyWsdl {
    String[] wsdls = ["one", "two", "three"];

    wsdls.each {name->
        def thing = task "myWsdl${name}" (type: JavaExec) {
            // Defining these mean the task can run incrementally
            inputs.files("${projectDir}/src/main/resources")
            outputs.dir("${projectDir}/out/generated-sources/cxf-ws")

            String wsdl = "${projectDir}/src/main/resources/wsdls/${name}.wsdl"
            String genSrcDir = "${projectDir}/out/generated-sources/cxf-ws"

            inputs.file wsdl
            outputs.dir genSrcDir

            classpath configurations.wsdl2java
            main "org.apache.cxf.tools.wsdlto.WSDLToJava"

            args '-client', '-impl', '-exsh', 'true', '-noAddressBinding', '-autoNameResolution', "-wsdlLocation", "classpath:wsdls/${name}.wsdl", '-p', "com.my.webservices.${name}", '-encoding', 'UTF-8', '-d', genSrcDir, wsdl

            final OutputStream baos = new ByteArrayOutputStream()
            errorOutput = new OutputStream() {
                void write(int b) {System.err.write(b); baos.write(b) }
                void flush() { System.err.flush(); baos.flush() }
                void close() { System.err.close(); baos.close() }
            }

            doLast {
                def str = baos.toString()
                if (str.contains('Usage : wsdl2java') || str.contains('WSDLToJava Error')) {
                    throw new TaskExecutionException(tasks[name],
                            new IOException('Apache CXF WSDLToJava has failed. Please see System.err output.'))
                }
            }
        }
    }
}

allmyWsdl.dependsOn(tasks.matching { task -> task.name.startsWith( 'myWsdl' ) } )
compileJava.dependsOn += allmyWsdl
sourceSets.main.java.srcDirs += 'out/generated-sources/cxf-ws'
java gradle cxf java-11
© www.soinside.com 2019 - 2024. All rights reserved.