2016-09-21 2 views
0

私のプロジェクトはいくつかのモジュールに分割されています:Spring-WSはjarパッケージ化後に動作しません

実際のWebサービスを含むサブモジュール。サブモジュールに依存し、独自の@SpringBootApplicationクラスを定義

いくつかのモジュール:

version '1.0' 

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

sourceCompatibility = 1.8 

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

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile project(':submodule') 
} 

jar { 
    baseName = 'jarfilename' 
} 

問題はjarファイルが実行されたときにサブモジュールのJAXBタスクによって生成されたクラスにアクセスできないことになりました。

javax.xml.bind.JAXBException: "bws.wsdl" doesnt contain ObjectFactory.class or jaxb.index 
     at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:266) ~[na:1.8.0_91] 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_91] 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_91] 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_91] 
     at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_91] 
     at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:171) ~[na:1.8.0_91] 
     at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:131) ~[na:1.8.0_91] 
     ... 31 common frames omitted 

プロジェクトはIDE(Intellij Idea)からうまく動作します。

サブモジュールのbuild.gradleは以下のようになります。

version '1.0' 

apply plugin: 'java' 

sourceCompatibility = 1.8 

configurations { 
    jaxb 
} 

repositories { 
    mavenCentral() 
} 

// tag::wsdl[] 
task genJaxb { 
    ext.sourcesDir = "${buildDir}/generated-sources/jaxb" 
    ext.classesDir = "${buildDir}/classes/jaxb" 
    ext.schema = "path-to-wsdl.xml" 
    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, 
        package: "wsdl") { 
       arg(value: "-wsdl") 
       produces(dir: sourcesDir, includes: "**/*.java") 
      } 

      javac(destdir: classesDir, source: 1.8, target: 1.8, 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") 
       } 
      } 
     } 
    } 
} 

dependencies { 
    compile(files(genJaxb.classesDir).builtBy(genJaxb)) 

    jaxb "com.sun.xml.bind:jaxb-xjc:2.1.7" 
} 

task afterEclipseImport { 
    dependsOn genJaxb 
} 

答えて

0

は、私は単純に生成されたクラスを含めるのを忘れ判明:

jar { 
    baseName = 'jarfilename' 
    from "${rootDir}/submodule/build/classes/jaxb" 
} 
関連する問題