// 
//     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.
//

= DevFaqModuleReload
:jbake-type: wiki
:jbake-tags: wiki, devfaq, needsreview
:jbake-status: published
:keywords: Apache NetBeans wiki DevFaqModuleReload
:description: Apache NetBeans wiki DevFaqModuleReload
:toc: left
:toc-title:
:syntax: true

== Do I need to restart NetBeans every time to debug new changes?

Q: I am going to develop something on the NetBeans platform, and the question is - do I need to restart NetBeans every time to debug new changes?

For example, I want to enhance the Search dialog. I have built the utilities module (containing SearchPane) using Ant - what is next?

A: You have several options:

1. Debug Project from the (development) IDE. After making changes - within a method body only! - use Apply Code Changes from the IDE, and they should take effect immediately in the target platform.
2. Run Project (no need for the debugger). After making changes to code, shut down the platform and Run Project again - the module will be rebuilt and the platform started with your changes in effect.
3. Run Project. After making changes, select Reload in Target Platform from the project's context menu in the IDE. This will try to disable the module and reenable the new version. Only works for regular modules (not autoload or eager), and will likely cause mayhem if a lot of other modules depend on this one, so not always feasible.
4. Install link:Javeleon.asciidoc[Javeleon] in the development IDE. Then use the steps from #3, with the advantages that autoload and eager modules are supported (as of NB 7.2 only), modules with many incoming dependencies work fine, and (like #1 but without its restrictions) any running state is preserved.
5. Do not run the project; just select Reload in Development IDE from the context menu. Similar to #3 but reloads inside the current IDE, not in a separate target platform.

Procedure #2 is safest. #1 is fine for minor tweaks. #4 basically supersedes #3 if you do not mind using an added tool, and is most convenient when you are making a lot of nontrivial changes in rapid succession. #5 is not recommended except for demos.

=== Apache Migration Information

The content in this page was kindly donated by Oracle Corp. to the
Apache Software Foundation.

This page was exported from link:http://wiki.netbeans.org/DevFaqModuleReload[http://wiki.netbeans.org/DevFaqModuleReload] , 
that was last modified by NetBeans user Skygo 
on 2013-12-17T22:36:39Z.


*NOTE:* This document was automatically converted to the AsciiDoc format on 2018-02-07, and needs to be reviewed.
