#
# 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.
#

version: '0.12.0.{build}'

shallow_clone: true

branches:
  except:
    - /dependabot/

platform:
  - x64

build: Script

os:
  - Visual Studio 2022

environment:
  APPVEYOR_SAVE_CACHE_ON_ERROR: True

cache:
  - '%USERPROFILE%/.m2'

build_script:
  - cmd: set JAVA_HOME=C:\Program Files\Java\jdk1.8.0
  - cmd: >-
      ./mvnw.cmd clean package -DskipTests ^
      -Dorg.slf4j.simpleLogger.log.org.apache.maven.plugins.shade.mojo.ShadeMojo=warn ^
      -Dorg.slf4j.simpleLogger.log.com.googlecode.download.maven.plugin.internal.WGet=warn ^
      -Dorg.slf4j.simpleLogger.log.org.apache.maven.plugins.dependency.fromDependencies.CopyDependenciesMojo=warn ^
      --no-transfer-progress
