Checker Framework, -Xlint: все и JUnit - PullRequest
       37

Checker Framework, -Xlint: все и JUnit

0 голосов
/ 11 ноября 2018

Я с самого начала пытаюсь сохранить проект с очень чистой и строгой настройкой, включая:

  1. Использование Checker Framework .
  2. Включение всех предупреждений компилятора и их обработка как ошибки (-Xlint:all и -Werror).
  3. Использование JUnit .

Вот соответствующие части из Maven's pom.xml:

<dependencies>
    <!-- Annotations: nullness, etc -->
    <dependency>
        <groupId>org.checkerframework</groupId>
        <artifactId>checker-qual</artifactId>
        <version>${checkerframework.version}</version>
    </dependency>
    <dependency>
        <groupId>org.checkerframework</groupId>
        <artifactId>jdk8</artifactId>
        <version>${checkerframework.version}</version>
    </dependency>

    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>${junit.jupiter.version}</version>
        <scope>test</scope>
    </dependency>
</dependencies>
<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.checkerframework</groupId>
                            <artifactId>checker</artifactId>
                            <version>${checkerframework.version}</version>
                        </path>
                    </annotationProcessorPaths>
                    <annotationProcessors>
                        <!-- Add all the checkers you want to enable here -->
                        <annotationProcessor>org.checkerframework.checker.nullness.NullnessChecker
                        </annotationProcessor>
                    </annotationProcessors>
                    <compilerArgs>
                        <arg>-Xbootclasspath/p:${annotatedJdk}</arg>
                        <arg>-Xlint:all</arg>
                        <arg>-Werror</arg>
                    </compilerArgs>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M1</version>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

К сожалению, как только я представлю тестовый класс, который использует аннотацию @Test, я получу следующее предупреждение компиляции и, следовательно, ошибку сборки:

Предупреждение: java: ни один из процессоров не заявлял ни одной из этих аннотаций: org.junit.jupiter.api.Test

Как этого предупреждения можно избежать?

1 Ответ

0 голосов
/ 11 ноября 2018

Нашел решение: это конкретное предупреждение можно отключить с помощью -Xlint:-processing:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    ...
                    <compilerArgs>
                        <arg>-Xbootclasspath/p:${annotatedJdk}</arg>
                        <arg>-Xlint:all</arg>
                        <!-- Silence warning "No processor claimed any of these annotations". One of the
                        annotations that would trigger it is org.junit.jupiter.api.Test -->
                        <arg>-Xlint:-processing</arg>
                        <arg>-Werror</arg>
                    </compilerArgs>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>
...