1

私はgradleに不慣れで、プロジェクトの1つにWSDL2Java関連のタスクを追加したいマルチプロジェクトgradleビルドを持っています。生成、コンパイル、生成されたスタブを jar にパッケージ化し、それをクラスパスに追加するために必要なタスクをコーディングしました。さて、Java コンパイルが開始される前にこれらのタスクを実行したいと思います。

以下は、新しいタスクをどのようにコーディングしたかです

task genClasses(type: JavaExec) {
//Run WSDL2Java and generate java source files.
}

task compileClasses(dependsOn:'genClasses'){
//Use ant.javac or add type:JavaCompile in task defination as shown below
// task compileClasses(dependsOn:'genClasses',type:JavaCompile)
}

task packageClasses(dependsOn:'compileClasses',type:Jar){
//package my jar
}

task createStubs(dependsOn: 'packageClasses'){
    //add created jar to the classpath
}

compileJava.dependsOn createStubs

ビルドは例外で失敗し、以下のメッセージが表示されます

Circular dependency between tasks. Cycle includes [task ':projectx:genWsdlClasses', task ':projectx:classes'].

compileClasses タスクがどういうわけかこの循環依存を引き起こしていることがわかりましたが、それを取り除く方法がわかりませんか?

メイン ソースがビルドされる前に、このソース生成、生成されたソースのコンパイル、パッケージ化、およびメイン ソースセット クラスパスへの追加を実行するための、より優れた、または慣用的な方法はありますか?

4

2 に答える 2

1

ここで入手できる Jaxb-Plugin を使用します。私の Gradle ビルド ファイルは次のようになります。

buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    classpath 'no.entitas.gradle.jaxb:gradle-jaxb-plugin:2.0'
  } 
}

dependencies {
  jaxb 'com.sun.xml.bind:jaxb-xjc:2.2.5-1'
  jaxb 'com.sun.xml.bind:jaxb-impl:2.2.5-1'
}

generateSchemaSource.destinationPackage = "my.custom.package"

これにより、必要な jaxb クラスが作成されると思います。それは役に立ちますか?

于 2013-06-25T19:27:42.340 に答える
0

プラグイン「no.nils.wsdl2java」を使用

https://plugins.gradle.org/plugin/no.nils.wsdl2java

プラグインは、ビルド タスクとクリーン タスクへの接続を処理します。

于 2015-04-22T05:52:43.597 に答える