# ============LICENSE_START==========================================
# ONAP : APPC
# ===================================================================
# Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
# ===================================================================
#
# Unless otherwise specified, all software contained herein is licensed
# under the Apache License, Version 2.0 (the License);
# you may not use this software 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.
#
# ECOMP is a trademark and service mark of AT&T Intellectual Property.
# ============LICENSE_END============================================
# Target dirs in all projects
**/target/*
**/target-ide/*

# Added for Intellij IDEA IDE
**/.idea/*
*.iml

# Generated models and features
**/bin/*

# MANIFEST.MF is updated on every clean install
**/src/main/resources/META-INF/
**/pom.xml.versionsBackup
pom.xml.versionsBackup

.project

*.prefs
.classpath
**/.classpath
/target/
logs/
debug-logs/
/.settings/
**/*.iml
/.idea/
.settings


# MANIFEST.MF is updated on every clean install
**/src/main/resources/META-INF/
**/src/main/yang-gen-sal
**/src/main/yang-gen-config
