***************************************************************************************************************************
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
* distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
* to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
* with the License.  You may obtain a copy of the License at                                                              *
*                                                                                                                         *
*  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
*                                                                                                                         *
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
* specific language governing permissions and limitations under the License.                                              *
***************************************************************************************************************************

Release Notes - Juneau - Version 6.0.0

** Bug
    * [JUNEAU-1] - Cannot run org.apache.juneau.samples unit tests.
    * [JUNEAU-2] - org.apache.juneau.jena.CT_Rdf.testLooseCollectionsOfBeans()
    * [JUNEAU-4] - Testcase failure: CT_Visibility.testClassDefault

** Improvement
    * [JUNEAU-13] - Rename PojoTransform to PojoSwap

** Task
    * [JUNEAU-5] - Update root README.md file.
    * [JUNEAU-6] - Complete work on Juneau website (http://juneau.incubator.apache.org/)
    * [JUNEAU-7] - Complete work on setting up Confluence workspace (https://cwiki.apache.org/confluence/display/JUNEAU/Juneau+Home)
    * [JUNEAU-8] - Update contents of incubator status page (http://incubator.apache.org/projects/juneau.html)
    * [JUNEAU-9] - Set up Jenkins builds for Juneau artifacts.
    * [JUNEAU-10] - Figure out hosting options for generated Javadocs.
    * [JUNEAU-11] - Create root pom.xml
    * [JUNEAU-12] - Add Maven instructions to Dev setup guide.
    * [JUNEAU-14] - Add SerializerGroup and ParserGroup info to web site about page.
