
////
     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` to build the Apache NetBeans IDE on JDK 8, on JDK 11 also type -Dpermit.jdk9.builds=true with the `ant` command.
  ** Once built, the IDE bits are placed in the `./nbbuild/netbeans` directory. You can run the IDE from within the `netbeans` directory by typing `./nbbuild/netbeans/bin/netbeans` on unixes (for Windows the command is equivalent).
- `ant tryme` to run the Apache NetBeans IDE.

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!





