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

  <parent>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-parent</artifactId>
    <version>34</version>
  </parent>
  
  <groupId>org.apache.maven.wrapper</groupId>
  <artifactId>maven-wrapper-parent</artifactId>
  <version>3.1.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>Apache Maven Wrapper</name>
  <inceptionYear>2016</inceptionYear>

  <scm>
    <connection>scm:git:https://gitbox.apache.org/repos/asf/maven-wrapper.git</connection>
    <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/maven-wrapper.git</developerConnection>
    <url>https://github.com/apache/maven-wrapper/tree/${project.scm.tag}</url>
    <tag>HEAD</tag>
  </scm>
  <issueManagement>
    <system>JIRA</system>
    <url>https://issues.apache.org/jira/browse/MWRAPPER</url>
  </issueManagement>
  <ciManagement>
    <system>Jenkins</system>
    <url>https://ci-maven.apache.org/job/Maven/job/maven-box/job/maven-wrapper/job/master/</url>
  </ciManagement>
  <distributionManagement>
    <site>
      <id>apache.website</id>
      <url>scm:svn:https://svn.apache.org/repos/asf/maven/website/components/${maven.site.path}</url>
    </site>
  </distributionManagement>

  <properties>
    <maven.site.path>wrapper-archives/wrapper-LATEST</maven.site.path>
    <mavenVersion>3.1.0</mavenVersion>
    <javaVersion>7</javaVersion>
    <project.build.outputTimestamp>2021-12-13T20:56:44Z</project.build.outputTimestamp>
  </properties>

  <modules>
    <module>maven-wrapper</module>
    <module>maven-wrapper-distribution</module>
    <module>maven-wrapper-plugin</module>
  </modules>
</project>
