<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
               "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--
  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. 
-->
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <link rel="stylesheet" href="../style/bootstrap-1-3-0-min.css" type="text/css" />
  <link rel="stylesheet" href="../style/style.css" type="text/css" />
  <script src="https://www.apachecon.com/event-images/snippet.js"></script>
        <title>maven-patch-plugin Codebase Intellectual Property (IP) Clearance Status - Apache Incubator</title>
  
 </head>
 <body>
 <div class="container">
  <div class="row"><div class="span6"><a href="https://www.apache.org/"><img src="http://www.apache.org/img/asf_logo.png" alt="The Apache Software Foundation" border="0" style="margin-top: 2px" height="88"/></a></div>
<div class="span7"><a href="/"><img src="https://incubator.apache.org/images/incubator_feather_egg_logo_sm.png" alt="The Apache Software Foundation Incubator" border="0" style="margin-top: 2px" height="88"/></a></div>
<div class="span2"><a href="https://www.apache.org/foundation/contributing.html"><img src="https://www.apache.org/images/SupportApache-small.png" height="100" width="100"/></a></div>
</div>
  <div class="row"><div class="span16"><hr noshade="noshade" size="1"/></div></div>
  <div class="row">
   <div class="span4">
    <form action="http://www.google.com/search" method="get">
     <input value="incubator.apache.org" name="sitesearch" type="hidden"/>
     <input size="20" name="q" id="query" type="text" value="search..."
      onclick="if(this.value == 'search...') {this.value = ''}"/>
     <input name="Search" value="Go" type="submit"/>
    </form>
          <div class="menuheader">General</div>
    <menu compact="compact">
          <li><a href="../index.html">Welcome</a></li> 
          <li><a href="../cookbook/">Incubator Cookbook</a></li> 
          <li><a href="../policy/incubation.html">Incubation Policy</a></li> 
          <li><a href="../guides/roles_and_responsibilities.html">Roles and Responsibilities</a></li> 
          <li><a href="../faq.html">General FAQ</a></li> 
          <li><a href="http://wiki.apache.org/incubator">Incubator Wiki</a></li> 
          <li><a href="../whoweare.html">Who We Are</a></li> 
            </menu>
      <div class="menuheader">Status</div>
    <menu compact="compact">
          <li><a href="../projects">Project List</a></li> 
          <li><a href="../clutch">Clutch Report</a></li> 
          <li><a href="../ip-clearance">IP Clearance</a></li> 
            </menu>
      <div class="menuheader">Entry Guides</div>
    <menu compact="compact">
          <li><a href="../guides/proposal.html">Proposal Guide</a></li> 
            </menu>
      <div class="menuheader">Podling Guides</div>
    <menu compact="compact">
          <li><a href="../guides/committer.html">Podling Committers</a></li> 
          <li><a href="../guides/ppmc.html">Podling PMC (PPMC)</a></li> 
          <li><a href="../guides/mentor.html">Podling Mentor</a></li> 
          <li><a href="../guides/releasemanagement.html">Podling Releases</a></li> 
          <li><a href="../guides/branding.html">Podling Branding/Publicity</a></li> 
          <li><a href="../guides/sites.html">Podling Websites</a></li> 
          <li><a href="../guides/graduation.html">Graduation</a></li> 
          <li><a href="../guides/retirement.html">Retirement</a></li> 
            </menu>
      <div class="menuheader">Other Guides</div>
    <menu compact="compact">
          <li><a href="../guides/participation.html">Participation</a></li> 
          <li><a href="../faq.html">General FAQ</a></li> 
          <li><a href="../guides/chair.html">IPMC Chair</a></li> 
          <li><a href="../guides/lists.html">Mailing Lists</a></li> 
          <li><a href="../guides/website.html">Incubator Website</a></li> 
            </menu>
      <div class="menuheader">ASF</div>
    <menu compact="compact">
          <li><a href="http://www.apache.org/foundation/how-it-works.html">How Apache Works</a></li> 
          <li><a href="http://www.apache.org/dev/">Developer Documentation</a></li> 
          <li><a href="http://www.apache.org/foundation/">Foundation</a></li> 
          <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsor Apache</a></li> 
          <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li> 
            </menu>
    <div id="menuheader">
      <a class="acevent" data-format="square" data-width="135" data-mode="light" data-event="random"></a>
    </div>
   </div>
   
   <div class="span12">
            <h2 id='maven-patch-plugin+Codebase+Intellectual+Property+%28IP%29+Clearance+Status'><img src="../images/redarrow.gif" />maven-patch-plugin Codebase Intellectual Property (IP) Clearance Status</h2>
