4

これは奇妙な質問ですが、理論的ではありません...

  1. buildSrcJava プロジェクトを内部に使用する Gradle プロジェクトを作成したいと考えています。その Java プロジェクトは、ビルド プロセスで使用されるいくつかのクラスを定義します。

  2. 厄介なトリックは、Gradle プロジェクト が、それ自体の Java プロジェクトに属する変更されたbuildSrcクラスを含む、一連の出力を生成することです。

これをGradleで表現する方法はありますか?

私が今考えている唯一の解決策は、ビルド スクリプト全体を 2 回続けて実行することです。それを回避する方法はありますか?たとえば、 の変更されたコードを生成しbuildSrc、 を再コンパイルしてbuildSrcから、メインの Gradle プロジェクトの追加出力を生成しますか?

4

2 に答える 2

2

さて、Michael Easter のすばらしい例に基づいて構築すると、メインレベルのビルドGradleBuildで独自のタスクの 1 つを呼び出すことができます。

task generateNewCode() << {
  println("tracer top build")

  // BuildTool is a Java class defined in `buildSrc`
  // ... and it has a cyclic dependency on its own 
  // output (eek -- but that's what I'm dealing with!)
  BuildTool.generateNewCode();
}

task generateDocs(type: GradleBuild) {
  buildFile='build.gradle'
  tasks = ['generateDocs_Real']
}

task generateDocs_Real << {
  BuildTool.outputDocumentation();
}

generateDocs.dependsOn generateNewCode

次に、次のことを呼び出すことができgradle generateDocsます。

  1. Codegen (での新しい Java クラスの作成buildSrc
  2. 再コンパイルbuildSrc
  3. 再コンパイルされたヘルパーを使用してドキュメントを生成しますbuidSrc
于 2013-09-25T16:50:59.383 に答える
1

Gradle docのセクション 59.4が役立つと思います。

Gradle 1.8 を使用して、「ビルドから別の Gradle ビルドを実行」しようとしました。他の Gradle ビルドは buildSrc です。

これにはコード生成は含まれませんが、これで十分かもしれません。

複製するために、buildSrc に単純な Java プロジェクトがあり、build.gradle は次のようになります。

apply plugin: 'java'

build << { 
    println "TRACER: hello from buildSrc java build"
}

task compile2() << {
    println "TRACER: hello from buildSrc compile2"
}

「ビルド」タスクは、buildSrc メカニズムを介して自動的に呼び出されます。目標は、ルートから「compile2」を呼び出すことです。ルートでは、build.gradle は次のようになります。

task build1() << {
    println "TRACER: top-level build1" 
}

task build2(type: GradleBuild) {
    buildFile = 'buildSrc/build.gradle'
    tasks = ['compile2']
}

build2.dependsOn build1

ルート レベルでは、出力は次のようになります。

$ gradle build2

:buildSrc:compileJava etc etc
TRACER: hello from buildSrc java build
TRACER: top-level build1
TRACER: hello from buildSrc compile2

これは、次のことを示しています。

  • buildSrc の Java プロジェクトがコンパイルされている
  • ルート 'build1' が呼び出されます (メイン プロジェクトをここでコンパイルします)。
  • buildSrc 'compile2' が呼び出されます

クラスパスとコード生成は厄介ですが、単純かもしれません。

于 2013-09-25T03:13:14.603 に答える