Apache UIMA uimaFIT
Copyright 2012-2016 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).


Apache UIMA uimaFIT - Core
Copyright 2013-2016 The Apache Software Foundation

Copyright 2009-2012 Regents of the University of Colorado.
All rights reserved.

Copyright 2009-2012 Ubiquitous Knowledge Processing (UKP) Lab.
Technische Universität Darmstadt.
All rights reserved.


Apache UIMA uimaFIT - Collection Processing Engine support
Apache UIMA uimaFIT - Legacy uimaFIT support
Copyright 2012-2016 The Apache Software Foundation


Apache UIMA Base: uimaj-core
Apache UIMA Base: jVinci: Vinci Transport Library
Apache UIMA Base: uimaj-adapter-vinci: Vinci Adapter
Apache UIMA Base: uimaj-cpe: Collection Processing Engine
Copyright 2006-2015 The Apache Software Foundation

Portions of Apache UIMA were originally developed by
International Business Machines Corporation and are
licensed to the Apache Software Foundation under the
"Software Grant License Agreement", informally known as the
"IBM UIMA License Agreement".
Copyright (c) 2003, 2006 IBM Corporation.


Apache Commons IO
Copyright 2002-2012 The Apache Software Foundation


Apache Commons Lang
Copyright 2001-2011 The Apache Software Foundation


Commons Logging
Copyright 2003-2013 The Apache Software Foundation
  
  
Spring Framework 3.2.16.RELEASE
Copyright (c) 2002-2015 Pivotal, Inc.

This product may include a number of subcomponents with separate
copyright notices and license terms. Your use of the source code for
these subcomponents is subject to the terms and conditions of the
subcomponent's license, as noted in the license.txt file.


AnnotationLiteral.java

Licensed under the Apache License, Version 2.0.
File was copied from the javax.enterprise cdi-api version 1.0.

JBoss, Home of Professional Open Source
Copyright 2008, Red Hat Middleware LLC, and individual contributors
by the @authors tag.