
Apache UIMA Ruta Eclipse: ruta-ep-engine
Copyright 2011 The Apache Software Foundation

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

Portions of UIMA Ruta were originally developed by
the Universität Würzburg.
Copyright (c) 2006, 2011 Universität Würzburg.

################################################################################

This product contains htmlparser libraries (http://htmlparser.sourceforge.net/), 
licensed under the Common Public License.

################################################################################

This product contains Checker Framework qualifiers 
(Copyright 2004-present by the Checker Framework developers) 
licensed under the MIT License.

################################################################################

This product contains Apache Commons Collections
Copyright 2001-2015 The Apache Software Foundation

################################################################################

This product contains Apache Commons IO
Copyright 2002-2020 The Apache Software Foundation

################################################################################

This product contains Apache Commons Lang
Copyright 2001-2021 The Apache Software Foundation

################################################################################

This product contains Apache Commons Logging.
Apache Commons Logging (http://commons.apache.org/proper/commons-logging/):
This product includes/uses software(s) developed by 'an unknown organization'
  - Unnamed - avalon-framework:avalon-framework:jar:4.1.3
  - Unnamed - log4j:log4j:jar:1.2.12
  - Unnamed - logkit:logkit:jar:1.0.1

################################################################################

This product contains Apache Commons Math3.
Copyright 2001-2016 The Apache Software Foundation

This product includes software developed for Orekit by
CS Systèmes d'Information (http://www.c-s.fr/)
Copyright 2010-2012 CS Systèmes d'Information

################################################################################

This product contains Apache Commons Text
Copyright 2014-2020 The Apache Software Foundation

################################################################################

This product contains Spring Framework 4.3.30.RELEASE
Copyright (c) 2002-2020 Pivotal, Inc.

This product is licensed to you under the Apache License, Version 2.0
(the "License"). You may not use this product except in compliance with
the License.

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.


The complete text of licenses and disclaimers associated with the the original
sources enumerated above at the time of code translation are in the LICENSE file.

################################################################################

This product contains Apache UIMA uimaFIT - Core
Copyright 2013-2021 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.

