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

# Eagle - Git Ignore Configuration
#
# See: https://github.com/github/gitignore/

*.class
*.out

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.ear

# pid file
*.pid

.cache-main

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*

# Maven
target/
target/*
*/target/*
**/target/*
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
eagle-security/eagle-security-mltraining/src/test/resources/outputDir/
eagle-security/eagle-security-userprofile/src/test/resources/models/

# IntelliJ IDEA
.idea/
.metadata/
**.iml
**.eml
**.patch
mobile.userlibraries

# Eclipse
build
.metadata
.classpath
.project
.settings
.externalToolBuilders
classes
# bin

# Temporary files
logs/
*.log*
# Mac files
.DS_Store

*.cache-tests
**/application-local.conf
**/application-debug.conf

*.orig
**/*.pyc

**/*.db
docs/site
