  ---
  Including and Excluding Artifacts
  ---
  Barrie Treloar
  ---
  31-July-2006
  ---

~~ Copyright 2006 The Apache Software Foundation.
~~
~~ Licensed 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.

~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/guides/mini/guide-apt-format.html


Including and Excluding Artifacts

  Currently the include/exclude format is based upon the dependency conflict id
  which has a form of: <<<groupId:artifactId:type:classifier>>>. A shortened
  form of the dependency conflict id may also be used <<<groupId:artifactId>>>.

  The check for inclusion/exclusion is done based on either the dependency
  conflict id or the shortened form as a <<<String.equals()>>> so it must
  be an identical match for it to be included or excluded. At present there is
  no support for regular expressions.

  This example excludes the log4j and commons-lang jar files from the assembly.
  This would be useful when you are building a super distribution assembly which
  contained sub distributions (i.e. other already assembled zips or tars) where
  in your pom you are depenedent upon those distributions.  But because the
  distributions transitively depend upon the project's dependencies the assembly
  also includes the jar files (which are already in the assemblies and don't
  need to be duplicated)

  Your pom might include something like:

-----
    <dependencies>
        <dependency>
            <groupId>YOUR GROUP</groupId>
            <artifactId>YOUR ARTIFACT</artifactId>
            <version>YOUR VERSION</version>
            <classifier>bin</classifier>
            <type>zip</type>
        </dependency>
-----

  And then in your assembly you exclude all the jar dependencies pulled in
  from the binary assembly. In this example the commons-lang and log4j jars
  are included unnecessarily (as they are in the bin.zip file already)

-----
  <dependencySets>
    <dependencySet>
      ....
      <excludes>
        <exclude>commons-lang:commons-lang</exclude>
        <exclude>log4j:log4j</exclude>
      </excludes>
    </dependencySet>
    ....
  </dependencySets>
-----
