22

私は非常に優れたgradle構成を持っていたので、すべてがうまく構築されました。しかし、私のマルチプロジェクトビルドのプロジェクトの1つは、残りのプロジェクトから非常に派生しているため、喜んで別のgitリポジトリに移動し、それを処理するようにサブモジュールを構成します。

まず、Projectとそのリソースをサブフォルダーに移動しましたLibraries/MovedProject。Gradle構成でいくつかの行を変更した後、正常に機能しました。しかし、その後、このプロジェクトのためだけに新しいbuild.gradleを作成し、すべての構成をメインの構成からそこに移動することにしました。

そして、これはすべてが機能しなくなった場所です。タスクを呼び出そうとすると、常に。で終わりますCould not find property 'sourceSets' on project ':Libraries/MovedProject'。それを担当する行は次のとおりです。

dependencies {
    ...
    if (noEclipseTask) {
        testCompile project(':Libraries/MovedLibrary').sourceSets.test.output
    }
}

他のプロジェクトのクラスを使用するテストを実行するために使用します。その行を削除すると、MovedProjectを使用するプロジェクトのcompileTestJavaタスクに到達したときにのみビルドが失敗します。その行を削除して電話gradle :Libraries/MovedLibrary:propertiesをかけると、次のことがわかります。

...
sourceCompatibility: 1.7
sourceSets: [source set main, source set test]
standardOutputCapture: org.gradle.logging.internal.DefaultLoggingManager@1e263938
...  

gradle :Libraries/MovedLibrary:build正しくビルドしている間。

現在、私はすべてを次のように設定しています。

  1. ディレクトリ:

    • / SomeMainProject1
    • / SomeMainProject2
    • / SomeMainProject3
    • /ライブラリ
      • / MovedProject
        • build.gradle
        • 依存関係.gradle
        • project.gradle
        • タスク.gradle
    • /ビルダー
      • 依存関係.gradle
      • project.gradle
      • タスク.gradle
    • build.gradle
    • settings.gradle
  2. settings.gradle

    include Libraries/MovedProject,
            SomeMainProject1,
            SomeMainProject2,
            SomeMainProject3
    
  3. MovedProjectのsourceSetsは次のように定義されていLibraries/MovedProject/project.gradleます:

    sourceSets {
        main {
            java {
                srcDir 'src'
                srcDir 'resources'
            }
            resources { srcDir 'resources' }
        }
        test { java {
            srcDir 'test/unit'
        } }
    }
    
  4. sourceSets.test.outputを利用する依存関係はに格納されBuilder/dependancies.gradle、テストを実行するためにMovedProjectを必要とするプロジェクトごとに設定されます。

    project(':SomeMainProject1') {
        dependencies {
            ...
    
            if (noEclipseTask) {
                testCompile project(':Libraries/net.jsdpu').sourceSets.test.output
            }
        }
    }
    

そのエラーを取り除き、現在のディレクトリ構造でgradleビルドプロジェクトを作成する最も簡単な方法は何でしょうか?gradleがそのプロパティを表示できない理由を理解したいと思います。

4

1 に答える 1

24

:Libraries/MovedLibrary問題の行は、プロジェクトが現在のプロジェクトの前に評価される(実行されない)と想定しているため、問題がありますが、そうではない場合があります。そうでない場合は、他のプロジェクトのソースセットはまだ構成されていません。(プラグインがまだ適用されていないsourceSetsため、プロパティすらありません。)java-base

一般に、特に現在のプロジェクトの子でない場合は、他のプロジェクトのプロジェクトモデルに手を差し伸べないことが最善です。プロジェクトBのテストコードを使用するプロジェクトAの場合、推奨される解決策は、プロジェクトBにテストJarを(artifacts {}ブロックを介して)公開させ、プロジェクトAによって消費されるようにすることです。

gradle.projectsEvaluated {}そのままにしておきたい場合は、またはを使用して問題を回避できる場合がありますproject.evaluationDependsOn()。詳細については、Gradleビルド言語リファレンスを参照してください。

于 2013-03-12T12:48:45.957 に答える