<div class="section-content">
</div>
        <h2 id='Description'><img src="../images/redarrow.gif" />Description</h2>
<div class="section-content">
<p>This is a plugin for Maven 2.x that applies patch files to an existing project's source. It currently does
      this by delegation to an external patch executable.</p>
</div>
        <h2 id='Project+info'><img src="../images/redarrow.gif" />Project info</h2>
<div class="section-content">
<ul>
        <li>Which PMC will be responsible for the code: Apache Maven</li>
      </ul>
<ul>
        <li>Into which existing project/module: Maven (Plugins)</li>
      </ul>
<ul>
        <li>Officer or member managing donation: Brett Porter</li>
      </ul>
<p>
        <em>Completed tasks are shown by the completion date (YYYY-MM-dd).</em>
      </p>
<h3 id='Identify+the+codebase'>Identify the codebase</h3>
<div class="section-content">
<table class="colortable" width="100%">
          <tr>
            <th>date</th>
            <th>item</th>
          </tr>
          <tr>
            <td>2007-06-08</td>
            <td>If applicable, make sure that any associated name does not
                already exist and is not already trademarked for an existing software
                product.</td>
          </tr>
        </table>
<p>
MD5 or SHA1 sum for donated software:  (<em>Note versioned software used to calculate sum in parentheses</em>).
        </p>
<p>
        72a2359b104c37e364ac5c0b573c1999  maven-patch-plugin.zip (md5sum; OS X 10.4.10, build 8R2232)
        </p>
<h4 id='Copyright'>Copyright</h4>
<div class="section-content">
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>2007-07-05</td>
              <td>Check and make sure that the files that have been donated
                  have been updated to reflect the new ASF license.</td>
            </tr>
          </table>
<p>
            Contributed by original authors under the terms of their existing ASF CLA.
          </p>
</div>
<h4 id='Verify+distribution+rights'>Verify distribution rights</h4>
<div class="section-content">
<p>
Corporations and individuals holding existing distribution rights:
            </p>
<ul>
<li>John Dennis Casey</li>
<li>Codehaus</li>
            </ul>
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>2007-06-08</td>
              <td>Check that all active committers have a signed CLA on
                  record.</td>
            </tr>
            <tr>
              <td>2007-06-08</td>
              <td>Remind active committers that they are responsible for
                  ensuring that a Corporate CLA is recorded if such is
                  required to authorize their contributions under their
                  individual CLA.</td>
            </tr>
            <tr>
              <td>2007-06-08</td>
              <td>Check and make sure that for all items included with the
                  distribution that is not under the Apache license, we have
                  the right to combine with Apache-licensed code and
                  redistribute.</td>
            </tr>
            <tr>
              <td>2007-06-08</td>
              <td>Check and make sure that all items depended upon by the
                  project is covered by one or more of the following approved
                  licenses: Apache, BSD, Artistic, MIT/X, MIT/W3C, MPL 1.1, or
                  something with essentially the same terms.</td>
            </tr>
          </table>
<p>Generally, the result of checking off these items will be a
             Software Grant, CLA, and Corporate CLA for ASF licensed code,
             which must have no dependencies upon items whose licenses that
             are incompatible with the Apache License.</p>
</div>
</div>
<h3 id='Organizational+acceptance+of+responsibility+for+the+project'>Organizational acceptance of responsibility for the project
</h3>
<div class="section-content">
<p>
Related VOTEs: 
        </p>
<ul>
          <li>Contributed to sandbox by lazy consensus - vote will be undertaken for
            promotion and release.</li>
        </ul>
</div>
</div>
       </div>
   </div>
  
   <div class="row"><div class="span16"><hr noshade="noshade" size="1"/></div></div>
  <div class="row">
   <div class="span16 footer">
     Copyright &#169; 2009-2024 The Apache Software Foundation<br />
     Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.<br/>
     Apache Incubator, Apache, the Apache feather logo, and the Apache Incubator project logo are trademarks of The Apache Software Foundation.
     
     
    </div>
  </div>
 </div> 
 </body>
</html>
