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

        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox-site</artifactId>
        <version>2.0.0</version>

        <name>Apache PDFBox Website</name>
        <description>
            The Apache PDFBox library is an open source Java tool for working with PDF documents.
        </description>
        <inceptionYear>2002</inceptionYear>

        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <svn.scmContentUrl>svn:https://svn.apache.org/repos/infra/websites/production/pdfbox/content</svn.scmContentUrl>
            <git.scmContentUrl>git:https://git-wip-us.apache.org/repos/asf/pdfbox-docs</git.scmContentUrl>
        </properties>
        
        <build>
            <!-- 
            	Publish to Apache CMS
            	After completion log in to https://cms.apache.org/pdfbox/publish 
            	and click on the Submit button to commit to production.
             -->
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-scm-publish-plugin</artifactId>
                    <version>1.1</version>
                    <configuration>
                        <content>staging</content>
                        <!--
                            set to 'true' if you'd like to test the changes without doing the 
                            scm update operations
                        -->
                        <dryRun>false</dryRun>
                        <pubScmUrl>scm:${git.scmContentUrl}</pubScmUrl>
                        <!-- this has to be 'asf-site' as gitwcsub is reading form there -->
                        <scmBranch>asf-site</scmBranch>
                        <tryUpdate>true</tryUpdate>
                        <checkoutDirectory>${svn.scmCheckoutDirectory}</checkoutDirectory>
                        <ignorePathsToDelete>
                            <ignorePathToDelete>docs**</ignorePathToDelete>
                        </ignorePathsToDelete>
                        <serverId>pdfbox-site</serverId>
                    </configuration>
                </plugin>
            </plugins>
        </build>

    </project>