/*
   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.
*/
{
  "children": [
      {
        "id":"index",
        "title":"Documentation",
        "children": [
            {
              "id":"release-notes",
              "title":"Release Notes",
              "children": [

                ]
            },
            {
              "title":"License",
              "url":"http://www.apache.org/licenses/",
              "children": [

                ]
            },
            {
              "id":"compatibility",
              "title":"Compatibility",
              "children": [

                ]
            },
            {
              "id":"install",
              "title":"Installation",
              "children": [

                ]
            },
            {
              "id":"cp_container",
              "title":"Classpath Container",
              "children": [
                  {
                    "id":"cpc/create",
                    "title":"Create a container",
                    "children": [

                      ]
                  },
                  {
                    "id":"cpc/edit",
                    "title":"Edit the classpath",
                    "children": [

                      ]
                  },
                  {
                    "id":"cpc/resolve",
                    "title":"Launching resolve",
                    "children": [

                      ]
                  },
                  {
                    "id":"cpc/retrieve",
                    "title":"Retrieve dependencies",
                    "children": [

                      ]
                  },
                  {
                    "id":"cpc/jarmapping",
                    "title":"Jar mapping",
                    "children": [

                      ]
                  },
                  {
                    "id":"cpc/cleancache",
                    "title":"Clean the caches",
                    "children": [

                      ]
                  },
                  {
                    "id":"cpc/workspace",
                    "title":"Resolve in workspace",
                    "children": [

                      ]
                  },
                  {
                    "id":"cpc/launch",
                    "title":"Launch configuration",
                    "children": [

                      ]
                  },
                  {
                    "id":"cpc/maven",
                    "title":"Use with maven poms",
                    "children": [

                      ]
                  },
                  {
                    "id":"cpc/wtp",
                    "title":"WTP integration",
                    "children": [

                      ]
                  }
                ]
            },
            {
              "id":"non-java",
              "title":"Non-Java dependencies",
              "children": [

                ]
            },
            {
              "id":"ivyeditor",
              "title":"Ivy file editor",
              "children": [

                ]
            },
            {
              "id":"settingseditor",
              "title":"Ivy settings editor",
              "children": [

                ]
            },
            {
              "id":"preferences",
              "title":"Eclipse global preferences",
              "children": [

                ]
            },
            {
              "id":"eclipsevar",
              "title":"Eclipse variables",
              "children": [

                ]
            },
            {
              "id":"console",
              "title":"Ivy Console",
              "children": [

                ]
            },
            {
              "id":"ant",
              "title":"Eclipse's Ant integration",
              "children": [

                ]
            },
            {
              "id":"revdepexplorer",
              "title":"Reverse Dependency Explorer",
              "children": [

                ]
            },
            {
              "id":"resolve-visualizer",
              "title":"Resolve Visualizer",
              "children": [

                ]
            },
            {
              "id":"dev",
              "title":"Developer doc",
              "children": [
                  {
                    "id":"dev/build",
                    "title":"Building",
                    "children": [

                      ]
                  },
                  {
                    "id":"dev/release",
                    "title":"Releasing",
                    "children": [

                      ]
                  },
                  {
                    "id":"dev/updatesite",
                    "title":"Updatesite",
                    "children": [

                      ]
                  },
                  {
                    "id":"dev/dev-env-setup",
                    "title":"Development Environment Setup",
                    "children": [

                      ]
                  }
                ]
            }
          ]
      }
    ]
}