2

最近gradle 1.5でリリースされた新しいSonar Runnerタスクを試しています。私がやりたいことは、ソナー ランナー タスクを別のタスクに依存させて、このプロジェクトのソナー プロパティを正しく設定できるようにすることです (つまり、sonar.sources、sonar.binaries、sonar.libraries、sonar.java.source)。 、sonar.java.target)。

具体的には、ant init タスクが実行されたときにこれらの値を提供する bnd という osgi ビルド ツールを使用しています (デフォルトの bnd build.xml ファイルを含めている間、私の完全なビルドは実際には gradle を使用して行われていることに注意してください)。

これを行うことでソナーランナータスクをカスタマイズできると思いました(これはマルチモジュールビルドです):

subprojects {
    sonarRunner.dependsOn init
}

最終的に次のようなものを追加します(bnd ant変数について私が理解していることから):

subprojects {
    sonarRunner {
        sonarProperties {
            property "sonar.java.source", ant.property["project.sourcepath"]
            property "sonar.java.target", ant.property["project.output"]
            property "sonar.sources", ant.property["project.allsourcepath"]
            property "sonar.libraries", ant.property["project.buildpath"]
        }
    }

    sonarRunner.dependsOn init
}

残念ながら、dependsOn を追加しようとすると、エラーが発生します。

* What went wrong:
A problem occurred evaluating root project 'myproject'.
> Could not find property 'init' on project ':com.company.myproject.mymodule'.

sonarRunner を gradle タスクに依存させようとすると、次のエラーが発生します。

* What went wrong:
A problem occurred evaluating root project 'myproject'.
> Could not find method dependsOn() for arguments [task ':gradletask'] on org.gradle.api.sonar.runner.SonarRunnerExtension_Decorated@c4d7c0c.

ここで明らかな何かが欠けていますか?誰かが私を正しい方向に向けることができれば、それは大きな助けになるでしょう.

4

3 に答える 3

10

タスクを呼び出すことができないという問題は、プラグインが拡張機能とタスクのdependsOn()両方sonarRunnerを定義しているという事実に起因しています。gradleビルドファイルでオブジェクトが名前で解決されると、拡張機能がタスクよりも優先されるように見えるため、スタックトレースは、タスクインスタンスで呼び出すのではなく、インスタンスで呼び出そうとしていることを示しています。sonarRunnersonarRunnerdependsOn()org.gradle.api.sonar.runner.SonarRunnerExtension_DecoratedSonarRunner

タスク コンテナーから明示的にタスクを取得した場合は問題ないと思います。

tasks.sonarRunner.dependsOn init
于 2013-04-07T17:07:06.767 に答える
5

ルート プロジェクトの gradle ファイルは、子プロジェクトの gradle ファイルの前に評価されます。つまり、init は、アドレス指定しようとする場所に存在しません。

ルート プロジェクトで依存関係を宣言する場合の回避策は、 http: //www.gradle.org/docs/current/userguide/build_lifecycle.html で説明されているように afterEvaluate を使用することです。

subprojects {
    afterEvaluate{
        sonarRunner.dependsOn init
    }
}

別の解決策は、直接、または別のルート gradle ファイルを適用して、サブ プロジェクトに依存関係を追加することです。

apply from: '../sonardependency.gradle'
于 2013-04-06T20:23:35.003 に答える