我正在尝试使用以下代码生成Java类,但是由于某些gradle插件问题而失败。

我搜索了它,发现有许多插件可用于从xsd生成分类的java,但是只有很少的plugins可用于生成wsdl的代码形式。jaxb是我想使用的其中之一。

这是我的build.gradle文件:

configurations {
    jaxws
}
buildscript {
    ext {
        springBootVersion = "2.1.4.RELEASE"
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion"
        jaxws 'com.sun.xml.ws:jaxws-tools:2.1.4'
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.springframework.boot:spring-boot-starter-actuator'
    compile 'org.springframework.boot:spring-boot-starter-web'
    compile 'org.springframework.boot:spring-boot-starter-web-services'
    compile 'org.apache.httpcomponents:httpclient'
    compile 'com.sun.xml.ws:jaxws-tools:2.1.4'
}

task wsimport {
    ext.destDir = file("${projectDir}/src/main/generated")
    doLast {
        ant {
            sourceSets.main.output.classesDir.mkdirs()
            destDir.mkdirs()
            taskdef(name: 'wsimport',
                    classname: 'com.sun.tools.ws.ant.WsImport',
                    classpath: configurations.jaxws.asPath
            )
            wsimport(keep: true,
                    destdir: sourceSets.main.output.classesDir,
                    sourcedestdir: destDir,
                    extension: "true",
                    verbose: "false",
                    quiet: "false",
                    package: "com.abc.test",
                    xnocompile: "true",
                    wsdl: '${projectDir}/src/main/resources/wsdls/wsdl_1.0.0.wsdl') {
                xjcarg(value: "-XautoNameResolution")
            }
        }
    }
}

compileJava {
    dependsOn wsimport
    source wsimport.destDir
}
bootJar {
    baseName = 'API'
    version = '1.0'

}

现在这是我尝试使用命令行构建项目时遇到的错误。
C:\DEV\workspace\API>gradlew clean build --stacktrace

FAILURE: Build failed with an exception.

* Where:
Build file 'C:\DEV\workspace\API\build.gradle' line: 14

* What went wrong:
A problem occurred evaluating root project 'API'.
> Could not find method jaxws() for arguments [com.sun.xml.ws:jaxws-tools:2.1.4] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

引用此代码;
https://gist.github.com/ae6rt/8883335

最佳答案

configurations {
    jaxws
}

buildscript {
    dependencies {
        jaxws 'com.sun.xml.ws:jaxws-tools:2.1.4'
    }
}

配置jaxws不适用于构建脚本依赖项。首先,将其放置在buildscript配置之外,因此不可见。其次,构建脚本依赖项仅允许classpath配置(External dependencies for the build script)。从构建脚本依赖项中删除jaxws 'com.sun.xml.ws:jaxws-tools:2.1.4'可解决问题



下一个问题是您将jax-ws依赖项定义为
compile 'com.sun.xml.ws:jaxws-tools:2.1.4'

并尝试引用为
taskdef(name: 'wsimport',
        classname: 'com.sun.tools.ws.ant.WsImport',
        classpath: configurations.jaxws.asPath)
                                  ^^^^^
jaxws配置到目前为止尚未定义依赖项,因此路径为空。将相关依赖项更改为
jaxws 'com.sun.xml.ws:jaxws-tools:2.1.4'

可能会为您解决此问题。

更新

由于Gradle用File classesDir替换了FileCollection classesDirs,根据您的评论,您现在收到错误



在线
sourceSets.main.output.classesDirs.mkdirs()

如果只有1个类的输出目录,则可以使用一种解决方法
sourceSets.main.output.classesDirs.singleFile.mkdirs()

(来自:FileCollection.getSingleFile())

10-04 11:39