<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.checkerframework</groupId>
  <artifactId>MavenExample</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>MavenExample</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <checkerFrameworkVersion><!-- checker-framework-version -->3.2.0<!-- /checker-framework-version --></checkerFrameworkVersion>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <!-- Annotations from the Checker Framework: nullness, interning, locking, ... -->
    <dependency>
      <groupId>org.checkerframework</groupId>
      <artifactId>checker-qual</artifactId>
      <version>${checkerFrameworkVersion}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.1</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.4</version>
        <scope>provided</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
          <!-- This plugin will set properties values using dependency information -->
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <executions>
              <execution>
                  <goals>
                      <goal>properties</goal>
                  </goals>
              </execution>
          </executions>
      </plugin>
      <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.1</version>
          <configuration>
              <fork>true</fork>
              <release>11</release>
              <showWarnings>true</showWarnings>
              <annotationProcessorPaths>
                <path>
                  <groupId>org.checkerframework</groupId>
                  <artifactId>checker</artifactId>
                  <version>${checkerFrameworkVersion}</version>
                </path>
                <!--
                  When using the Subtyping Checker, any custom type qualifiers must be in a
                  separate pre-compiled module; see
                  https://checkerframework.org/manual/#subtyping-compiling .
                  Once <annotationProcessorPaths> is defined, it is the only source for
                  classpath lookup; see
                  https://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#annotationProcessorPaths .
                -->
                <!-- <path> -->
                <!--   <groupId>your.qual.group</groupId> -->
                <!--   <artifactId>your-qual-artifact</artifactId> -->
                <!--   <version>your-qual-artifact-version</version> -->
                <!-- </path> -->
              </annotationProcessorPaths>
              <annotationProcessors>
                  <!-- Add all the checkers you want to enable here -->
                  <annotationProcessor>org.checkerframework.checker.nullness.NullnessChecker</annotationProcessor>
              </annotationProcessors>
              <compilerArgs>
                  <arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
                  <!-- -Awarns treats Checker Framework errors as warnings -->
                  <!-- <arg>-Awarns</arg> -->
                  <!--
                    For the Subtyping Checker, annotations defined in module 'your-qual-artifact':
                    <arg>-Aquals=myPackage.qual.MyFenum,myPackage.qual.MyCustomType</arg>
                  -->
                  <arg>-Alint</arg>
              </compilerArgs>
          </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-site-plugin</artifactId>
        <version>3.2</version>
      </plugin>
    </plugins>
  </build>

  <reporting>
    <excludeDefaults>true</excludeDefaults>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jxr-plugin</artifactId>
        <version>2.1</version>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>findbugs-maven-plugin</artifactId>
        <version>3.0.3</version>
        <configuration>
          <findbugsXmlOutput>true</findbugsXmlOutput>
          <findbugsXmlWithMessages>true</findbugsXmlWithMessages>
          <includeTests>true</includeTests>
          <xmlOutput>true</xmlOutput>
        </configuration>
      </plugin>
    </plugins>
  </reporting>

</project>
