<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one or more
  ~ contributor license agreements.  See the NOTICE file distributed with
  ~ this work for additional information regarding copyright ownership.
  ~ The ASF licenses this file to you 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" child.project.url.inherit.append.path="false" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

  <!-- ██     ██  █████  ██████  ███    ██ ██ ███    ██  ██████  ██
       ██     ██ ██   ██ ██   ██ ████   ██ ██ ████   ██ ██       ██
       ██  █  ██ ███████ ██████  ██ ██  ██ ██ ██ ██  ██ ██   ███ ██
       ██ ███ ██ ██   ██ ██   ██ ██  ██ ██ ██ ██  ██ ██ ██    ██
        ███ ███  ██   ██ ██   ██ ██   ████ ██ ██   ████  ██████  ██

       `log4j-tools` project modules should use `log4j-tools-parent` as their parents, not this POM!
       This POM constitutes the BOM to be imported by applications using `log4j-tools` project modules. -->

  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.logging</groupId>
    <artifactId>logging-parent</artifactId>
    <version>10.6.0</version>
  </parent>

  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-tools-bom</artifactId>
  <version>${revision}</version>
  <packaging>pom</packaging>

  <url>https://logging.apache.org/log4j/tools</url>

  <inceptionYear>2022</inceptionYear>

  <developers>

    <developer>
      <id>pkarwasz</id>
      <name>Piotr P. Karwasz</name>
      <email>pkarwasz@apache.org</email>
      <roles>
        <role>PMC Member</role>
      </roles>
      <timezone>Europe/Warsaw</timezone>
    </developer>

    <developer>
      <id>rgoers</id>
      <name>Ralph Goers</name>
      <email>rgoers@apache.org</email>
      <organization>Nextiva</organization>
      <roles>
        <role>PMC Member</role>
      </roles>
      <timezone>America/Phoenix</timezone>
    </developer>

    <developer>
      <id>vy</id>
      <name>Volkan Yazıcı</name>
      <email>vy@apache.org</email>
      <roles>
        <role>PMC Member</role>
      </roles>
      <timezone>Europe/Amsterdam</timezone>
    </developer>

  </developers>

  <modules>

    <!-- the parent POM must come first: -->
    <module>log4j-tools-parent</module>

    <!-- Modules here must have a corresponding entry in `dependencyManagement > dependencies` block below! -->
    <module>log4j-changelog</module>
    <module>log4j-changelog-maven-plugin</module>
    <module>log4j-docgen</module>

  </modules>

  <scm child.scm.connection.inherit.append.path="false" child.scm.developerConnection.inherit.append.path="false" child.scm.url.inherit.append.path="false">
    <connection>scm:git:git@github.com:apache/logging-log4j-tools.git</connection>
    <developerConnection>scm:git:git@github.com:apache/logging-log4j-tools.git</developerConnection>
    <tag>HEAD</tag>
    <url>https://github.com/apache/logging-log4j-tools</url>
  </scm>

  <issueManagement>
    <system>GitHub Issues</system>
    <url>https://github.com/apache/logging-log4j-tools/issues</url>
  </issueManagement>

  <ciManagement>
    <system>GitHub Actions</system>
    <url>https://github.com/apache/logging-log4j-tools/actions</url>
  </ciManagement>

  <distributionManagement>
    <downloadUrl>https://logging.apache.org/log4j/tools/latest/#distribution</downloadUrl>
  </distributionManagement>

  <properties>

    <!-- project version -->
    <revision>0.8.0-SNAPSHOT</revision>

    <!-- `project.build.outputTimestamp` is required to be present for reproducible builds.
         We actually inherit one from the `org.apache:apache` through our parent `org.apache.logging:logging-parent`.
         Though inheriting this property has two undesired consequences:
         1. `artifact:compare` dumps an `ERROR` log stating that this `property should not be inherited but defined` (apache/logging-parent#50)
         2. This value is employed in various places while creating the distribution
         To mitigate these, we define a *dummy* value here and let the CI replace it during a release.
         Hence, *DO NOT MANUALLY EDIT THIS VALUE*! -->
    <project.build.outputTimestamp>2023-12-14T11:00:06Z</project.build.outputTimestamp>

    <!-- disable `maven-site-plugin`-->
    <maven.site.skip>true</maven.site.skip>
    <maven.site.deploy.skip>true</maven.site.deploy.skip>

  </properties>

  <!-- `dependencyManagement` must only contain `log4j-tools` modules and nothing else!
       Modules here must have a corresponding entry in `modules` block above! -->
  <dependencyManagement>
    <dependencies>

      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-changelog</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-changelog-maven-plugin</artifactId>
        <version>${project.version}</version>
      </dependency>

      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-docgen</artifactId>
        <version>${project.version}</version>
      </dependency>

    </dependencies>
  </dependencyManagement>

  <build>
    <plugins>

      <!-- Enable BOM flattening -->
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>flatten-maven-plugin</artifactId>
        <version>${flatten-maven-plugin.version}</version>
        <executions>
          <execution>
            <id>flatten-bom</id>
            <goals>
              <goal>flatten</goal>
            </goals>
            <phase>process-resources</phase>
            <inherited>false</inherited>
          </execution>
        </executions>
      </plugin>

    </plugins>
  </build>

</project>
