This file lists the dependences for Apache Jena Fuseki.
  Version numbers are given in the POM file for a particular distribution. 

Apache Projects:   Apache Software License
  Apache Jena, including the Jena IRI library
  Apache Xerces-J
  Apache log4j
  Apache HttpComponents (HTTP Client)
  Apache Commons Codec
  Apache Common FileUpload

SLF4J : http://www.slf4j.org/
  Copyright (c) 2004-2008 QOS.ch
  MIT License

JUnit : http://junit.org/
  Common Public License - v 1.0

Jetty: http://www.eclipse.org/jetty/
  Apache License 2.0 
  (also avilable under Eclipse Public License 1.0)
