2015-11-11 278 views
2

我正在使用教程https://spring.io/guides/gs/producing-web-service/#initial来尝试生成SOAP Web服务。我正在使用Gradle来管理我的依赖关系。Gradle构建失败

我有一个.xsd文件,它指定了我想要gradle创建的某些类。

然而,当我尝试在Eclipse中的build.gradle文件运行gradle这个构建我得到以下错误:

FAILURE: Build failed with an exception. 

* Where: 
Build file 'C:\Users\zekucukkose\workspace2\gs-producing-web-service-initial\build.gradle' 
line: 32 

* What went wrong: 
A problem occurred evaluating root project 'gs-producing-web-service-initial'. 

> Could not find method jaxb() for arguments [com.sun.xml.bind:jaxb-xjc:2.2.4-1] 
on root project 'gs-producing-web-service-initial'. 

第27行到34如下:

27 dependencies { 
28 compile("org.springframework.boot:spring-boot-starter-web") 
29  compile("org.springframework.boot:spring-boot-starter-ws") 
30 testCompile("org.springframework.boot:spring-boot-starter-test") 
31 compile("wsdl4j:wsdl4j:1.6.1") 
32 jaxb("com.sun.xml.bind:jaxb-xjc:2.2.4-1") 
33 compile(files(genJaxb.classesDir).builtBy(genJaxb)) 
34 } 

就我所知,jaxb是用来生成实际类的。

如果有人可以帮忙,我会很感激。 感谢

这是整个脚本:

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.7.RELEASE") 
    } 
} 

apply plugin: 'java' 
apply plugin: 'eclipse' 
apply plugin: 'idea' 
apply plugin: 'spring-boot' 

jar { 
    baseName = 'gs-producing-web-service' 
    version = '0.1.0' 
} 

repositories { 
    mavenCentral() 
} 

sourceCompatibility = 1.8 
targetCompatibility = 1.8 

dependencies { 
    compile("org.springframework.boot:spring-boot-starter-web") 
     compile("org.springframework.boot:spring-boot-starter-ws") 
    testCompile("org.springframework.boot:spring-boot-starter-test") 
    compile("wsdl4j:wsdl4j:1.6.1") 
    jaxb("com.sun.xml.bind:jaxb-xjc:2.2.4-1") 
    compile(files(genJaxb.classesDir).builtBy(genJaxb)) 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = '2.3' 
} 

task genJaxb { 
    ext.sourcesDir = "${buildDir}/generated-sources/jaxb" 
    ext.classesDir = "${buildDir}/classes/jaxb" 
    ext.schema = "src/main/resources/countries.xsd" 

    outputs.dir classesDir 

    doLast() { 
     project.ant { 
      taskdef name: "xjc", classname: "com.sun.tools.xjc.XJCTask", 
        classpath: configurations.jaxb.asPath 
      mkdir(dir: sourcesDir) 
      mkdir(dir: classesDir) 

      xjc(destdir: sourcesDir, schema: schema) { 
       arg(value: "-wsdl") 
       produces(dir: sourcesDir, includes: "**/*.java") 
      } 

      javac(destdir: classesDir, source: 1.6, target: 1.6, debug: true, 
        debugLevel: "lines,vars,source", 
        classpath: configurations.jaxb.asPath) { 
       src(path: sourcesDir) 
       include(name: "**/*.java") 
       include(name: "*.java") 
      } 

      copy(todir: classesDir) { 
       fileset(dir: sourcesDir, erroronmissingdir: false) { 
        exclude(name: "**/*.java") 
       } 
      } 
     } 
    } 
} 

configurations { 
    jaxb 
} 

jar { 
    baseName = 'gs-producing-web-service' 
    version = '0.1.0' 
    from genJaxb.classesDir 
} 
+0

从命令行启动gradle时是否显示错误?在构建过程中,您期望使用哪个版本的JDK?您是否确定在每种情况下都使用适当的JAVA_HOME启动gradle? –

+0

嗨Jorge_b,我有一个eclipse的gradle插件,所以我没有从命令行运行。我正在使用JDK 1.8,并已设置使用它。还有其他建议吗?谢谢,Zeki。 – Zekik64

回答

5

您需要添加jaxb作为配置。这样:

configurations { 
    jaxb 
} 

您能否提供整个脚本?还是项目来源?

+0

嗨欧泊,我编辑了原来的问题,并附上了整个剧本。我已经配置部分,它不工作。谢谢。 – Zekik64

+0

@ Zekik64,其实排序很重要。在'dependencies'之前移动'configurations'块。 'genJaxb'任务会出现类似的问题。 – Opal

+0

修复了那个错误谢谢!但现在我收到一个错误,“失败:生成失败,出现异常 *出错了: 在配置任务':startScripts'时发现问题 >未指定值' mainClassName' “ – Zekik64

1

dependencies部分之前移动task genJaxb