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

       https://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 name="upload" xmlns:ivy="antlib:org.apache.ivy.ant">
  <fail unless="upload.user" message="supply upload.user on the command line"/>
  <fail unless="upload.password" message="supply upload.password on the command line"/>
  <property name="upload.url" value="https://repository.apache.org/service/local/staging/deploy/maven2"/>
  <ivy:configure file="ivysettings.xml"/>
  <ivy:resolve file="ivy.xml"/>  
  <ivy:retrieve/>
  <ivy:deliver/>
  <ivy:publish publishivy="false" artifactspattern="${basedir}/../java-repository/[organisation]/[module]/[artifact]/[revision]/[artifact]-[revision](-[classifier]).[ext]" resolver="nexus"/>
</project>