0

Checker Framework の使用を開始したばかりで、このフレームワークの作成者によるサンプル プロジェクトの 1 つで正確に再現可能な問題があります。このプロジェクトはこちらから入手できます: https://github.com/typetools/checker-framework/tree/master/docs/examples/GradleExamples

ルートからこのコマンドを実行すると:

>gradle compileJava

私はこのコンパイル出力を受け取ります:

       public static /*@Nullable*/ Object nullable = null;
                                                  ^

  required: @Initialized @NonNull Object

        list.add(null); // error on this line
                 ^

  required: @Initialized @NonNull String
2 errors
:compileJava FAILED

ご覧のとおり、クラス名、コードの行番号など、エラーが発生した場所に関する情報はありません。公式マニュアルには、出力形式を適切に変更できるコンパイラパラメーターに関する情報が見つかりませんでした。エラーメッセージは次のようになります。

~\GradleExample.java:33 error: ';' expected

アップデート:

3 台のマシンでこの動作を実現します。

    • OS: Microsoft Windows 7 x64 Ultimate SP1 [バージョン 6.1.7601];
    • Java: 1.8.0_73;
    • グラドル: 2.14.
    • OS: Microsoft Windows 10 x64 Pro [バージョン 10.0.14393];
    • Java: 1.8.0_121;
    • グラドル: 3.4.1.
    • OS: Microsoft Windows 7 x64 Ultimate SP1 [バージョン 6.1.7601];
    • Java: 1.8.0_121;
    • グラドル: 3.4.1.

行番号とクラス名がないのは、Gradle で実行している場合のみです。また、コマンド ラインから Maven と Javac を使用してチェッカーを実行しようとしましたが、完全に機能しました。
Gradle で Checker Framework を構成するには、マニュアルの手順に従いました。3 つのステップがあります。

  1. フレームワークをダウンロードします。
  2. それを解凍して、チェッカー フレームワーク ディレクトリを作成します。
  3. クラスパスに Checker Framework を含めるように Gradle を構成します。

私が理解しているように、Gradle は依存関係管理を通じて必要な Checker Framework の jar を提供するときに、ステップ 1 と 2 を自動的に実行します。それにもかかわらず、私は両方のオプションを試しました:

  1. 依存関係の管理:
    サンプル プロジェクトをダウンロードし、GradleJava7Example プロジェクトのルートから「gradle compileJava」を実行しました。
  2. gradleビルドファイルに手動でパスを書く:
    allprojects {

        tasks.withType(JavaCompile).all { JavaCompile compile ->

            compile.options.compilerArgs = [
            '-processor', 'org.checkerframework.checker.nullness.NullnessChecker',
            '-processorpath', "C:\\checker-framework-2.1.10\\checker\\dist\\checker.jar",
            "-Xbootclasspath/p:C:\\checker-framework-2.1.10\\checker\\dist\\jdk8.jar",
            '-classpath', 'C:\\checker-framework-2.1.10\\checker\\dist\\checker.jar;C:\\checker-framework-2.1.10\\checker\\dist\\javac.jar'
            ]
        }
    }
4

1 に答える 1