<?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.jena</groupId>
    <artifactId>jena-parent</artifactId>
    <version>14</version>
    <relativePath>../jena-parent</relativePath>
  </parent>
  <artifactId>jena-shaded-guava</artifactId>
  <version>3.0.0</version>
  <name>Apache Jena - Shadowed external libraries</name>
  <description>
    This module shades Google's Guava.
    Direct use can lead to versioning problems 
    as some systems are dependent on specific
    versions of guava. 
    This module uses the Shade plugin to 
    re-package them under the package name
    org.apache.jena.ext.com.google....
  </description>


  <dependencies>
    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <!-- Version number specified explicitly and not in jena-parent, 
           as it should only be used here, and further shadowing/bundle/NOTICE
           consideration might be needed on upgrade. -->
      <version>18.0</version>
    </dependency>
  </dependencies>

 <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
	  <createSourcesJar>true</createSourcesJar>
          <artifactSet>
            <includes>
              <artifact>com.google.guava:guava</artifact>
            </includes>
          </artifactSet>

          <filters>
            <filter>
              <!-- Modify the below patterns if a later guava 
		   contains other packages 
	      -->
              <artifact>com.google.guava:guava</artifact>
              <includes>
                <include>com/google/common/**</include>
                <include>com/google/thirdparty/**</include>
              </includes>
            </filter>
          </filters>

          <!-- 
            Shade to a different package, so the JAR we produce will not be
            in conflict with any newer/older guava present in client code
            depending on Jena.
          -->
          <relocations>
              <!-- Modify the below patterns if a later guava contains other
                   packages -->
            <relocation>
              <pattern>com.google.common</pattern>
              <shadedPattern>org.apache.jena.ext.com.google.common</shadedPattern>
            </relocation>
            <relocation>
              <pattern>com.google.thirdparty</pattern>
              <shadedPattern>org.apache.jena.ext.com.google.thirdparty</shadedPattern>
            </relocation>
          </relocations>
        </configuration>
      </plugin>

    </plugins>
  </build>

</project>
