<?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-transform` project modules should use `log4j-transform-parent` as their parents, not this POM!
       This POM constitutes the BOM to be imported by applications using `log4j-transform` project modules. -->

  <modelVersion>4.0.0</modelVersion>

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

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

  <url>https://logging.apache.org/log4j/transform</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>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-transform-parent</module>

    <!-- Modules here must have a corresponding entry in `dependencyManagement > dependencies` block below! -->
    <module>log4j-transform-maven-plugin</module>
    <module>log4j-transform-maven-shade-plugin-extensions</module>
    <module>log4j-weaver</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-transform.git</connection>
    <developerConnection>scm:git:git@github.com:apache/logging-log4j-transform.git</developerConnection>
    <tag>HEAD</tag>
    <url>https://github.com/apache/logging-log4j-transform</url>
  </scm>

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

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

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

  <properties>

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

    <!-- 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-transform` 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-transform-maven-plugin</artifactId>
        <version>${project.version}</version>
      </dependency>

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

      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-weaver</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>
