<?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.
-->

<plugin>
  <description>plugin-description</description>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <version>2.3-SNAPSHOT</version>
  <goalPrefix>jar</goalPrefix>
  <isolatedRealm>false</isolatedRealm>
  <inheritedByDefault>true</inheritedByDefault>
  <mojos>
    <mojo>
      <goal>jar</goal>
      <description>mojo-description</description>
      <requiresDependencyResolution>runtime</requiresDependencyResolution>
      <requiresDependencyCollection>test</requiresDependencyCollection>
      <requiresDirectInvocation>false</requiresDirectInvocation>
      <requiresProject>true</requiresProject>
      <requiresReports>false</requiresReports>
      <aggregator>false</aggregator>
      <requiresOnline>false</requiresOnline>
      <inheritedByDefault>true</inheritedByDefault>
      <phase>package</phase>
      <implementation>org.apache.maven.plugin.jar.JarMojo</implementation>
      <language>java</language>
      <instantiationStrategy>per-lookup</instantiationStrategy>
      <executionStrategy>once-per-session</executionStrategy>
      <deprecated>deprecated-mojo</deprecated>
      <since>2.2</since>
      <executePhase>generate-sources</executePhase>
      <executeGoal>some-goal</executeGoal>
      <executeLifecycle>cobertura</executeLifecycle>
      <configurator>antrun</configurator>
      <parameters>
        <parameter>
          <name>finalName</name>
          <alias>jarName</alias>
          <type>java.lang.String</type>
          <implementation>java.lang.String</implementation>
          <required>false</required>
          <editable>true</editable>
          <description>parameter-description</description>
          <deprecated>deprecated-parameter</deprecated>
          <since>3.0.0</since>
        </parameter>
      </parameters>
      <configuration>
        <finalName implementation="java.lang.String" default-value="${project.build.finalName}">${jar.finalName}</finalName>
      </configuration>
      <requirements>
        <requirement>
          <role>org.codehaus.plexus.archiver.Archiver</role>
          <role-hint>jar</role-hint>
          <field-name>jarArchiver</field-name>
        </requirement>
      </requirements>
    </mojo>
    <mojo>
      <goal>war</goal>
      <threadSafe>true</threadSafe>
    </mojo>
  </mojos>
  <dependencies>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-plugin-api</artifactId>
      <type>jar</type>
      <version>2.0.6</version>
    </dependency>
  </dependencies>
</plugin>
