
////
     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.
////
= Apache NetBeans source and daily builds
:jbake-type: page
:jbake-tags: 
:jbake-status: published
:keywords: Apache NetBeans source and daily builds
:icons: font
:description: Apache NetBeans source and daily builds

All Apache NetBeans source code is freely available to build yourself, or you can
download (unsupported) daily development builds.

== Daily builds

Please visit link:https://builds.apache.org/job/netbeans-linux/[https://builds.apache.org/job/netbeans-linux/] and link:https://builds.apache.org/job/netbeans-windows/[https://builds.apache.org/job/netbeans-windows/] for the daily builds.

== Building from source

You can of course build Apache NetBeans from source. To do so:

. Clone the https://github.com/apache/netbeans GitHub repository.
. Install Oracle's Java or Open JDK (v8, v11).
. Install Apache Ant 1.10 or greater (https://ant.apache.org/).
. Set JAVA_HOME and ANT_HOME appropriately or leave them undefined.

Once you're all set just enter the `netbeans` directory and type:

- `ant build` to build the Apache NetBeans IDE on JDK 8, on JDK 11 also type -Dpermit.jdk9.builds=true with the `ant build` command.
  ** This will build a binary zip bundle of the IDE at `./nbbuild/NetBeans-<version-hash>-release.zip`. Extract that zip in a place of your choosing and run `netbeans/bin/netbeans` (or `netbeans/bin/netbeans.exe` on Windows).
- `ant tryme` to run the Apache NetBeans IDE directly from the build folder rather than the zip for development purposes.

For details, go here: https://cwiki.apache.org/confluence/display/NETBEANS/Development+Environment

Now that you have built Apache NetBeans from source you may want to link:/participate/submit-pr.html[submit a pull request].

=== Repositories

This is a list of Apache NetBeans repositories:

- https://github.com/apache/netbeans The main source code repository.
- https://github.com/apache/netbeans-website This website's repository.
- https://github.com/apache/netbeans-website-cleanup A repository used to clean up existing documentation from http://netbeans.org
- Emilian Bold has converted the previous Mercurial repository (http://hg.netbeans.org) to git, for historical reference, and has kindly uploaded it to GitHub at https://github.com/emilianbold/netbeans-releases. Thanks, Emilian!





