######################################################################
# 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/ecommerce/webapp/ecommerce/css/**
**/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/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/**
**/.gradle/**
**/gradle/wrapper/**
