# 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: 2
#updates:
  #- package-ecosystem: "maven"
    #directory: "/"
    #schedule:
      #interval: "daily"
    #ignore:
      #- dependency-name: "com.sun.activation:jakarta.activation"
        #versions: ">= 1.2.2"
      #- dependency-name: "com.sun.mail:jakarta.mail"
        #versions: ">= 2.0"
      #- dependency-name: "com.sun.xml.messaging.saaj:saaj-impl"
        #versions: ">= 2.0"
      #- dependency-name: "com.sun.xml.ws:jaxws-rt"
        #versions: ">= 3.0"
      #- dependency-name: "jakarta.activation:jakarta.activation-api"
        #versions: ">= 1.2.2"
      #- dependency-name: "jakarta.xml.bind:jakarta.xml.bind-api"
        #versions: ">= 3.0"
      #- dependency-name: "jakarta.xml.soap:jakarta.xml.soap-api"
        #versions: ">= 2.0"
      ## There is a bug in Saxon 10 related to how xmlns="" declarations are processed.
      #- dependency-name: "net.sf.saxon:Saxon-HE"
        #versions: ">= 10.0"
      #- dependency-name: "org.eclipse.jetty:jetty-server"
        #versions: ">= 10.0"
      #- dependency-name: "org.eclipse.jetty:jetty-webapp"
        #versions: ">= 10.0"
      #- dependency-name: "org.glassfish.jaxb:jaxb-runtime"
        #versions: ">= 3.0"
