<!--
  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.
-->
<html>
<head>
<title>The Derby Nature</title>
</head>
<body>
<h2>The Derby Nature</h2>
<p>
Enabling a nature for a project allows a plug-in to give a project a 
personality or characteristics it desires.  By adding the Derby Nature
to a specific project you are enabling the Derby features for that project.
</p>
<p>
<h3><a href="nature.html">Adding the Derby nature to a Java project</a></h3>  
</p>
<p>
The Derby jar files are added to the Java project and the project class path 
is automatically updated to include these jar files.  All Derby features, 
like starting and stopping the Network Server, and running <b>ij</b> 
and <b>sysinfo</b> are enabled for the project.
</p>
<p>
<h3><a href="remove_nature.html">Removing the Derby nature from a Java project</a></h3>
</p>
<p>
All Derby jar files are removed from the project and all Derby 
features are disabled for the Java project.
</p>
<p>
</p>
</body>
</html>
