// ------------------------------------------------------------------
// Transitive dependencies of this project grouped by organization
// ------------------------------------------------------------------

Hudson

Summary of Licenses

ASL 2.0
BSD
CDDL 1.0
CPL 1.0
EPL 1.0
LGPL v2
MIT
Public Domain

Kohsuke Kawaguchi

  - Bridge method injection annotations  com.infradna.tool:bridge-method-annotation:jar:1.4
    MIT License  (http://www.opensource.org/licenses/mit-license.php)

  - Annotation for JDK requirements  org.jvnet:animal-sniffer-annotation:jar:1.0
    Common Development and Distribution License  (http://www.opensource.org/licenses/cddl1.php)

  - windows-remote-command (https://hudson.dev.java.net/lib/windows-remote-command/) org.jvnet.hudson:windows-remote-command:jar:1.0
    MIT license  (http://www.opensource.org/licenses/mit-license.php)

  - Custom Acess Modifier annotations  org.kohsuke:access-modifier-annotation:jar:1.0
    MIT License  (http://www.opensource.org/licenses/mit-license.php)

  - Graph Layout Library  org.kohsuke:graph-layouter:jar:1.0
    MIT license  (http://www.opensource.org/licenses/mit-license.php)

  - PuTTY support for Trilead SSH2 library  org.kohsuke:trilead-putty-extension:jar:1.0
    2-clause BSD license  (http://www.opensource.org/licenses/bsd-license.php)

  - Pure Java - COM bridge  org.kohsuke.jinterop:j-interopdeps:jar:2.0.5
    MIT license  (http://www.opensource.org/licenses/mit-license.php)

  - jinterop-proxy  org.kohsuke.jinterop:jinterop-proxy:jar:1.1
    MIT license  (http://www.opensource.org/licenses/mit-license.php)

  - META-INF/services generator  org.kohsuke.metainf-services:metainf-services:jar:1.1
    MIT license  (http://www.opensource.org/licenses/mit-license.php)

  - Maven Stapler plugin  org.kohsuke.stapler:maven-stapler-plugin:maven-plugin:1.15
    MIT License  (http://www.opensource.org/licenses/mit-license.php)

  - Stapler  org.kohsuke.stapler:stapler:jar:1.155
    2-clause BSD license  (http://www.opensource.org/licenses/bsd-license.php)

  - Timeline component at http://www.simile-widgets.org/timeline/  org.kohsuke.stapler:stapler-adjunct-timeline:jar:1.2
    MIT license  (http://www.opensource.org/licenses/mit-license.php)

  - Stapler Jelly module  org.kohsuke.stapler:stapler-jelly:jar:1.155
    2-clause BSD license  (http://www.opensource.org/licenses/bsd-license.php)


Various Organizations

  - AntLR (http://www.antlr.org/) antlr:antlr:jar:2.7.6
    Public Domain

  - AOP alliance (http://aopalliance.sourceforge.net) aopalliance:aopalliance:jar:1.0
    Public Domain 

  - icu4j  com.ibm.icu:icu4j:jar:2.6.1
    MIT License  (http://www.opensource.org/licenses/mit-license.php)

  - Embeddable daemonization library  com.sun.akuma:akuma:jar:1.4
    MIT license  (http://www.opensource.org/licenses/mit-license.php)

  - embedded_su for Java  com.sun.solaris:embedded_su4j:jar:1.1
    MIT license  (http://www.opensource.org/licenses/mit-license.php)

  - Typed XML Writer runtime  com.sun.xml.txw2:txw2:jar:20090102
    Common Development and Distribution License (CDDL) v1.0  (https://glassfish.dev.java.net/public/CDDLv1.0.html)

  - XML Im-/Exporter (http://xml-im-exporter.sourceforge.net) de.zeigermann.xml:xml-im-exporter:jar:1.1
    BSD

  - JavaBeans Activation Framework (JAF) (http://java.sun.com/products/javabeans/jaf/index.jsp) javax.activation:activation:jar:1.1
    Common Development and Distribution License (CDDL) v1.0  (https://glassfish.dev.java.net/public/CDDLv1.0.html)

  - JavaMail API (https://glassfish.dev.java.net/javaee5/mail/) javax.mail:mail:jar:1.4
    Common Development and Distribution License (CDDL) v1.0  (https://glassfish.dev.java.net/public/CDDLv1.0.html)

  - jstl  javax.servlet:jstl:jar:1.1.0
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - jdom  jdom:jdom:jar:1.0
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - JLine (http://jline.sourceforge.net) jline:jline:jar:0.9.94
    BSD

  - mx4j  mx4j:mx4j:jar:3.0.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - mx4j-tools  mx4j:mx4j-tools:jar:3.0.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Neko HTML (http://nekohtml.sourceforge.net/) nekohtml:nekohtml:jar:1.9.6.2
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Java Native Access  net.java.dev.jna:jna:jar:3.2.4
    GNU Lesser General Public License Version 2.1  (http://www.gnu.org/licenses/lgpl.html)

  - Textile-J  net.java.dev.textile-j:textile-j:jar:2.2.864
    Eclipse Public License - v 1.0  (http://www.eclipse.org/legal/epl-v10.html)

  - SezPoz Library (https://sezpoz.dev.java.net/sezpoz/) net.java.sezpoz:sezpoz:jar:1.7
    COMMON DEVELOPMENT AND DISTRIBUTION LICENSE  (http://www.opensource.org/licenses/cddl1.txt)

  - ezmorph (http://ezmorph.sourceforge.net) net.sf.ezmorph:ezmorph:jar:1.0.3
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Neko HTML (http://nekohtml.sourceforge.net/) net.sourceforge.nekohtml:nekohtml:jar:1.9.13
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - AspectJ runtime (http://www.aspectj.org) org.aspectj:aspectjrt:jar:1.6.10
    Eclipse Public License - v 1.0  (http://www.eclipse.org/legal/epl-v10.html)

  - Eclipse JDT Core (http://www.eclipse.org/jdt/) org.eclipse.jdt:core:jar:3.1.1
    Eclipse Public License v1.0  (http://www.eclipse.org/org/documents/epl-v10.php)

  - JNA-POSIX  org.jruby.ext.posix:jna-posix:jar:1.0.3
    Common Public License - v 1.0  (http://www-128.ibm.com/developerworks/library/os-cpl.html)
    GNU General Public License Version 2  (http://www.gnu.org/copyleft/gpl.html)
    GNU Lesser General Public License Version 2.1  (http://www.gnu.org/licenses/lgpl.html)

  - Type arithmetic library for Java5  org.jvnet:tiger-types:jar:1.3
    Common Development and Distribution License  (http://www.opensource.org/licenses/cddl1.php)

  - activation  org.jvnet.hudson:activation:jar:1.1.1-hudson-1
    COMMON DEVELOPMENT AND DISTRIBUTION LICENSE  (http://www.opensource.org/licenses/cddl1.txt)

  - annotation-indexer (https://hudson.dev.java.net/lib/annotation-indexer/) org.jvnet.hudson:annotation-indexer:jar:1.2
    MIT license  (http://www.opensource.org/licenses/mit-license.php)

  - Utility around Java Crypto API (https://hudson.dev.java.net/lib/crypto-util/) org.jvnet.hudson:crypto-util:jar:1.0
    MIT license  (http://www.opensource.org/licenses/mit-license.php)

  - Hudson Maven Artifact Manager (https://hudson.dev.java.net/lib/hudson-maven-artifact-manager/) org.jvnet.hudson:hudson-maven-artifact-manager:jar:1.0
    MIT license  (http://www.opensource.org/licenses/mit-license.php)

  - Hudson Maven Embedder (https://hudson.dev.java.net/lib/hudson-maven-embedder/) org.jvnet.hudson:hudson-maven-embedder:jar:3.2
    MIT license  (http://www.opensource.org/licenses/mit-license.php)

  - WMI for j-interop (https://hudson.dev.java.net/extras/jinterop-wmi/) org.jvnet.hudson:jinterop-wmi:jar:1.0
    MIT license  (http://www.opensource.org/licenses/mit-license.php)

  - JmDNS  org.jvnet.hudson:jmdns:jar:3.2.1-hudson-1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - maven2.1-interceptor (https://hudson.dev.java.net/extras/maven2.1-interceptor/) org.jvnet.hudson:maven2.1-interceptor:jar:1.2
    MIT license  (http://www.opensource.org/licenses/mit-license.php)

  - memory-monitor (https://hudson.dev.java.net/extras/memory-monitor/) org.jvnet.hudson:memory-monitor:jar:1.3
    MIT license  (http://www.opensource.org/licenses/mit-license.php)

  - init (https://hudson.dev.java.net/lib/task-reactor/) org.jvnet.hudson:task-reactor:jar:1.2
    MIT license  (http://www.opensource.org/licenses/mit-license.php)

  - Ganymed SSH2 for Java (http://www.ganymed.ethz.ch/ssh2/) org.jvnet.hudson:trilead-ssh2:jar:build212-hudson-5
    BSD style license  (http://www.ganymed.ethz.ch/ssh2/LICENSE.txt)

  - Java binding for libpam.so  org.jvnet.libpam4j:libpam4j:jar:1.2
    The MIT license  (http://www.opensource.org/licenses/mit-license.php)

  - libzfs-java (https://zfs.dev.java.net/) org.jvnet.libzfs:libzfs:jar:0.5
    COMMON DEVELOPMENT AND DISTRIBUTION LICENSE  (http://www.opensource.org/licenses/cddl1.txt)

  - Localizer  org.jvnet.localizer:localizer:jar:1.7
    MIT license  (http://www.opensource.org/licenses/mit-license.php)

  - Jellydoc annotations (https://maven-jellydoc-plugin.dev.java.net/jellydoc-annotations/) org.jvnet.maven-jellydoc-plugin:jellydoc-annotations:jar:1.3
    MIT license  (http://www.opensource.org/licenses/mit-license.php)

  - Maven Jellydoc plugin (https://maven-jellydoc-plugin.dev.java.net/maven-jellydoc-plugin/) org.jvnet.maven-jellydoc-plugin:maven-jellydoc-plugin:maven-plugin:1.3
    MIT license  (http://www.opensource.org/licenses/mit-license.php)

  - taglib-xml-writer (https://maven-jellydoc-plugin.dev.java.net/taglib-xml-writer/) org.jvnet.maven-jellydoc-plugin:taglib-xml-writer:jar:1.3
    MIT license  (http://www.opensource.org/licenses/mit-license.php)

  - Robust HTTP client library (http://maven.apache.org) org.jvnet.robust-http-client:robust-http-client:jar:1.1
    MIT license  (http://www.opensource.org/licenses/mit-license.php)

  - winp  org.jvnet.winp:winp:jar:1.14
    MIT license  (http://www.opensource.org/licenses/mit-license.php)

  - jCIFS (http://jcifs.samba.org) org.samba.jcifs:jcifs:jar:1.3.14-kohsuke-1
    GNU Lesser General Public License, version 2.1  (http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt)

  - StAX API (http://stax.codehaus.org/) stax:stax-api:jar:1.0.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - xom (http://www.xom.nu) xom:xom:jar:1.0
    LGPL 


Json-lib (http://json-lib.sourceforge.net)

  - json-lib (http://json-lib.sourceforge.net) org.kohsuke.stapler:json-lib:jar:2.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - json-lib (http://json-lib.sourceforge.net) org.kohsuke.stapler:json-lib:jar:2.1-rev6
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)


JTidy (http://jtidy.sf.net)

  - JTidy (http://jtidy.sourceforge.net) org.jvnet.hudson:jtidy:jar:4aug2000r7-dev-hudson-1
    Java HTML Tidy License  (http://svn.sourceforge.net/viewvc/*checkout*/jtidy/trunk/jtidy/LICENSE.txt?revision=95)


Interface21, Inc (http://sourceforge.net/projects/acegisecurity)

  - Acegi Security Core (http://acegisecurity.org/acegi-security/) org.acegisecurity:acegi-security:jar:1.0.5
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)


MetaStuff Ltd. (http://sourceforge.net/projects/dom4j)

  - dom4j (http://dom4j.org) dom4j:dom4j:jar:1.6.1
    BSD

  - dom4j (http://dom4j.org) org.jvnet.hudson.dom4j:dom4j:jar:1.6.1-hudson-3
    BSD


The Apache Software Foundation (http://www.apache.org/)

  - org.apache.tools.ant (http://ant.apache.org/ant/) org.apache.ant:ant:jar:1.8.0
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - ant-launcher (http://ant.apache.org/ant-launcher/) org.apache.ant:ant-launcher:jar:1.8.0
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - ant (http://www.apache.org/ant/) ant:ant:jar:1.6.5
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - avalon-framework  avalon-framework:avalon-framework:jar:4.1.3
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Commons BeanUtils (http://commons.apache.org/beanutils/) commons-beanutils:commons-beanutils:jar:1.8.0
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Commons CLI (http://commons.apache.org/cli/) commons-cli:commons-cli:jar:1.2
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Commons Codec (http://commons.apache.org/codec/) commons-codec:commons-codec:jar:1.4
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Collections (http://jakarta.apache.org/commons/collections/) commons-collections:commons-collections:jar:3.2
    The Apache Software License, Version 2.0  (/LICENSE.txt)

  - commons-validator  commons-validator:commons-validator:jar:1.1.4
    The Apache Software License, Version 2.0  (/LICENSE.txt)

  - Digester (http://jakarta.apache.org/commons/digester/) commons-digester:commons-digester:jar:1.7
    The Apache Software License, Version 2.0  (/LICENSE.txt)

  - Discovery (http://jakarta.apache.org/commons/${pom.artifactId.substring(8)}/) commons-discovery:commons-discovery:jar:0.4
    The Apache Software License, Version 2.0  (/LICENSE.txt)

  - Doxia Core (http://maven.apache.org/doxia/doxia-core) org.apache.maven.doxia:doxia-core:jar:1.0-alpha-6
    The Apache Software License, Version 2.0  (/LICENSE.txt)

  - Doxia Sink API (http://maven.apache.org/doxia/doxia-sink-api) org.apache.maven.doxia:doxia-sink-api:jar:1.0-alpha-6
    The Apache Software License, Version 2.0  (/LICENSE.txt)

  - Doxia Site Renderer Component (http://maven.apache.org/doxia/doxia-site-renderer) org.apache.maven.doxia:doxia-site-renderer:jar:1.0-alpha-6
    The Apache Software License, Version 2.0  (/LICENSE.txt)

  - EL (http://jakarta.apache.org/commons/el/) commons-el:commons-el:jar:1.0
    The Apache Software License, Version 2.0  (/LICENSE.txt)

  - Commons FileUpload (http://commons.apache.org/fileupload/) commons-fileupload:commons-fileupload:jar:1.2.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - HttpClient (http://jakarta.apache.org/commons/httpclient/) commons-httpclient:commons-httpclient:jar:3.1-rc1
    Apache License  (http://www.apache.org/licenses/LICENSE-2.0)

  - IO (http://jakarta.apache.org/commons/io/) commons-io:commons-io:jar:1.3.1
    The Apache Software License, Version 2.0  (/LICENSE.txt)

  - Commons IO (http://commons.apache.org/io/) commons-io:commons-io:jar:1.4
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - commons-jelly-tags-xml (http://jakarta.apache.org/commons/jelly/libs/xml/index.html) commons-jelly:commons-jelly-tags-xml:jar:1.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Lang (http://jakarta.apache.org/commons/lang/) commons-lang:commons-lang:jar:2.3
    The Apache Software License, Version 2.0  (/LICENSE.txt)

  - Commons Lang (http://commons.apache.org/lang/) commons-lang:commons-lang:jar:2.4
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Logging (http://jakarta.apache.org/commons/logging/) commons-logging:commons-logging:jar:1.0.4
    The Apache Software License, Version 2.0  (/LICENSE.txt)

  - Logging (http://jakarta.apache.org/commons/${pom.artifactId.substring(8)}/) commons-logging:commons-logging:jar:1.1
    The Apache Software License, Version 2.0  (/LICENSE.txt)

  - Commons Net (http://commons.apache.org/net/) commons-net:commons-net:jar:2.0
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Commons Pool (http://jakarta.apache.org/commons/${pom.artifactId.substring(8)}/) commons-pool:commons-pool:jar:1.3
    The Apache Software License, Version 2.0  (/LICENSE.txt)

  - geronimo-spec-jta  geronimo-spec:geronimo-spec-jta:jar:1.0.1B-rc4
    The Apache Software License, Version 2.0  (/LICENSE.txt)

  - log4j  log4j:log4j:jar:1.2.9
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - logkit  logkit:logkit:jar:1.0.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Aether Provider (http://maven.apache.org/maven-aether-provider/) org.apache.maven:maven-aether-provider:jar:3.0.2
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Archiver (http://maven.apache.org/maven-archiver/) org.apache.maven:maven-archiver:jar:2.0.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Artifact (http://maven.apache.org/maven-artifact/) org.apache.maven:maven-artifact:jar:2.0.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Artifact (http://maven.apache.org/maven-artifact/) org.apache.maven:maven-artifact:jar:3.0.2
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Artifact Manager (http://maven.apache.org) org.apache.maven:maven-artifact-manager:jar:2.0.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Compat (http://maven.apache.org/maven-compat/) org.apache.maven:maven-compat:jar:3.0.2
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Core (http://maven.apache.org/maven-core/) org.apache.maven:maven-core:jar:2.0.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Core (http://maven.apache.org/maven-core/) org.apache.maven:maven-core:jar:3.0.2
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Embedder (http://maven.apache.org/maven-embedder/) org.apache.maven:maven-embedder:jar:3.0.2
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Error Diagnostics (http://maven.apache.org/maven-error-diagnostics/) org.apache.maven:maven-error-diagnostics:jar:2.0.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Model (http://maven.apache.org/maven-model/) org.apache.maven:maven-model:jar:2.0.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Model (http://maven.apache.org/maven-model/) org.apache.maven:maven-model:jar:3.0.2
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Model Builder (http://maven.apache.org/maven-model-builder/) org.apache.maven:maven-model-builder:jar:3.0.2
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Monitor (http://maven.apache.org/maven-monitor/) org.apache.maven:maven-monitor:jar:2.0.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Plugin API (http://maven.apache.org/maven-plugin-api/) org.apache.maven:maven-plugin-api:jar:2.0.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Plugin API (http://maven.apache.org/maven-plugin-api/) org.apache.maven:maven-plugin-api:jar:3.0.2
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Plugin Descriptor Model (http://maven.apache.org/maven2/maven-plugin-descriptor/) org.apache.maven:maven-plugin-descriptor:jar:2.0
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Plugin Parameter Documenter API (http://maven.apache.org/maven-plugin-parameter-documenter/) org.apache.maven:maven-plugin-parameter-documenter:jar:2.0.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Plugin Registry Model (http://maven.apache.org/maven-plugin-registry/) org.apache.maven:maven-plugin-registry:jar:2.0.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Plugin Tools APIs (http://maven.apache.org/maven2/maven-plugin-tools/maven-plugin-tools-api/) org.apache.maven:maven-plugin-tools-api:jar:2.0
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Profile Model (http://maven.apache.org/maven-profile/) org.apache.maven:maven-profile:jar:2.0.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Project Builder (http://maven.apache.org/maven-project/) org.apache.maven:maven-project:jar:2.0.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Repository Metadata Model (http://maven.apache.org/maven-repository-metadata/) org.apache.maven:maven-repository-metadata:jar:2.0.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Repository Metadata Model (http://maven.apache.org/maven-repository-metadata/) org.apache.maven:maven-repository-metadata:jar:3.0.2
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Local Settings Model (http://maven.apache.org/maven-settings/) org.apache.maven:maven-settings:jar:2.0.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Settings (http://maven.apache.org/maven-settings/) org.apache.maven:maven-settings:jar:3.0.2
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Settings Builder (http://maven.apache.org/maven-settings-builder/) org.apache.maven:maven-settings-builder:jar:3.0.2
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Archetype Core (http://maven.apache.org/maven-archetype/maven-archetype-core/) org.apache.maven.archetype:maven-archetype-core:jar:1.0-alpha-4
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Archetype Creator (http://maven.apache.org) org.apache.maven.archetype:maven-archetype-creator:jar:1.0-alpha-4
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Archetype Model (http://maven.apache.org/maven-archetype/maven-archetype-model/) org.apache.maven.archetype:maven-archetype-model:jar:1.0-alpha-4
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Doxia :: Sink API (http://maven.apache.org/doxia/doxia/doxia-sink-api) org.apache.maven.doxia:doxia-sink-api:jar:1.0
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Archetype Plugin (http://maven.apache.org/maven-archetype/maven-archetype-plugin/) org.apache.maven.plugins:maven-archetype-plugin:maven-plugin:1.0-alpha-4
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Compiler Plugin (http://maven.apache.org/plugins/maven-compiler-plugin/) org.apache.maven.plugins:maven-compiler-plugin:maven-plugin:2.0.2
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Reporting API (http://maven.apache.org/maven-reporting/maven-reporting-api/) org.apache.maven.reporting:maven-reporting-api:jar:2.0.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Reporting API (http://maven.apache.org/shared/maven-reporting-api/) org.apache.maven.reporting:maven-reporting-api:jar:3.0
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Reporting (http://maven.apache.org/maven-reporting/maven-reporting-impl/) org.apache.maven.reporting:maven-reporting-impl:jar:2.0.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Wagon File Provider  org.apache.maven.wagon:wagon-file:jar:1.0-alpha-5
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Wagon File Provider (http://maven.apache.org/wagon/wagon-providers/wagon-file) org.apache.maven.wagon:wagon-file:jar:1.0-beta-7
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Wagon FTP Provider (http://maven.apache.org/wagon/wagon-providers/wagon-ftp) org.apache.maven.wagon:wagon-ftp:jar:1.0-beta-7
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Wagon Lightweight HTTP Provider  org.apache.maven.wagon:wagon-http-lightweight:jar:1.0-alpha-5
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Wagon Lightweight HTTP Provider (http://maven.apache.org/wagon/wagon-providers/wagon-http-lightweight) org.apache.maven.wagon:wagon-http-lightweight:jar:1.0-beta-7
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Wagon HTTP Shared Library (http://maven.apache.org/wagon/wagon-providers/wagon-http-shared) org.apache.maven.wagon:wagon-http-shared:jar:1.0-beta-7
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Wagon API  org.apache.maven.wagon:wagon-provider-api:jar:1.0-alpha-5
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Wagon API (http://maven.apache.org/wagon/wagon-provider-api) org.apache.maven.wagon:wagon-provider-api:jar:1.0-beta-7
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Wagon SSH Provider  org.apache.maven.wagon:wagon-ssh:jar:1.0-alpha-5
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Wagon SSH Provider (http://maven.apache.org/wagon/wagon-providers/wagon-ssh) org.apache.maven.wagon:wagon-ssh:jar:1.0-beta-7
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Wagon SSH Common Library (http://maven.apache.org/wagon/wagon-providers/wagon-ssh-common) org.apache.maven.wagon:wagon-ssh-common:jar:1.0-beta-7
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Wagon SSH External Provider (http://maven.apache.org/wagon/wagon-providers/wagon-ssh-external) org.apache.maven.wagon:wagon-ssh-external:jar:1.0-beta-7
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - commons-jelly (http://jakarta.apache.org/commons/jelly/) org.jvnet.hudson:commons-jelly:jar:1.1-hudson-20100305
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Commons JEXL (http://jakarta.apache.org/commons/jexl/) org.jvnet.hudson:commons-jexl:jar:1.1-hudson-20090508
    The Apache Software License, Version 2.0  (/LICENSE.txt)

  - slide-webdavlib  slide:slide-webdavlib:jar:2.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Maven Wagon WebDav Provider (http://maven.apache.org/wagon/wagon-providers/wagon-webdav) org.jvnet.hudson:wagon-webdav:jar:1.0-beta-2-hudson-1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Velocity (http://jakarta.apache.org/velocity/) velocity:velocity:jar:1.4
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Xerces2 Java Parser (http://xerces.apache.org/xerces2-j) xerces:xercesImpl:jar:2.9.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - XML Commons External Components XML APIs (http://xml.apache.org/commons/#external) xml-apis:xml-apis:jar:1.0.b2
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - XML Commons External Components XML APIs (http://xml.apache.org/commons/components/external/) xml-apis:xml-apis:jar:1.3.04
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)
    
  - oro  oro:oro:jar:2.0.8
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)
    


The Codehaus (http://www.codehaus.org/)

  - classworlds (http://classworlds.codehaus.org/) classworlds:classworlds:jar:1.1
    MIT License  (http://www.opensource.org/licenses/mit-license.php)

  - jaxen (http://jaxen.codehaus.org/) jaxen:jaxen:jar:1.1.1
    MIT License  (http://www.opensource.org/licenses/mit-license.php)

  - Groovy (http://groovy.codehaus.org/) org.codehaus.groovy:groovy-all:jar:1.7.6
    MIT License  (http://www.opensource.org/licenses/mit-license.php)

  - Plexus Archiver Component  org.codehaus.plexus:plexus-archiver:jar:1.0-alpha-4
    MIT License  (http://www.opensource.org/licenses/mit-license.php)

  - Plexus Classworlds (http://plexus.codehaus.org/plexus-classworlds/) org.codehaus.plexus:plexus-classworlds:jar:2.3
    MIT License  (http://www.opensource.org/licenses/mit-license.php)

  - Plexus Compiler Api  org.codehaus.plexus:plexus-compiler-api:jar:1.5.3
    MIT License  (http://www.opensource.org/licenses/mit-license.php)

  - Plexus Javac Component  org.codehaus.plexus:plexus-compiler-javac:jar:1.5.3
    MIT License  (http://www.opensource.org/licenses/mit-license.php)

  - Plexus Compiler Manager  org.codehaus.plexus:plexus-compiler-manager:jar:1.5.3
    MIT License  (http://www.opensource.org/licenses/mit-license.php)

  - Plexus :: Component Annotations (http://plexus.codehaus.org/plexus-containers/plexus-component-annotations/) org.codehaus.plexus:plexus-component-annotations:jar:1.5.5
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Default Plexus Container  org.codehaus.plexus:plexus-container-default:jar:1.0-alpha-7
    MIT License  (http://www.opensource.org/licenses/mit-license.php)

  - Plexus I18N Component  org.codehaus.plexus:plexus-i18n:jar:1.0-beta-6
    MIT License  (http://www.opensource.org/licenses/mit-license.php)

  - Plexus Default Interactivity Handler  org.codehaus.plexus:plexus-interactivity-api:jar:1.0-alpha-4
    MIT License  (http://www.opensource.org/licenses/mit-license.php)

  - Plexus Default Interactivity Handler  org.codehaus.plexus:plexus-interactivity-api:jar:1.0-alpha-6
    MIT License  (http://www.opensource.org/licenses/mit-license.php)

  - Plexus Interpolation API (http://plexus.codehaus.org/plexus-components/plexus-interpolation) org.codehaus.plexus:plexus-interpolation:jar:1.14
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Plexus Cipher: encryption/decryption Component (http://spice.sonatype.org/plexus-cipher) org.sonatype.plexus:plexus-cipher:jar:1.4
    Apache Public License 2.0  (http://www.apache.org/licenses/LICENSE-2.0)

  - Plexus Security Dispatcher Component (http://spice.sonatype.org/plexus-sec-dispatcher) org.sonatype.plexus:plexus-sec-dispatcher:jar:1.3
    Apache Public License 2.0  (http://www.apache.org/licenses/LICENSE-2.0)

  - Plexus Common Utilities  org.codehaus.plexus:plexus-utils:jar:1.0.4
    MIT License  (http://www.opensource.org/licenses/mit-license.php)

  - Plexus Common Utilities (http://plexus.codehaus.org/plexus-utils) org.codehaus.plexus:plexus-utils:jar:2.0.4
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Plexus Velocity Component  org.codehaus.plexus:plexus-velocity:jar:1.1.2
    MIT License  (http://www.opensource.org/licenses/mit-license.php)

  - Woodstox (http://woodstox.codehaus.org) org.codehaus.woodstox:wstx-asl:jar:3.2.7
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Plexus Common Utilities  plexus:plexus-utils:jar:1.0.2
    MIT License  (http://www.opensource.org/licenses/mit-license.php)


Extreme! Lab, Indiana University (http://www.extreme.indiana.edu/)

  - MXP1: Xml Pull Parser 3rd Edition (XPP3) (http://www.extreme.indiana.edu/xgws/xsoap/xpp/mxp1/) xpp3:xpp3:jar:1.1.4c
    Indiana University Extreme! Lab Software License, vesion 1.1.1  (http://www.extreme.indiana.edu/viewcvs/~checkout~/XPP3/java/LICENSE.txt)
    Public Domain  (http://creativecommons.org/licenses/publicdomain)
    Apache Software License, version 1.1  (http://www.apache.org/licenses/LICENSE-1.1)

  - MXP1: Xml Pull Parser 3rd Edition (XPP3) (http://www.extreme.indiana.edu/xgws/xsoap/xpp/mxp1/) xpp3:xpp3_min:jar:1.1.4c
    Indiana University Extreme! Lab Software License, vesion 1.1.1  (http://www.extreme.indiana.edu/viewcvs/~checkout~/XPP3/java/LICENSE.txt)
    Public Domain  (http://creativecommons.org/licenses/publicdomain)


Google, Inc. (http://www.google.com/)

  - Guava (Google Common Libraries) (http://code.google.com/p/guava-libraries) com.google.guava:guava:jar:r08
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Google Guice - Core Library (http://code.google.com/p/google-guice/sisu-guice/) org.sonatype.sisu:sisu-guice:jar:2.9.4
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)


JCaptcha corp. (http://www.jcaptcha.net/)

  - jcaptcha-all (http://www.jcaptcha.net/) com.octo.captcha:jcaptcha-all:jar:1.0-RC6
    LGPL  (http://www.gnu.org/licenses/lgpl.txt)


jcraft (http://www.jcraft.com/jsch)

  - jsch  com.jcraft:jsch:jar:0.1.23
    BSD  (http://www.jcraft.com/jsch/LICENSE.txt)

  - JSch (http://www.jcraft.com/jsch/) com.jcraft:jsch:jar:0.1.38
    BSD  (http://www.jcraft.com/jsch/LICENSE.txt)


JFree.org (http://www.jfree.org/)

  - jcommon (http://www.jfree.org/jcommon/) jfree:jcommon:jar:1.0.12
    GNU Lesser General Public Licence  (http://www.gnu.org/licenses/lgpl.txt)

  - jfreechart (http://www.jfree.org/jfreechart/) jfree:jfreechart:jar:1.0.9
    GNU Lesser General Public Licence  (http://www.gnu.org/licenses/lgpl.txt)


JUnit (http://www.junit.org)

  - JUnit (http://junit.org) junit:junit:jar:3.8.1
    Common Public License Version 1.0  (http://www.opensource.org/licenses/cpl1.0.txt)

  - JUnit (http://junit.org) junit:junit:jar:4.8.1
    Common Public License Version 1.0  (http://www.opensource.org/licenses/cpl1.0.txt)


Kohsuke Kawaguchi (http://www.kohsuke.org/)

  - args4j (http://args4j.dev.java.net/args4j/) args4j:args4j:jar:2.0.16
    MIT License  (http://www.opensource.org/licenses/mit-license.php)


Mort Bay Consulting (http://www.mortbay.com)

  - Jetty Server (http://jetty.mortbay.org) org.mortbay.jetty:jetty:jar:6.1.1
    Apache License Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0)

  - Jetty Management (http://jetty.mortbay.org) org.mortbay.jetty:jetty-management:jar:6.1.1
    Apache License Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0)

  - Jetty Naming (http://jetty.mortbay.org) org.mortbay.jetty:jetty-naming:jar:6.1.1
    Apache License Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0)

  - Jetty Plus (http://jetty.mortbay.org) org.mortbay.jetty:jetty-plus:jar:6.1.1
    Apache License Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0)

  - Jetty Utilities (http://jetty.mortbay.org) org.mortbay.jetty:jetty-util:jar:6.1.1
    Apache License Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0)

  - Glassfish Jasper (http://jetty.mortbay.org/modules/jsp-2.1) org.mortbay.jetty:jsp-2.1:jar:6.1.1
    Apache License Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0)

  - Glassfish Jasper API (http://jetty.mortbay.org/modules/jsp-api-2.1) org.mortbay.jetty:jsp-api-2.1:jar:6.1.1
    Apache License Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0)

  - Maven Jetty Plugin (http://jetty.mortbay.org/maven-jetty-plugin) org.mortbay.jetty:maven-jetty-plugin:maven-plugin:6.1.1
    Apache License Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0)

  - Servlet Specification 2.5 API (http://jetty.mortbay.org) org.mortbay.jetty:servlet-api-2.5:jar:6.1.1
    Apache License Version 1.1  (http://www.apache.org/licenses/LICENSE-1.1)


ObjectWeb (http://www.objectweb.org/)

  - ASM Core (http://asm.objectweb.org/asm/) asm:asm:jar:2.2.3
    BSD

  - ASM Commons (http://asm.objectweb.org/asm-commons/) asm:asm-commons:jar:2.2.3
    BSD

  - ASM Tree (http://asm.objectweb.org/asm-tree/) asm:asm-tree:jar:2.2.3
    BSD


QOS.ch (http://www.qos.ch)

  - SLF4J API Module (http://www.slf4j.org) org.slf4j:slf4j-api:jar:1.6.1
    MIT License  (http://www.opensource.org/licenses/mit-license.php)

  - SLF4J JDK14 Binding (http://www.slf4j.org) org.slf4j:slf4j-jdk14:jar:1.6.1
    MIT License  (http://www.opensource.org/licenses/mit-license.php)


Sonatype, Inc. (http://www.sonatype.com/)

  - Aether :: API (http://aether.sonatype.org/aether-api/) org.sonatype.aether:aether-api:jar:1.9
    Eclipse Public License, Version 1.0  (http://www.eclipse.org/legal/epl-v10.html)

  - Aether :: Connector :: Wagon (http://aether.sonatype.org/aether-connector-wagon/) org.sonatype.aether:aether-connector-wagon:jar:1.9
    Eclipse Public License, Version 1.0  (http://www.eclipse.org/legal/epl-v10.html)

  - Aether :: Implementation (http://aether.sonatype.org/aether-impl/) org.sonatype.aether:aether-impl:jar:1.9
    Eclipse Public License, Version 1.0  (http://www.eclipse.org/legal/epl-v10.html)

  - Aether :: SPI (http://aether.sonatype.org/aether-spi/) org.sonatype.aether:aether-spi:jar:1.9
    Eclipse Public License, Version 1.0  (http://www.eclipse.org/legal/epl-v10.html)

  - Aether :: Utilities (http://aether.sonatype.org/aether-util/) org.sonatype.aether:aether-util:jar:1.9
    Eclipse Public License, Version 1.0  (http://www.eclipse.org/legal/epl-v10.html)

  - Sisu - Inject (JSR330 bean support) (http://sisu.sonatype.org/sisu-inject/guice-bean/sisu-inject-bean/) org.sonatype.sisu:sisu-inject-bean:bundle:2.1.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)
    Eclipse Public License, Version 1.0  (http://www.eclipse.org/legal/epl-v10.html)

  - Sisu - Inject (Plexus bean support) (http://sisu.sonatype.org/sisu-inject/guice-bean/guice-plexus/sisu-inject-plexus/) org.sonatype.sisu:sisu-inject-plexus:bundle:2.1.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)
    Eclipse Public License, Version 1.0  (http://www.eclipse.org/legal/epl-v10.html)


Spring Framework (http://www.springframework.org/)

  - Spring Framework: AOP (http://www.springframework.org) org.springframework:spring-aop:jar:2.5
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Spring Framework: Beans (http://www.springframework.org) org.springframework:spring-beans:jar:2.5
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Spring Framework: Context (http://www.springframework.org) org.springframework:spring-context:jar:2.5
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Spring Framework: Core (http://www.springframework.org) org.springframework:spring-core:jar:2.5
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Spring Framework: DAO (http://www.springframework.org) org.springframework:spring-dao:jar:1.2.9
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Spring Framework: JDBC (http://www.springframework.org) org.springframework:spring-jdbc:jar:1.2.9
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)

  - Spring Framework: Web (http://www.springframework.org) org.springframework:spring-web:jar:2.5
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)


ThoughtWorks, Inc (http://www.thoughtworks.com/)

  - QDox (http://qdox.codehaus.org/) qdox:qdox:jar:1.6.1
    The Apache Software License, Version 2.0  (http://www.apache.org/licenses/LICENSE-2.0.txt)


XStream (http://xstream.codehaus.org)

  - XStream Core  org.jvnet.hudson:xstream:jar:1.3.1-hudson-8
    BSD style  (http://xstream.codehaus.com/license.html)





