<?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" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.apache.logging</groupId>
    <artifactId>logging-parent</artifactId>
    <version>2</version>
  </parent>

  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-api-kotlin-parent</artifactId>
  <version>1.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>Apache Log4j Kotlin API Parent</name>
  <description>Apache Log4j Kotlin API parent project</description>

  <!-- TODO: website publishing -->
  <url>https://logging.apache.org/log4j/kotlin/</url>
  <scm>
    <connection>scm:git:http://git-wip-us.apache.org/repos/asf/logging-log4j-kotlin.git</connection>
    <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/logging-log4j-kotlin.git</developerConnection>
    <url>https://git-wip-us.apache.org/repos/asf?p=logging-log4j-kotlin.git;a=summary</url>
    <tag>HEAD</tag>
  </scm>

  <distributionManagement>
    <site>
      <id>apache.website</id>
      <url>scp://people.apache.org/www/logging.apache.org/log4j-kotlin-api</url>
    </site>
  </distributionManagement>

  <properties>
    <Log4jKotlinVersion>1.0.0</Log4jKotlinVersion>
    <Log4jReleaseManager>Matt Sicker</Log4jReleaseManager>
    <Log4jReleaseKey>748F15B2CF9BA8F024155E6ED7C92B70FA1C814D</Log4jReleaseKey>
    <changes.plugin.version>2.12</changes.plugin.version>
    <checkstyle.plugin.version>2.17</checkstyle.plugin.version>
    <findbugs.plugin.version>3.0.5</findbugs.plugin.version>
    <javadoc.plugin.version>2.10.3</javadoc.plugin.version>
    <jxr.plugin.version>2.5</jxr.plugin.version>
    <kotlin.version>1.2.31</kotlin.version>
    <log4j.version>2.11.0</log4j.version>
    <pmd.plugin.version>3.8</pmd.plugin.version>
    <rat.plugin.version>0.12</rat.plugin.version>
    <site.plugin.version>3.4</site.plugin.version>
    <!-- Maven site depends on Velocity and the escaping rules are different in newer versions. -->
    <!-- See https://maven.apache.org/plugins/maven-site-plugin/migrate.html -->
    <velocity.plugin.version>1.5</velocity.plugin.version>
    <asciidoc.plugin.version>1.5.6</asciidoc.plugin.version>
    <surefire.plugin.version>2.19.1</surefire.plugin.version>
    <log4jParentDir>${basedir}</log4jParentDir>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api-kotlin</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>${log4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>${log4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>${log4j.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>${log4j.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
    <dependency>
      <groupId>org.jetbrains.kotlin</groupId>
      <artifactId>kotlin-stdlib</artifactId>
      <version>${kotlin.version}</version>
    </dependency>
    <dependency>
      <groupId>org.jetbrains.kotlin</groupId>
      <artifactId>kotlin-test</artifactId>
      <version>${kotlin.version}</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.jetbrains.kotlin</groupId>
        <artifactId>kotlin-maven-plugin</artifactId>
        <version>${kotlin.version}</version>
        <executions>
          <execution>
            <id>compile</id>
            <phase>compile</phase>
            <goals>
              <goal>compile</goal>
            </goals>
          </execution>
          <execution>
            <id>test-compile</id>
            <phase>test-compile</phase>
            <goals>
              <goal>test-compile</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.asciidoctor</groupId>
        <artifactId>asciidoctor-maven-plugin</artifactId>
        <version>1.5.6</version>
        <executions>
          <execution>
            <id>output-html</id>
            <phase>generate-resources</phase>
            <goals>
              <goal>process-asciidoc</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <backend>html5</backend>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-site-plugin</artifactId>
        <version>${site.plugin.version}</version>
        <dependencies>
          <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity</artifactId>
            <version>${velocity.plugin.version}</version>
          </dependency>
          <dependency>
            <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-ssh</artifactId>
            <version>2.9</version>
          </dependency>
          <dependency>
            <groupId>org.asciidoctor</groupId>
            <artifactId>asciidoctor-maven-plugin</artifactId>
            <version>${asciidoc.plugin.version}</version>
          </dependency>
        </dependencies>
        <configuration>
          <!-- only build English site even on other language OS -->
          <locales>en</locales>
          <!-- Exclude the navigation file for Maven 1 sites
               and the changes file used by the changes-plugin,
               as they interfere with the site generation. -->
          <moduleExcludes>
            <xdoc>navigation.xml,changes.xml</xdoc>
          </moduleExcludes>
          <templateDirectory>${log4jParentDir}/src/site</templateDirectory>
          <template>site.vm</template>
          <asciidoc>
            <attributes>
              <!-- copy any site properties wanted in asciidoc files -->
              <Log4jReleaseVersion>${Log4jReleaseVersion}</Log4jReleaseVersion>
              <Log4jReleaseManager>${Log4jReleaseManager}</Log4jReleaseManager>
              <Log4jReleaseKey>${Log4jReleaseKey}</Log4jReleaseKey>
            </attributes>
          </asciidoc>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <reporting>
    <plugins>
      <!-- Changes report -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-changes-plugin</artifactId>
        <version>${changes.plugin.version}</version>
        <reportSets>
          <reportSet>
            <reports>
              <report>changes-report</report>
              <report>jira-report</report>
            </reports>
          </reportSet>
        </reportSets>
        <configuration>
          <statusIds>Resolved, Closed</statusIds>
          <columnNames>Type,Key,Summary,Assignee,Status,Resolution,Fix Version</columnNames>
          <component>Kotlin API</component>
          <useJql>true</useJql>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-project-info-reports-plugin</artifactId>
        <version>2.8.1</version>
        <reportSets>
          <reportSet>
            <reports>
              <report>index</report>
              <report>dependencies</report>
              <report>dependency-info</report>
              <report>dependency-convergence</report>
              <report>dependency-management</report>
              <report>project-team</report>
              <report>mailing-list</report>
              <report>issue-tracking</report>
              <report>license</report>
              <report>scm</report>
              <report>summary</report>
            </reports>
          </reportSet>
        </reportSets>
        <configuration>
          <!-- you'd think these would be the defaults, right? -->
          <customBundle>${project.basedir}/src/site/custom/project-info-report.properties</customBundle>
          <webAccessUrl>${project.scm.url}</webAccessUrl>
          <anonymousConnection>${project.scm.connection}</anonymousConnection>
          <developerConnection>${project.scm.developerConnection}</developerConnection>
          <dependencyLocationsEnabled>false</dependencyLocationsEnabled>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>${javadoc.plugin.version}</version>
        <configuration>
          <aggregate>true</aggregate>
          <bottom><![CDATA[<p align="center">Copyright &#169; {inceptionYear}-{currentYear} {organizationName}. All Rights Reserved.<br />
            Apache Logging, Apache Log4j, Apache Log4j Audit, Log4j, Log4j Audit, Apache, the Apache feather logo, the Apache Logging project logo,
            and the Apache Log4j logo are trademarks of The Apache Software Foundation.</p>]]></bottom>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <version>${checkstyle.plugin.version}</version>
        <configuration>
          <!--<propertiesLocation>${vfs.parent.dir}/checkstyle.properties</propertiesLocation> -->
          <configLocation>${log4jParentDir}/checkstyle.xml</configLocation>
          <suppressionsLocation>${log4jParentDir}/checkstyle-suppressions.xml</suppressionsLocation>
          <enableRulesSummary>false</enableRulesSummary>
          <propertyExpansion>basedir=${basedir}</propertyExpansion>
          <propertyExpansion>licensedir=${log4jParentDir}/checkstyle-header.txt</propertyExpansion>
        </configuration>
      </plugin>
      <!-- Surefire report -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-report-plugin</artifactId>
        <version>${surefire.plugin.version}</version>
        <reportSets>
          <reportSet>
            <id>integration-tests</id>
            <reports>
              <report>failsafe-report-only</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
      <!-- RAT report -->
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <version>${rat.plugin.version}</version>
        <configuration>
          <excludes>
            <exclude>**/*.asc</exclude>
            <exclude>.idea/**/*</exclude>
            <exclude>src/site/resources/js/jquery.js</exclude>
            <exclude>src/site/resources/js/jquery.min.js</exclude>
            <!-- Generated files -->
            <exclude>log4j-api-kotlin-distribution/target/**/*</exclude>
            <exclude>log4j-api-kotlin-distribution/.project</exclude>
            <exclude>log4j-api-kotlin-distribution/.settings/**</exclude>
            <exclude>RELEASE-NOTES.md</exclude>
          </excludes>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>findbugs-maven-plugin</artifactId>
        <version>${findbugs.plugin.version}</version>
        <configuration>
          <fork>true</fork>
          <jvmArgs>-Duser.language=en</jvmArgs>
          <threshold>Normal</threshold>
          <effort>Default</effort>
          <excludeFilterFile>${log4jParentDir}/findbugs-exclude-filter.xml</excludeFilterFile>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jxr-plugin</artifactId>
        <version>${jxr.plugin.version}</version>
        <reportSets>
          <reportSet>
            <id>non-aggregate</id>
            <reports>
              <report>jxr</report>
            </reports>
          </reportSet>
          <reportSet>
            <id>aggregate</id>
            <reports>
              <report>aggregate</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
        <version>${pmd.plugin.version}</version>
        <configuration>
          <targetJdk>${maven.compiler.target}</targetJdk>
        </configuration>
      </plugin>
    </plugins>
  </reporting>
  <repositories>
    <repository>
      <id>apache.snapshots</id>
      <name>Apache Snapshot Repository</name>
      <url>https://repository.apache.org/snapshots</url>
      <releases>
        <enabled>false</enabled>
      </releases>
    </repository>
  </repositories>

  <modules>
    <module>log4j-api-kotlin</module>
    <module>log4j-api-kotlin-sample</module>
  </modules>
</project>
