<?xml version="1.0" encoding="UTF-8"?>

<!--
  ~ =============================================================================
  ~
  ~   Copyright (c) 2011-2025 Thymeleaf (http://www.thymeleaf.org)
  ~
  ~   Licensed under the Apache License, Version 2.0 (the "License");
  ~   you may not use this file except in compliance with the License.
  ~   You may obtain a copy of the License at
  ~
  ~       http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~   Unless required by applicable law or agreed to in writing, software
  ~   distributed under the License is distributed on an "AS IS" BASIS,
  ~   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~   See the License for the specific language governing permissions and
  ~   limitations under the License.
  ~
  ~ =============================================================================
  -->

<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 https://maven.apache.org/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>org.thymeleaf</groupId>
  <artifactId>thymeleaf-parent</artifactId>
  <packaging>pom</packaging>
  <version>3.1.4.RELEASE</version>
  <name>thymeleaf parent</name>
  <description>Modern server-side Java template engine for both web and standalone environments</description>
  <url>http://www.thymeleaf.org</url>

  <organization>
    <name>Thymeleaf</name>
    <url>https://www.thymeleaf.org</url>
  </organization>

  <licenses>
    <license>
      <name>The Apache Software License, Version 2.0</name>
      <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
    </license>
  </licenses>

  <developers>
    <developer>
      <name>Thymeleaf</name>
      <organization>Thymeleaf</organization>
      <organizationUrl>https://www.thymeleaf.org</organizationUrl>
    </developer>
  </developers>

  <scm>
    <url>https://github.com/thymeleaf/thymeleaf</url>
    <developerConnection>scm:git:git@github.com:thymeleaf/thymeleaf</developerConnection>
  </scm>

  <distributionManagement>
    <snapshotRepository>
      <id>central-portal-snapshots</id>
      <name>Central Portal Snapshots</name>
      <url>https://central.sonatype.com/repository/maven-snapshots/</url>
    </snapshotRepository>
  </distributionManagement>

  <repositories>
    <repository>
      <id>central-portal-snapshots</id>
      <name>Central Portal Snapshots</name>
      <url>https://central.sonatype.com/repository/maven-snapshots/</url>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
    <repository>
      <id>spring-milestones</id>
      <name>Spring Milestones</name>
      <url>https://repo.spring.io/milestone</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
    <repository>
      <id>springio-snapshots</id>
      <name>Spring Snapshots</name>
      <url>https://repo.spring.io/snapshot</url>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
  </repositories>

  <pluginRepositories>
    <pluginRepository>
      <id>spring-milestones</id>
      <name>Spring Milestones</name>
      <url>https://repo.spring.io/milestone</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </pluginRepository>
  </pluginRepositories>

  <properties>
    <java.version>8</java.version>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
    <maven.compiler.release>${java.version}</maven.compiler.release>
    <project.build.sourceEncoding>US-ASCII</project.build.sourceEncoding>
    <project.build.propertiesEncoding>ISO-8859-1</project.build.propertiesEncoding>
    <resource.delimiter>@</resource.delimiter>
    <!-- These are needed for showing the build timestamp correctly at thymeleaf.properties.    -->
    <timestamp>${maven.build.timestamp}</timestamp>
    <maven.build.timestamp.format>yyyy-MM-dd'T'HH:mm:ssZ</maven.build.timestamp.format>
    <!-- ======================     -->
    <!-- OPERATIONAL flags          -->
    <!-- ======================     -->
    <!-- Only the 'releases' profile will enable deployment of (some) artifacts.   -->
    <artifact.deploy.disabled>true</artifact.deploy.disabled>
    <!-- ======================     -->
    <!-- DEPENDENCY versions        -->
    <!-- ======================     -->
    <thymeleaf.version>${project.version}</thymeleaf.version>
    <jakarta-servlet-api.version>6.1.0</jakarta-servlet-api.version>
    <jakarta-servlet-jsp-api.version>4.0.0</jakarta-servlet-jsp-api.version>
    <jakarta-servlet-jsp-jstl-api.version>3.0.2</jakarta-servlet-jsp-jstl-api.version>
    <jakarta-validation-api.version>3.1.0</jakarta-validation-api.version>
    <jakarta-mail-api.version>2.0.1</jakarta-mail-api.version>
    <javax-servlet-api.version>4.0.1</javax-servlet-api.version>
    <javax-servlet-jsp-api.version>2.3.3</javax-servlet-jsp-api.version>
    <javax-servlet-jsp-jstl-api.version>1.2.2</javax-servlet-jsp-jstl-api.version>
    <javax-validation-api.version>2.0.1.Final</javax-validation-api.version>
    <javax-mail-api.version>1.6.2</javax-mail-api.version>
    <apache-taglibs-standard.version>1.2.5</apache-taglibs-standard.version>
    <ognl.version>3.3.4</ognl.version>
    <glassfish-jakarta-servlet-jsp-jstl.version>3.0.1</glassfish-jakarta-servlet-jsp-jstl.version>
    <attoparser.version>2.0.7.RELEASE</attoparser.version>
    <unbescape.version>1.1.6.RELEASE</unbescape.version>
    <spring-framework5.version>5.3.39</spring-framework5.version>
    <spring-framework6.version>6.2.17</spring-framework6.version>
    <spring-security5.version>5.8.16</spring-security5.version>
    <spring-security6.version>6.5.9</spring-security6.version>
    <spring-webflow2.version>2.5.1.RELEASE</spring-webflow2.version>
    <spring-webflow3.version>3.0.1</spring-webflow3.version>
    <jackson.version>2.18.2</jackson.version>
    <reactor.version>2024.0.0</reactor.version>
    <commons-lang3.version>3.20.0</commons-lang3.version>
    <commons-io.version>2.21.0</commons-io.version>
    <commons-fileupload.version>1.6.0</commons-fileupload.version>
    <hibernate-validator-jakarta.version>9.1.0.Final</hibernate-validator-jakarta.version>
    <hibernate-validator-javax.version>6.2.5.Final</hibernate-validator-javax.version>
    <mockito.version>5.23.0</mockito.version>
    <slf4j.version>2.0.17</slf4j.version>
    <log4j.version>2.25.3</log4j.version>
    <junit.version>5.14.3</junit.version>
    <!-- ======================     -->
    <!-- MAVEN PLUGIN versions      -->
    <!-- ======================     -->
    <maven-clean-plugin.version>3.5.0</maven-clean-plugin.version>
    <maven-dependency-plugin.version>3.10.0</maven-dependency-plugin.version>
    <maven-compiler-plugin.version>3.15.0</maven-compiler-plugin.version>
    <maven-resources-plugin.version>3.5.0</maven-resources-plugin.version>
    <maven-surefire-plugin.version>3.5.5</maven-surefire-plugin.version>
    <maven-failsafe-plugin.version>3.5.2</maven-failsafe-plugin.version>
    <maven-jar-plugin.version>3.5.0</maven-jar-plugin.version>
    <maven-war-plugin.version>3.5.1</maven-war-plugin.version>
    <maven-javadoc-plugin.version>3.12.0</maven-javadoc-plugin.version>
    <maven-source-plugin.version>3.4.0</maven-source-plugin.version>
    <maven-gpg-plugin.version>3.2.8</maven-gpg-plugin.version>
    <maven-deploy-plugin.version>3.1.4</maven-deploy-plugin.version>
    <maven-scm-plugin.version>2.2.1</maven-scm-plugin.version>
    <maven-antrun-plugin.version>3.2.0</maven-antrun-plugin.version>
    <maven-assembly-plugin.version>3.8.0</maven-assembly-plugin.version>
    <maven-versions-plugin.version>2.21.0</maven-versions-plugin.version>
    <maven-cargo-plugin.version>1.10.26</maven-cargo-plugin.version>
    <maven-central-publishing-plugin.version>0.10.0</maven-central-publishing-plugin.version>
  </properties>


  <dependencyManagement>
    <dependencies>

      <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf</artifactId>
        <version>${thymeleaf.version}</version>
      </dependency>

      <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf-spring5</artifactId>
        <version>${thymeleaf.version}</version>
      </dependency>

      <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf-spring6</artifactId>
        <version>${thymeleaf.version}</version>
      </dependency>

      <dependency>
        <groupId>org.thymeleaf.extras</groupId>
        <artifactId>thymeleaf-extras-springsecurity5</artifactId>
        <version>${thymeleaf.version}</version>
      </dependency>

      <dependency>
        <groupId>org.thymeleaf.extras</groupId>
        <artifactId>thymeleaf-extras-springsecurity6</artifactId>
        <version>${thymeleaf.version}</version>
      </dependency>

      <dependency>
        <groupId>org.thymeleaf.testing</groupId>
        <artifactId>thymeleaf-testing</artifactId>
        <version>${thymeleaf.version}</version>
      </dependency>

      <dependency>
        <groupId>org.thymeleaf.testing</groupId>
        <artifactId>thymeleaf-testing-spring5</artifactId>
        <version>${thymeleaf.version}</version>
      </dependency>

      <dependency>
        <groupId>org.thymeleaf.testing</groupId>
        <artifactId>thymeleaf-testing-spring6</artifactId>
        <version>${thymeleaf.version}</version>
      </dependency>

      <dependency>
        <groupId>org.thymeleaf.examples</groupId>
        <artifactId>thymeleaf-examples</artifactId>
        <version>${thymeleaf.version}</version>
        <type>pom</type>
      </dependency>

      <dependency>
        <groupId>jakarta.servlet</groupId>
        <artifactId>jakarta.servlet-api</artifactId>
        <version>${jakarta-servlet-api.version}</version>
      </dependency>

      <dependency>
        <groupId>jakarta.servlet.jsp</groupId>
        <artifactId>jakarta.servlet.jsp-api</artifactId>
        <version>${jakarta-servlet-jsp-api.version}</version>
      </dependency>

      <dependency>
        <groupId>jakarta.servlet.jsp.jstl</groupId>
        <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
        <version>${jakarta-servlet-jsp-jstl-api.version}</version>
      </dependency>

      <dependency>
        <groupId>jakarta.validation</groupId>
        <artifactId>jakarta.validation-api</artifactId>
        <version>${jakarta-validation-api.version}</version>
      </dependency>

      <dependency>
        <groupId>jakarta.mail</groupId>
        <artifactId>jakarta.mail-api</artifactId>
        <version>${jakarta-mail-api.version}</version>
      </dependency>

      <dependency>
        <groupId>com.sun.mail</groupId>
        <artifactId>jakarta.mail</artifactId>
        <version>${jakarta-mail-api.version}</version>
      </dependency>

      <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>${javax-servlet-api.version}</version>
      </dependency>

      <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>${javax-servlet-jsp-api.version}</version>
      </dependency>

      <dependency>
        <groupId>javax.servlet.jsp.jstl</groupId>
        <artifactId>javax.servlet.jsp.jstl-api</artifactId>
        <version>${javax-servlet-jsp-jstl-api.version}</version>
      </dependency>

      <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>${javax-validation-api.version}</version>
      </dependency>

      <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>javax.mail-api</artifactId>
        <version>${javax-mail-api.version}</version>
      </dependency>

      <dependency>
        <groupId>com.sun.mail</groupId>
        <artifactId>javax.mail</artifactId>
        <version>${javax-mail-api.version}</version>
      </dependency>

      <dependency>
        <groupId>org.apache.taglibs</groupId>
        <artifactId>taglibs-standard-impl</artifactId>
        <version>${apache-taglibs-standard.version}</version>
      </dependency>

      <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>jakarta.servlet.jsp.jstl</artifactId>
        <version>${glassfish-jakarta-servlet-jsp-jstl.version}</version>
      </dependency>

      <dependency>
        <groupId>ognl</groupId>
        <artifactId>ognl</artifactId>
        <version>${ognl.version}</version>
      </dependency>

      <dependency>
        <groupId>org.attoparser</groupId>
        <artifactId>attoparser</artifactId>
        <version>${attoparser.version}</version>
      </dependency>

      <dependency>
        <groupId>org.unbescape</groupId>
        <artifactId>unbescape</artifactId>
        <version>${unbescape.version}</version>
      </dependency>

      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>${commons-lang3.version}</version>
      </dependency>

      <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>${commons-io.version}</version>
      </dependency>

      <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>${commons-fileupload.version}</version>
      </dependency>

      <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>${mockito.version}</version>
      </dependency>

      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
      </dependency>

      <dependency>
        <groupId>com.fasterxml.jackson</groupId>
        <artifactId>jackson-bom</artifactId>
        <version>${jackson.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>io.projectreactor</groupId>
        <artifactId>reactor-bom</artifactId>
        <version>${reactor.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-bom</artifactId>
        <version>${log4j.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>org.junit</groupId>
        <artifactId>junit-bom</artifactId>
        <version>${junit.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

    </dependencies>
  </dependencyManagement>


  <build>

    <pluginManagement>
      <plugins>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-clean-plugin</artifactId>
          <version>${maven-clean-plugin.version}</version>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>${maven-dependency-plugin.version}</version>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>${maven-compiler-plugin.version}</version>
          <configuration>
            <!-- This will generate metadata for reflection on method parameters (JDK8+)        -->
            <parameters>true</parameters>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-resources-plugin</artifactId>
          <version>${maven-resources-plugin.version}</version>
          <configuration>
            <encoding>${project.build.sourceEncoding}</encoding>
            <propertiesEncoding>${project.build.propertiesEncoding}</propertiesEncoding>
            <delimiters>
              <!-- We set the resource delimiters to only @*@ in order to avoid the ${*} syntax -->
              <!-- colliding with properties meant to be resolved by Spring.                    -->
              <delimiter>${resource.delimiter}</delimiter>
            </delimiters>
            <useDefaultDelimiters>false</useDefaultDelimiters>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>${maven-surefire-plugin.version}</version>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-failsafe-plugin</artifactId>
          <version>${maven-failsafe-plugin.version}</version>
          <executions>
            <execution>
              <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
              </goals>
            </execution>
          </executions>
          <configuration>
            <classesDirectory>${project.build.outputDirectory}</classesDirectory>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>${maven-jar-plugin.version}</version>
          <configuration>
            <archive>
              <addMavenDescriptor>false</addMavenDescriptor>
              <manifest>
                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
              </manifest>
              <manifestEntries>
                <!-- These two entries are non-standard, specified by the Apache Software       -->
                <!-- Foundation in their release preparation procedures as a way to pass this   -->
                <!-- information on to the library users. See:                                  -->
                <!-- http://commons.apache.org/releases/prepare.html                            -->
                <X-Compile-Source-JDK>${maven.compiler.source}</X-Compile-Source-JDK>
                <X-Compile-Target-JDK>${maven.compiler.target}</X-Compile-Target-JDK>
                <!-- Set the Built-By attribute to avoid displaying specific usernames.         -->
                <Built-By>thymeleaf</Built-By>
              </manifestEntries>
            </archive>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-war-plugin</artifactId>
          <version>${maven-war-plugin.version}</version>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>${maven-javadoc-plugin.version}</version>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-source-plugin</artifactId>
          <version>${maven-source-plugin.version}</version>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-gpg-plugin</artifactId>
          <version>${maven-gpg-plugin.version}</version>
          <configuration>
            <skip>${artifact.deploy.disabled}</skip>
          </configuration>
          <executions>
            <execution>
              <id>gpg-sign</id>
              <phase>verify</phase>
              <goals>
                <goal>sign</goal>
              </goals>
              <configuration>
                <keyname>releases@thymeleaf.org</keyname>
              </configuration>
            </execution>
          </executions>
        </plugin>

        <!-- IMPORTANT: maven-deploy-plugin is skipped so that child projects   -->
        <!-- do not add it by mistake to their executions. Deployment will      -->
        <!-- always be handled by central-publishing-maven-plugin.              -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>${maven-deploy-plugin.version}</version>
          <configuration>
            <skip>true</skip>
          </configuration>
        </plugin>

        <!-- IMPORTANT: central-publishing-maven-plugin works like this:        -->
        <!--   * If there are no explicit executions configured for it, it will -->
        <!--     add an execution of its "publish" goal to the "deploy" phase,  -->
        <!--     and also search for the presence of maven-deploy-plugin and    -->
        <!--     nexus-staging-maven-plugin and REMOVE their executions, so     -->
        <!--     that only central-publishing-maven-plugin executes during      -->
        <!--     the "deploy" phase.                                            -->
        <plugin>
          <groupId>org.sonatype.central</groupId>
          <artifactId>central-publishing-maven-plugin</artifactId>
          <version>${maven-central-publishing-plugin.version}</version>
          <extensions>true</extensions>
          <configuration>
            <publishingServerId>central</publishingServerId>
            <skipPublishing>${artifact.deploy.disabled}</skipPublishing>
          </configuration>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-scm-plugin</artifactId>
          <version>${maven-scm-plugin.version}</version>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-antrun-plugin</artifactId>
          <version>${maven-antrun-plugin.version}</version>
        </plugin>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>${maven-assembly-plugin.version}</version>
        </plugin>

        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>versions-maven-plugin</artifactId>
          <version>${maven-versions-plugin.version}</version>
        </plugin>

        <plugin>
          <groupId>org.codehaus.cargo</groupId>
          <artifactId>cargo-maven3-plugin</artifactId>
          <version>${maven-cargo-plugin.version}</version>
        </plugin>

      </plugins>
    </pluginManagement>

  </build>

  <modules>
    <module>lib</module>
    <module>tests</module>
    <module>examples</module>
    <module>dist</module>
  </modules>

  <profiles>
    <profile>
      <id>releases</id>
      <properties>
        <!-- Using this profile, modules will be deployed by default. -->
        <artifact.deploy.disabled>false</artifact.deploy.disabled>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-gpg-plugin</artifactId>
          </plugin>
          <plugin>
            <groupId>org.sonatype.central</groupId>
            <artifactId>central-publishing-maven-plugin</artifactId>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

</project>
