${pom.name}
Copyright (c) 2005 - 2010 The Apache Software Foundation

This product includes software developed by
The Apache Software Foundation (http://www.apache.org/).

This product also includes software under the SCA Collaboration license 
(see the LICENSE file contained in this distribution), with the following
copyright:

(c) Copyright SCA Collaboration 2006, 2007

