<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!--
  Copyright 2010, Oracle Inc. 
  All Rights Reserved.
-->

<html>
<head>
<link rel="stylesheet" type="text/css" href="../../../netbeans.css">
<link rel="stylesheet" type="text/css" media="print" href="../../../print.css">
<link rel="shortcut icon" href="https://netbeans.org/favicon.ico" type="image/x-icon" >
<title>NetBeans IDE 7.0.1 Installation Instructions</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
<meta name="description" content="Installation Instructions for NetBeans IDE 7.0.1">
<meta name="keywords" content="NetBeans, IDE, free, open source, install notes, developer, installer, NetBeans, NetBeans IDE, NetBeans installer, NetBeans development environment" >
<style type="text/css">
<!--
.style2 {color: #000000}
-->
</style>
</head>
<body>
<a name="top"></a>
<h1>NetBeans IDE 7.0.1 Installation Instructions</h1>
<div class="articledate" style="margin-left: 0px;">Last updated: <!-- #BeginDate format:Am1 -->August 1, 2011<!-- #EndDate --> </div>
<p>This document describes how to install NetBeans IDE 7.0.1 on your system. Please see the NetBeans IDE 7.0.1 Release Notes for information about <a href="relnotes.html#system_requirements">supported operating systems and hardware configurations</a> for the IDE. To learn about the new features included in this release of the IDE see the <a href="index.html">NetBeans IDE 7.0.1 Release Information</a> page.</p>

<h2>Contents</h2>
<ul>
<li><a href="#requiredsoftware" title="Required Software">Required Software</a></li>
<li><a href="#downloadoptions" title="Installer Download Options">Installer Download Options</a></li>
<li><a href="#customizeinstall" title="Customizing Your Installation">Customizing Your Installation</a></li>
<li><a href="#startdownload" title="Starting the Download">Starting the Download</a></li>
<li><a href="#installation" title="Installing the Software">Installing the Software</a><div>
<ul>
<li><a href="#install_windows">Microsoft Windows, Solaris OS, and Linux</a></li>
<li><a href="#install_mac">Mac OS X</a> </li>
<li><a href="#install_zip">Platform-Independent Package</a> </li>
</ul>
</div></li>
<li><a href="#uninstallation" title="Uninstalling the Software">Uninstalling the Software</a><div>
<ul>
<li><a href="#uninstall_windows">Microsoft Windows</a></li>
<li><a href="#uninstall_sollinux">Solaris OS, Linux</a></li>
<li><a href="#uninstall_mac">Mac OS X</a></li>
</ul>
</div></li>
<li><a href="#upgrading">Upgrading and Multiple Installation Support</a></li>
<li><a href="#troubleshooting" title="Troubleshooting">Trouble</a><a href="#troubleshooting" title="Troubleshooting">shooting</a></li>
<li><a href="#moreinformation" title="More Information">More In</a><a href="#moreinformation" title="More Information">formation</a></li>
</ul>
<h2><a name="requiredsoftware" id="requiredsoftware"></a>Required Software</h2>
<p>The Java SE Development Kit (JDK) 6 Update 26 or later is required to install NetBeans IDE. The 7.0.1 version of the IDE can not be installed using JDK 5.0. You can download the latest update of JDK 6 at <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank">http://www.oracle.com/technetwork/java/javase/downloads</a>.</p>
<p> The PHP and C/C++ NetBeans bundles only require the Java Runtime Environment (JRE) 6 to be installed and run. However, if you are planning to use any of the Java features, you need JDK 6 or JDK 7. </p>
<p align="center"><a href="#top">top</a></p>
<h2><a name="downloadoptions" id="downloadoptions"></a>Installer Download Options</h2>
<p>On the NetBeans IDE <a href="https://netbeans.org/downloads/" target="_blank">Download page</a>, you can obtain one of several installers, each of which contains the base IDE and additional tools.  </p>
<p>The following installers are available: </p>
<ul>
   <li><b>Java SE</b>. Supports all standard Java SE development features as well as support for NetBeans RCP development platform.</li>
   
   <li><b>Java EE</b>. Provides tools for developing Java SE and Java EE  applications as well as support for NetBeans RCP development platform. This download option also includes GlassFish Server Open Source Edition 3.1, and Apache Tomcat 7.0.14 software. </li>
   <!--<li><b>Ruby</b>. Provides tools for Ruby development and supports Rails and JRuby. Also contains GlassFish Server Open Source Edition 3.1b36.</li>-->
   <li><b>C/C++</b>. Supports development in the C, C++, Qt, Fortran and Assembly languages. </li>
   <li><b>PHP</b>. Provides tools for PHP 5.x development, Zend and Symfony Framework support.</li>
   <li><b>All. </b> This is a full download option, which contains all the runtimes and technologies available for the NetBeans IDE.  </li>
</ul>
<p align="center"><a href="#top">top</a></p>
<h2><a name="customizeinstall"></a>Customizing Your Installation</h2>
<p>If you download the <b>All</b> download option, you can choose exactly what tools and runtimes to install. Click Customize at the Welcome page of the installer and select the features that you want to use. For more information, see <a href="#installation" title="Installing the Software">Installing the Software</a>.</p>
<p>If you want to add functionality to your NetBeans IDE configuration, use the NetBeans Plugin Manager. For example, assume that you start out by downloading and installing the PHP pack. You then decide that you want to try out the C/C++ functionality. To do this, go to the NetBeans Plugin Manager from the IDE (choose Tools &gt; Plugins) and add the C/C++ pack to your existing installation.</p>
<p>There are several important notes about installation and configuration of some NetBeans IDE features: </p>
<ol>
  <li>Apache Tomcat 7.0.14 is included in the <b>Java EE</b> and <b>All</b> download options but it is not installed by default from either of these options. To install Apache Tomcat, select the appropriate option below:
    <ul> 
  <li>from the <b>Java EE</b> download, launch the installer and select the Apache Tomcat 7.0.14 checkbox at the Welcome page;</li>
  <li>from the <b>All</b> download, launch the installer and select Apache Tomcat 7.0.14 in the Customize Installation dialog box.</li>
  </ul></li>

  <li>For C/C++ development (applicable for the <b>C/C++</b> and <b>All</b> downloads), you need to additionally install compilers and tools. For more information, refer to the <a href="cpp-setup-instructions.html">Configuring the NetBeans IDE for C/C++/Fortran</a>. </li>
  <li>For Mac OS X, you can customize the NetBeans IDE installation from the <b>All</b> download. The IDE installation from <b>Java SE</b>, <b>Java EE</b>, <b>C/C++</b>, and <b>PHP</b> downloads cannot be customized. </li>
  <li>You can also download <a href="#install_zip">a platform-independent zip file</a> and run the NetBeans IDE executable file. Note that the GlassFish Server Open Source Edition and Apache Tomcat are only available with platform-specific installers. </li>
</ol>
<p align="center"><a href="#top">top</a></p>
<h2><a name="startdownload" id="startdownload"></a>Starting the Download</h2>

<ol>
<li>Go to <a href="https://netbeans.org/downloads/" target="_blank"> <strong>https://netbeans.org/downloads/</strong></a></li>
<li>In the upper right area of the page, select the language and platform from the drop-down list. 
  You can also choose to download and use the platform-independent zip file. </li>
<li>Click the Download button for the download option that you want to install.</li>
<li>Save the installer file to your system.</li>
</ol>
<p align="center"><a href="#top">top</a></p>
<h2><a name="installation"></a>Installing the Software</h2>

<p>Follow the instructions in this section to install the IDE on your system. These installation instructions apply to all supported platforms. For the list of supported platforms and system requirements, see the <a href="relnotes.html#system_requirements">release notes</a>. </p>
<h3><a name="install_windows" id="install_windows">Microsoft Windows, Solaris OS, and Linux</a></h3>
<p><b>To install the software:</b></p>
  <ol>
    <li>After the download completes, run the installer. 
   <ul>
    <li>For Windows, the installer executable file has the <tt>.exe</tt> extension. Double-click the installer file to run it. </li>
    <li>For Solaris and Linux platforms, the installer file has the <tt>.sh</tt> extension. For these platforms, you need to make the 
    installer files executable by using the following command: <tt>chmod +x &lt;<i>installer-file-name</i>&gt;</tt></li>
   </ul>
  </li>
    <li>If you downloaded the <b>All</b> bundle, you can customize your installation. Perform the following steps at the Welcome page of the installation wizard:
      <ol type="a">
         <li>Click Customize.</li>
         <li>In the Customize Installation dialog box, make your selections.</li>
         <li>Click OK.</li>
      </ol>
    </li>
     <li>At the Welcome page of the installation wizard, click Next.</li>
     <li>At the License agreement page, review the license agreement, click the acceptance check box, and click Next.</li>
	 <li>At the JUnit License Agreement page, decide if you want to install JUnit and click the appropriate option, click Next.</li>
     <li>At the NetBeans IDE installation page, do the following:
       <ol type="a">
      <li>Accept the default installation directory for the NetBeans IDE or specify another directory.
         <p><b>Note:</b> The installation directory must be empty and the user profile you are using to run the installer must have 
         read/write permissions for this directory.</p></li>
      <li>Accept the default JDK installation to use with the NetBeans IDE or select a different installation from the drop-down list.
          If the installation wizard did not find a compatible JDK installation to use with the NetBeans IDE, your JDK is not installed 
          in the default location. In this case, specify the path to an installed JDK and click Next, or cancel the current installation. 
          After installing the required JDK version you can restart the installation.</li>
       </ol></li>
   <li>If the GlassFish Server Open Source Edition 3.1 installation page opens, accept the default installation directory or specify another installation location. </li>
   <li>If you are installing Apache Tomcat, on its installation page, accept the default installation directory or specify another installation location. Click Next.</li>
   <li>At the Summary page, verify that the list of components to be installed is correct and that you have adequate space on your system for the installation.</li>
   <li>Click Install to begin the installation.</li>
   <li>At the Setup Complete page, provide anonymous usage data if desired, and click Finish.</li>
  </ol>
<p class="notes"><b>Note:</b> If you encounter problems successfully completing the software installation, see <a href="#troubleshooting">Troubleshooting</a> for descriptions and suggested workarounds for unresolved issues that could affect the installation process. </p>
<h3><a name="install_mac" id="install_mac">Mac OS X</a></h3>
<p><b>To install the software:</b></p>
<ol>
  <li>After the download completes, run the installer. The installer file has the <tt>.dmg</tt> extension. </li>
  <li>On the panel that opens click the package icon. The package has the <tt>.mpkg</tt> extension. The installation wizard starts.</li>
  <li>At the Welcome page of the installation wizard, click Continue.</li>
  <li>Review the license agreement and click Continue. Click Accept in the pop-up window to accept the license.</li>
  
  <li>At the Select a Destination page, select the drive and click Continue. </li>
  <li>If you downloaded the <b>All</b> bundle, you can customize your installation. On the last installation wizard panel, press the Customize button in the bottom left-hand side of the panel. The tree of products is displayed.</li>
  <li>Select the products you want to install.</li>
  <li>Enter the administrator's name and password for your system and click OK to begin the installation.</li>
</ol>

<h3><a name="install_zip" id="install_zip">Platform-Independent Package </a></h3>
<p><b>To run the software:</b></p>
<ol>
  <li>After the download of the platform-independent ZIP file completes, extract it to any folder on your system. </li>
  <li>Run the executable file located in the <tt>netbeans/bin</tt> directory. </li>
  <li>Accept the License Agreement. </li>
  <li>At the JUnit License Agreement page, decide if you want to install JUnit and click the appropriate option, click Next. The NetBeans IDE installation starts. </li>
</ol>
<p><span class="notes"><b>Note</b>: If a compatible JDK installation cannot be found, you might need to manually add a path to the 
JDK installation directory by doing the following:</span></p>
<ol type="a">
  <li>Open the <tt>netbeans.conf</tt> file located in the <tt>netbeans/etc</tt> directory in a text editor.</li>
  <li>Enter the location of a compatible JDK installation for the <tt>netbeans_jdkhome</tt> option. The default location in Windows is <tt>C:\Program Files\Java\jdk1.7.0</tt>.</li>
  <li>Save the <tt>netbeans.conf</tt> file and run the  executable file in the <tt>netbeans/bin</tt> directory.</li>
</ol>

<p><span class="notes"><b>Note</b>: The GlassFish Server Open Source Edition and Apache Tomcat are available only with platform-specific installers.</span></p> 
<p><span class="notes"><b>Note</b>: To use the GlassFish Server Open Source Edition and/or Apache Tomcat that are already installed on your machine, in the NetBeans IDE, click <tt>Servers</tt> on the
<tt>Tools</tt> menu.  This displays the Add Server Instance Wizard which helps to register an instance of the
required web server with the NetBeans IDE.
</span></p>

<p align="center"><a href="#top">top</a></p>
<h2><a name="uninstallation">Uninstalling the Software</a></h2>
<p>Follow the instructions in this section to uninstall the IDE on your system. These uninstallation instructions apply to all supported platforms. For the list of supported platforms, see the <a href="relnotes.html">release notes</a>.</p>
<div>
<h3><a name="uninstall_windows">Microsoft Windows</a></h3>
<p>If necessary, you can uninstall the NetBeans IDE, the GlassFish Server Open Source Edition 3.1, and Apache Tomcat using the following procedures.</p>
<p><b>To uninstall the IDE</b>:</p>
<ol>
  <li>Shut down the IDE.  </li>
  <li>From the Control Panel, select Add or Remove Programs, then select NetBeans IDE 7.0.1 and click Remove.</li>
  <li>To uninstall GlassFish and Tomcat together with the IDE, at the Summary page make sure that the correct versions are listed and check the appropriate checkboxes.</li>
  <li>Check the NetBeans user directory checkbox if you want to remove it together with the  IDE, and click Uninstall. </li>
  <li>At the Summary page, click Uninstall.  </li>
  <li>After uninstallation completes, click Finish.</li>
</ol>
<p><b>To uninstall the GlassFish Server Open Source Edition 3.1: </b></p>
<ol>
  <li>Shut down the IDE.</li>
  <li>From the Control Panel, select Add or Remove Programs, then select GlassFish Server Open Source Edition 3.1 and click Remove.</li>
</ol>
<p><b>To uninstall Apache Tomcat: </b></p>

<ol>
  <li>Shut down the IDE.</li>
  <li>From the Control Panel, select Add or Remove Programs, then select Apache Tomcat 7.0.14 and click Remove.</li>
</ol>
</div>
<div>
<h3><a name="uninstall_sollinux">Solaris OS, Linux</a></h3>
<p>If necessary, you can uninstall the NetBeans IDE, the GlassFish Server Open Source Edition 3.1, and Apache Tomcat using the following procedures.</p>
<p><b>To uninstall the IDE</b>:</p>

<ol>
  <li>Shut down the IDE.</li>
  <li>In the IDE installation directory, run the <tt>uninstall.sh</tt> file. </li>
  <li>To uninstall GlassFish and Tomcat together with the IDE, at the Summary page make sure that the correct versions are listed and check the appropriate checkboxes. </li>
  <li>At the Summary page, click Uninstall. 
  </li>
  <li>After uninstallation completes, click Finish.</li>
</ol>
<p><b>To uninstall GlassFish Server Open Source Edition 3.1</b>:</p>
<ol>
  <li>Shut down the IDE.</li>
  <li>Locate the application server installation directory.
  <p class="notes"><b>Note</b>: The default installation location is different depending on the type of installation and the platform. The following table shows the default application server installation directory for various platforms.</p>

  <table>
    <tbody>
        <tr class="tblheader">
            <th width="107">Platform</th>
            <th width="130">Installing As...</th>
			<th width="264">GlassFish 3.1 Installation</th>
        </tr>
        <tr class="tbltd0">
          <td>Windows</td>
          <td>user with admin rights</td>
          <td><tt>%ProgramFiles%\glassfish-3.1</tt></td>
        </tr>
        <tr class="tbltd1">
          <td>Windows</td>
          <td>user</td>
          <td><tt>%USERPROFILE%\glassfish-3.1</tt></td>
        </tr>
        <tr class="tbltd0">
            <td>Solaris&nbsp;OS&nbsp;</td>
            <td>root</td>
			 <td><tt>/opt/glassfish-3.1</tt></td>
        </tr>
        <tr class="tbltd1">

            <td>Solaris&nbsp;OS, Linux</td>
            <td valign="top">user</td>
			<td valign="top"><tt>~/glassfish-3.1</tt></td>
        </tr>
        <tr class="tbltd0">
            <td>Linux</td>
            <td>root</td>
			<td><tt>/usr/local/glassfish-3.1</tt></td>
        </tr>
    </tbody>
</table>
  </li>
  <li>In the application server installation directory, run the <tt>uninstall.sh</tt> file.</li>

  <li>At the Summary page, click Uninstall.
  </li>
  <li>After uninstallation completes, click Finish.</li>
</ol>
<p><b>To uninstall Apache Tomcat: </b></p>
<ol>
  <li>Shut down the IDE.</li>

  <li>Locate the Apache Tomcat installation directory. 
    <p class="notes"><b>Note</b>: The default installation location varies depending on the type of installation and the platform. The following table shows the default application server installation directory for different platforms.</p>

  <table>
    <tbody>
        <tr class="tblheader">
            <th width="107">Platform</th>
            <th width="130">Installing As...</th>
			<th width="496">Apache Tomcat 7.0.14 Installation</th>
        </tr>
        <tr class="tbltd0">
          <td>Windows</td>
          <td>user with admin rights</td>
          <td><tt>%ProgramFiles%\Apache Software Foundation\Apache Tomcat 7.0.14</tt></td>
        </tr>
        <tr class="tbltd1">
          <td>Windows</td>
          <td>user</td>
          <td><tt>%USERPROFILE%\Apache Software Foundation\Apache Tomcat 7.0.14</tt></td>
        </tr>
        <tr class="tbltd0">
            <td>Solaris&nbsp;OS&nbsp;</td>
            <td>root</td>
			 <td><tt>/opt/apache-tomcat-7.0.14</tt></td>
        </tr>
        <tr class="tbltd1">

            <td>Solaris&nbsp;OS, Linux</td>
            <td valign="top">user</td>
			<td valign="top"><tt>~/apache-tomcat-7.0.14</tt></td>
        </tr>
        <tr class="tbltd0">
            <td>Linux</td>
            <td>root</td>
			<td><tt>/usr/local/apache-tomcat-7.0.14</tt></td>
        </tr>
    </tbody>
</table>
  </li>
  
  <li>In the application server installation directory, run the <tt>uninstall.sh</tt> file.  </li>
  <li>At the Summary page, click Uninstall. </li>
  <li>After uninstallation completes, click Finish</li>
</ol>
</div>

<div>
<h3><a name="uninstall_mac" id="uninstall_mac">Mac OS X</a></h3>
<p><b>To uninstall the IDE and application server</b>:</p>
<ol>
  <li>Shut down the software.</li>
  <li>Drag the program folders or files to the Trash.    
  Note that the default location for the IDE and application server is <tt>/Applications/NetBeans/</tt>.  </li>
</ol>
</div>

<div>
<h3><a name="uninstall_zip" id="uninstall_zip">Platform-Independent Package</a></h3>
<p>To uninstall the IDE files, follow the steps described in the <a href="#clean">Cleaning Up After Incomplete Installations</a> section of this document. </p>
</div>

<p align="center"><a href="#top">top</a></p>

<h2><a name="upgrading"></a>Upgrading and Multiple Installation Support</h2>
<p>Multiple installations of NetBeans IDE 5.x and 6.x can coexist with NetBeans IDE 7.0.1 on the same system. You do not have to uninstall  the earlier versions in order to install or run NetBeans IDE 7.0.1. </p>
<p>If you have an existing installation of NetBeans IDE you can choose whether or not to import the user settings from the existing user directory when you run NetBeans IDE 7.0.1  for the first time.</p>
<p align="center"><a href="#top">top</a></p>
<h2><a name="troubleshooting" id="troubleshooting"></a>Troubleshooting</h2>
<div>
<h3>About the Installer Working Directory</h3>
<p>The installer stores data about installation sessions in the installer working directory. Examples of this data are the list of components installed on your system, installation log messages, and registry data. </p>

<p>The default location for the installer working directory is <tt>%USERPROFILE%\.nbi</tt> on Windows and <tt>~/.nbi</tt> on other platforms. The log subdirectory contains the installation log files. </p>
</div>
<div>
<h3><a name="clean"></a>Cleaning Up After Incomplete Installations</h3>
<p>After incomplete or unsuccessful installations, you might need to clean up your system from previous installations. </p>
<p><b>For Microsoft Windows, Solaris OS, and Linux:</b></p>
<ol>

  <li>Delete the installer working directory.</li>
  <li>Delete the installation directories of the IDE and the GlassFish application server.</li>
  <li>On the Windows platform, delete all <tt>nbi*</tt> registry entries from the following registry keys: 
    <tt>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall</tt> 
    <tt>HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall</tt> </li>

</ol>
<p><b>For Mac OS X:</b></p>
<ul>
  <li>Drag the program folders or  files to the Trash. </li>
</ul>
</div>
<div>
<h3>Disabling Some Software Before Installation</h3>
<p>It is better to disable firewall, antivirus, and monitoring applications before you start installation. Some of these applications can prevent IDE components from being configured correctly during the installation process. </p>
<p>For example, if you have the Logitech Process Monitor application (<tt>LVPrcSrv.exe</tt>) running on your system, switch it off before installation. </p>

</div>
<p align="center"><a href="#top">top</a></p>
<h2><a name="moreinformation"></a>More Information</h2>

<ul>
<li><a href="index.html" target="_blank">NetBeans IDE 7.0.1 Release Information</a></li>
<li><a href="relnotes.html" target="_blank">NetBeans IDE 7.0.1 Release Notes</a></li>
<li><a href="http://wiki.netbeans.org/NetBeansUserFAQ#Installation" target="_blank">NetBeans IDE Installation FAQ</a></li>
</ul>
<div class="feedback-box"><a href="https://netbeans.org/about/contact_form.html?to=3&subject=Feedback:%20NetBeans%20IDE%207.0.1%20Installation%20Instructions">Send Us Your Feedback</a>
</div>
<br style="clear:both;">
<p align="center"><a href="#top">top</a></p>
</body>
</html>
