# Generated by org.codehaus.mojo.license.AddThirdPartyMojo
#-------------------------------------------------------------------------------
# Already used licenses in project :
# - Apache 2.0 license
# - BSD 2-clause
# - BSD License
# - BSD style
# - CDDL + GPLv2 with classpath exception
# - CDDL 1.0
# - CDDL 1.1
# - CDDL 2
# - CDDL_1.0
# - Common Public License Version 1.0
# - Eclipse Public License - Version 1.0
# - Eclipse Public License-1
# - GNU General Public Library
# - GNU Lesser General Public License (LGPL), Version 2.1
# - GPL2 w/ CPE
# - LGPL 2.1
# - LGPL 2.1 license
# - LGPL 3.0 license
# - MIT License
# - Mozilla Public License Version 1.1
# - Public Domain
# - The Apache Software License, Version 1.1
# - The Apache Software License, Version 2.0
# - The BSD 3-Clause License
# - http://ant-contrib.sourceforge.net/tasks/LICENSE.txt
#-------------------------------------------------------------------------------
# Please fill the missing licenses for dependencies :
#
#
#Fri Dec 01 07:51:25 CST 2017
ant--ant--1.5=The Apache Software License, Version 2.0
asm--asm--3.1=BSD
dom4j--dom4j--1.6.1=BSD
javax.servlet--jsp-api--2.0=CDDL 2
javax.servlet--servlet-api--2.5=CDDL 1.0
javax.servlet.jsp--jsp-api--2.1=CDDL 1.0
javax.transaction--transaction-api--1.1=CDDL 2
org.apache.zookeeper--zookeeper--3.4.5=The Apache Software License, Version 2.0
org.apache.zookeeper--zookeeper--3.4.6=The Apache Software License, Version 2.0
org.codehaus.jettison--jettison--1.1=Apache 2.0
oro--oro--2.0.8=Apache
