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


#This excludes OFBiz files for Apache RAT tool run by ASF Buildbot,
#    http://creadur.apache.org/rat/

#     Files having a separate license should be ignored.
#     For OFBiz these include
#       - Docbook

#     Also there are several files which can't or shouldn't
#        have a license statement.
#       - README.md files and at large Markdown files
#       - OPTIONAL_LIBRARIES
#       - .project Eclipse project file, only in plugins for now
#          another solution should be provided


#  The following files are excluded:

OPTIONAL_LIBRARIES
README.md
VERSION

.*gitignore
.*hgignore
.sonarcloud.properties
**plugins/.sonarcloud.properties
**/*.md
**/*.adoc
**/robots.txt

**/docbook/**
**/applications/content/dtd/**
**/ping.txt
**/.project
**/plugins/ecommerce/webapp/ecommerce/js/**
**/plugins/ofbiz-rest-impl/webapp/swagger/**
**/plugins/solr/home/zoo.cfg
**/plugins/solr/home/solrdefault/**
**/plugins/solr/webapp/solr/**
**/plugins/solr/webapp/solr/img/**
**/plugins/solr/webapp/solr/js/**
**/plugins/webpos/webapp/webpos/images/**
**/themes/common-theme/webapp/common/js/jquery/**
**/themes/common-theme/webapp/common/js/plugins/**
**/themes/common-theme/webapp/images/**
**/themes/common/webapp/common/js/jquery/**
**/themes/common/webapp/common/js/plugins/**
**/themes/common/webapp/images/**
**/themes/rainbowstone/webapp/rainbowstone/flags/**
**/themes/rainbowstone/webapp/rainbowstone/images/**
**/themes/rainbowstone/webapp/rainbowstone/fonts/quicksand/**
**/themes/rainbowstone/webapp/rainbowstone/*.less
**/less.min.js
**/SamplePricatTemplate_V1.1.xlsx
**/framework/base/src/test/resources/META-INF/**
**/framework/base/src/main/java/META-INF/**
**/.gradle/**
**/gradle/wrapper/**
