<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.google.truth</groupId>
  <artifactId>truth-parent</artifactId>
  <version>1.4.5</version>
  <packaging>pom</packaging>
  <name>Truth (Parent)</name>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

    <!-- Properties for multiple-artifact deps. -->
    <auto-value.version>1.11.0</auto-value.version>
    <!--
      We have a separate property for each flavor of Guava (instead of a shared
      version without the -android and -jre suffixes) because that lets
      Dependabot update our Guava versions.
    -->
    <guava.android.version>33.4.3-android</guava.android.version>
    <!--
      Also, we have this comment in between the 2 flavors of Guava. That's
      also to smooth the Dependabot update process: Dependabot generates a
      separate PR for each flavor. Even if we approve both at the same
      time, one gets submitted before the other, and
      the other ends up with a merge conflict. That requires reapprovals.
    -->
    <guava.jre.version>33.4.3-jre</guava.jre.version>
    <gwt.version>2.11.0</gwt.version>
    <protobuf.version>4.32.0</protobuf.version>
    <!-- Property for protobuf-lite protocArtifact, which isn't a "normal" Maven dep. -->
    <!-- TODO(cpovirk): Use protobuf.version instead. But that requires finding the new way to request the Lite runtime. -->
    <protobuf-lite.protoc.version>3.1.0</protobuf-lite.protoc.version>

    <!-- Property for an extension, since Maven doesn't have extensionManagement. -->
    <os-maven-plugin.version>1.7.1</os-maven-plugin.version>

    <!-- Default to no additional options (for Java 8). Overridden by a profile. -->
    <conditionalJavadoc9PlusOptions></conditionalJavadoc9PlusOptions>
  </properties>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.google.truth</groupId>
        <artifactId>truth</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>com.google.truth.extensions</groupId>
        <artifactId>truth-liteproto-extension</artifactId>
        <version>${project.version}</version>
      </dependency>
      <!--
        We could add the other modules of Truth, but there's no need because no
        modules depend on them yet.
        -->
      <dependency>
        <!--
          In addition to setting the version of Guava that's used when Truth
          depends directly on com.google.common:guava, this section also
          overrides the version that's pulled in transitively by guava-gwt
          (which is a test-scope dependency of core Truth). The Guava APIs
          "missing" in guava-android might cause us problems down the line if we
          actually started to run nontrivial GWT tests; I'm not sure.
          -->
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>${guava.android.version}</version>
      </dependency>
      <dependency>
        <groupId>org.jspecify</groupId>
        <artifactId>jspecify</artifactId>
        <version>1.0.0</version>
      </dependency>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
      </dependency>
      <dependency>
        <groupId>org.gwtproject</groupId>
        <artifactId>gwt-user</artifactId>
        <version>${gwt.version}</version>
      </dependency>
      <dependency>
        <groupId>org.gwtproject</groupId>
        <artifactId>gwt-dev</artifactId>
        <version>${gwt.version}</version>
      </dependency>
      <dependency>
        <groupId>com.google.auto.value</groupId>
        <artifactId>auto-value-annotations</artifactId>
        <version>${auto-value.version}</version>
      </dependency>
      <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava-gwt</artifactId>
        <version>${guava.jre.version}</version>
      </dependency>
      <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava-testlib</artifactId>
        <version>${guava.android.version}</version>
      </dependency>
      <dependency>
        <groupId>com.google.errorprone</groupId>
        <artifactId>error_prone_annotations</artifactId>
        <version>2.41.0</version>
      </dependency>
      <dependency>
        <groupId>com.google.protobuf</groupId>
        <artifactId>protobuf-java</artifactId>
        <version>${protobuf.version}</version>
      </dependency>
      <dependency>
        <groupId>com.google.protobuf</groupId>
        <artifactId>protobuf-lite</artifactId>
        <version>3.0.1</version>
      </dependency>
      <dependency>
        <groupId>com.google.re2j</groupId>
        <artifactId>re2j</artifactId>
        <version>1.8</version>
      </dependency>
      <dependency>
        <groupId>org.ow2.asm</groupId>
        <artifactId>asm</artifactId>
        <version>9.8</version>
      </dependency>
      <dependency>
        <groupId>com.google.jsinterop</groupId>
        <artifactId>jsinterop-annotations</artifactId>
        <version>2.0.0</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <description>
    Parent metadata for Truth, a Java assertion framework.
  </description>
  <modules>
    <module>core</module>
    <module>extensions</module>
  </modules>
  <prerequisites><maven>3.1.1</maven></prerequisites>
  <developers>
    <developer>
      <id>cgruber</id>
      <name>Christian Gruber</name>
      <email>christianedwardgruber@gmail.com</email>
    </developer>
    <developer>
      <id>kak</id>
      <name>Kurt Alfred Kluever</name>
    </developer>
    <developer>
      <id>dsaff</id>
      <name>David Saff</name>
    </developer>
    <developer>
      <id>hagbard</id>
      <name>David B</name>
    </developer>
    <developer>
      <id>bendoug</id>
      <name>Ben Douglass</name>
    </developer>
    <developer>
      <id>dploch</id>
      <name>Daniel Ploch</name>
    </developer>
    <developer>
      <id>jnyman</id>
      <name>Jens Nyman</name>
    </developer>
    <developer>
      <id>peteg</id>
      <name>Pete Gillin</name>
    </developer>
    <developer>
      <id>pcloudy</id>
      <name>Yun Peng</name>
    </developer>
  </developers>
  <url>http://github.com/google/truth</url>
  <licenses>
    <license>
      <name>The Apache Software License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
    </license>
  </licenses>
  <issueManagement>
    <system>Github</system>
    <url>https://github.com/google/truth/issues</url>
  </issueManagement>
  <ciManagement>
    <system>Jenkins</system>
    <url>https://travis-ci.org/google/truth</url>
  </ciManagement>
  <scm>
    <connection>scm:git:git@github.com:google/truth.git</connection>
    <url>scm:git:git@github.com:google/truth.git</url>
  </scm>
  <distributionManagement>
    <snapshotRepository>
      <id>sonatype-nexus-snapshots</id>
      <url>https://central.sonatype.com/repository/maven-snapshots/</url>
    </snapshotRepository>
  </distributionManagement>
  <build>
    <pluginManagement>
      <plugins>
        <!-- https://stackoverflow.com/a/51093732/28465 -->
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.21.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.9.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>3.11.3</version>
          <configuration>
            <additionalOptions>
              <additionalOption>-Xdoclint:-html ${conditionalJavadoc9PlusOptions}</additionalOption>
            </additionalOptions>
            <doctitle>Truth ${project.version}</doctitle>
            <windowtitle>Truth ${project.version}</windowtitle>
            <quiet>true</quiet>
            <notimestamp>true</notimestamp>
            <encoding>UTF-8</encoding>
            <docencoding>UTF-8</docencoding>
            <charset>UTF-8</charset>
            <overview>overview.html</overview>
            <detectJavaApiLink>false</detectJavaApiLink>
            <offlineLinks>
              <!-- We use offlineLink here for reasons discussed in the Guava pom.xml. -->
            <offlineLink>
              <url>https://javadoc.io/doc/com.google.j2objc/j2objc-annotations/latest/</url>
              <location>${project.basedir}/javadoc-link/j2objc-annotations</location>
            </offlineLink>
            </offlineLinks>
            <links>
              <link>https://guava.dev/releases/snapshot-jre/api/docs</link>
              <link>https://protobuf.dev/reference/java/api-docs/</link>
              <link>https://junit.org/junit4/javadoc/latest/</link>
              <link>https://docs.oracle.com/en/java/javase/21/docs/api/</link>
              <link>https://jspecify.dev/docs/api/</link>
              <link>https://errorprone.info/api/latest/</link>
            </links>
            <sourceFileExcludes>
              <sourceFileExclude>**/super/**/*.java</sourceFileExclude>
            </sourceFileExcludes>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.4.2</version>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>animal-sniffer-maven-plugin</artifactId>
          <version>1.24</version>
          <configuration>
            <annotations>com.google.common.truth.IgnoreJRERequirement</annotations>
            <signature>
              <groupId>com.toasttab.android</groupId>
              <artifactId>gummy-bears-api-23</artifactId>
              <version>0.12.0</version>
              <!-- TODO(cpovirk): In principle, it would make sense to *also* test compatibility with JDK 1.8, since Truth also has JRE users. -->
            </signature>
          </configuration>
          <executions>
            <execution>
              <id>check-java-version-compatibility</id>
              <phase>test</phase>
              <goals>
                <goal>check</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.14.0</version>
          <configuration>
            <source>1.8</source>
            <target>1.8</target>
            <parameters>true</parameters>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-source-plugin</artifactId>
          <version>3.3.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-gpg-plugin</artifactId>
          <version>3.2.8</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>3.5.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-enforcer-plugin</artifactId>
          <version>3.6.1</version>
          <executions>
            <execution>
              <id>enforce</id>
              <configuration>
                <rules>
                  <requireUpperBoundDeps>
                    <excludes>
                      <!-- We have some deps on guava-android and others on guava-jre. -->
                      <exclude>com.google.guava:guava</exclude>
                    </excludes>
                  </requireUpperBoundDeps>
                  <!--
                    Note that this rule would not catch a conflict between, say,
                    java8 and liteproto, since no Truth module depends on both
                    of those. If we wanted, we could create such a module.
                    -->
                </rules>
              </configuration>
              <goals>
                <goal>enforce</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>gwt-maven-plugin</artifactId>
          <version>2.10.0</version>
        </plugin>
        <plugin>
          <groupId>org.xolstice.maven.plugins</groupId>
          <artifactId>protobuf-maven-plugin</artifactId>
          <version>0.6.1</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
  <profiles>
    <profile>
      <id>sonatype-oss-release</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-gpg-plugin</artifactId>
            <executions>
              <execution>
                <id>sign-artifacts</id>
                <phase>verify</phase>
                <goals><goal>sign</goal></goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <artifactId>maven-source-plugin</artifactId>
            <executions>
              <execution>
                <id>attach-sources</id>
                <goals><goal>jar</goal></goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <artifactId>maven-javadoc-plugin</artifactId>
            <executions>
              <execution>
                <id>attach-docs</id>
                <goals><goal>jar</goal></goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.sonatype.central</groupId>
            <artifactId>central-publishing-maven-plugin</artifactId>
            <version>0.8.0</version>
            <extensions>true</extensions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>javadocs-jdk9plus</id>
      <activation>
        <jdk>[9,)</jdk>
      </activation>
      <properties>
        <conditionalJavadocOptions>--frames</conditionalJavadocOptions>
      </properties>
    </profile>
  </profiles>
</project>
