<?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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!-- NOTE: Deliberately not using parent pom and separate groupId/artifactId
    
    This module should not be built as part of a release.  
    -->
    <name>Commons RDF: Examples</name>
    
    <groupId>com.example</groupId> <!--  Change to your groupId -->
    <artifactId>commons-rdf-examples</artifactId> <!-- Change to your artifactId -->
    <version>0.1</version>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <build>
      <!-- simplify folder structure for this example -
           real projects should use regular
           src/main/java
           src/test/java
      -->
      <testSourceDirectory>src</testSourceDirectory>
      <sourceDirectory>src-2</sourceDirectory> <!-- not used -->
    </build>

    <distributionManagement>
      <site>
        <id>commonsrdf-api-site</id>
        <url>scm:svn:${commons.scmPubUrl}/examples/</url>
      </site>
    </distributionManagement>

    <dependencies>
    	<dependency>
    		<groupId>org.apache.commons</groupId>
    		<artifactId>commons-rdf-api</artifactId>
        <!-- update to latest version -->
    		<version>0.3.0</version>
    	</dependency>
    	<dependency>
    		<groupId>org.apache.commons</groupId>
    		<artifactId>commons-rdf-simple</artifactId>
        <!-- update to latest version -->
    		<version>0.3.0</version>
    	</dependency>
    	<dependency>
    		<groupId>junit</groupId>
    		<artifactId>junit</artifactId>
    		<version>4.12</version>
    		<scope>test</scope>
    	</dependency>
    </dependencies>

    <repositories>
      <!-- Only needed if testing  release of commons-rdf -->
    	<repository>
    		<id>apache.snapshots</id>
    		<name>Apache Snapshot Repository</name>
    		<url>http://repository.apache.org/snapshots</url>
    		<releases>
    			<enabled>false</enabled>
    		</releases>
    	</repository>
    </repositories>

</project>
