<!--
  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.
-->
<settings 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/settings-1.0.0.xsd">

  <!--
    Samples for settings.xml configuration.
    studio-local: Deploys everything on your local machine
    release:      Can be used to deploy a release somewhere else
  -->
  <profiles>
    <profile>
      <id>studio-local</id>
      <properties>
        <!--
          This is the URL built distributions (*.tar.gz) of the studio
          will be deployed to when running the deploy goal
          'mvn deploy -Pstudio-local'
        -->
        <studio.dist.url>scpexe://localhost/tmp/studio</studio.dist.url>
        
        <!--
          This is the URL built artifacts of the studio will be deployed
          to when running the deploy goal
          'mvn deploy -Pstudio-local'
        -->
        <altDeploymentRepository>-DaltDeploymentRepository=apache.release::default::scpexe://localhost/tmp/projects/studio</altDeploymentRepository>
        
        <!--
          This is the URL built sites of the studio will be copied to
          when running the site-deploy goal
          'mvn site-deploy -Pstudio-local'
        -->
        <distributionManagement.site.url>scpexe://localhost/tmp/projects/studio/</distributionManagement.site.url>
      </properties>
    </profile>
    <profile>
      <id>release</id>
      <properties>
        <!--
          This is an alternative URL for a deployment repository when doing a release
          mvn release:perform -Prelease 
        -->
        <release.altDeploymentRepository>-DaltDeploymentRepository=apache.release::default::scpexe://localhost/tmp/projects/studio</release.altDeploymentRepository>
      </properties>
    </profile>
  </profiles>

</settings>
