######################################################################
# 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/rest-api/webapp/docs/**
**/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/helveticus/webapp/helveticus/flags/1x1/*.svg
**/themes/helveticus/webapp/helveticus/flags/4x3/*.svg
**/themes/helveticus/webapp/helveticus/images/*.svg
**/less.min.js
**/SamplePricatTemplate_V1.1.xlsx
**/framework/base/src/test/resources/META-INF/**
**/framework/base/src/main/java/META-INF/**
**/.gradle/**
**/gradle/wrapper/**
**/gradle/no-verification-metadata.xml
**/gradle/verification-keyring.gpg

