1

この質問には、C 言語、Gradle C プラグイン、およびsplintと呼ばれる古い学校のC 静的アナライザーが含まれますが、この質問は、Gradle ビルドを実行可能プロセスに接続する方法を理解している Gradle の第一人者なら誰でも答えることができると思います。

それは非常に簡単です: 次のコマンド ラインを使用して、単純な C プロジェクトのソース コードを分析するために splint をローカルに構成しました。

splint +never-include -retvalint src/derpus/c/*.c

Gradle (C プラグイン) を介してプロジェクトのビルドを管理しており、ビルド シーケンスの適切な時点で静的解析 (スプリント) を呼び出したいと考えています (それが何であれ)。

splint はコンソールに出力されますが、残念ながら他の場所には出力されません。したがって、このコンソール出力を「フック」し、特定のキーワード (「エラー」、「警告」など) をチェックし、スプリントが何かを訴えた場合にビルドを失敗/停止できるかどうかを確認したいと思います。

そして、私はここでいくつかの問題に取り組もうとしています:

  • Gradleからスプリントを呼び出す方法、および適切な段階で? たとえば、CodeNarc が実行されるたびに (コンパイル後? テストの実行後?)、スプリントが呼び出される可能性が高くなります。
  • この呼び出しで正しいコマンドライン引数を splint に渡す方法は?
  • splint のコンソール出力をフックする方法は?
  • コンソール出力に特定のキーワードが含まれている場合にビルドを失敗させる方法は?

これまでの私の最善の試みは次のとおりです。

task check(type:Exec) {
    commandLine 'cmd', '/c', 'C:/splint-3.1.1/bin/splint.exe', '+never-include', '-retvalint', 'src/derpus/c/*.c'
    standardOutput = new ByteArrayOutputStream()

    doLast {
        String output = standardOutput.toString()
        if(output.contains("error") || output.contains("")) {
            println "Chuggington!"
        } else {
            println "Meeska! Mooseka! Mickey Mouse! Output is: ${output}"
        }
    }
}

これにより、次が生成されます。

Defining custom ▒check▒ task is deprecated when using standard lifecycle plugin has been deprecated and is scheduled to be removed in Gradle 3.0
:checkSplint 3.1.1 --- 12 April 2003

Finished checking --- no warnings

Chuggington!

BUILD SUCCESSFUL

Total time: 3.327 secs

しかし、私は 100% 自信を持って myworkingDircommandLineargs が間違っていると確信しています。その -statement 内からビルドを失敗/停止する方法がわかりません。また、このタスクをコンパイル前に実行するifように「配置」する方法もわかりません。checkテスト。

アイデアはありますか、グラドルの達人ですか?

4

1 に答える 1