
////
     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 11.2 Features
:jbake-type: page-noaside
:jbake-tags: 11.2 features
:jbake-status: published
:keywords: Apache NetBeans 11.2 IDE features
:icons: font
:description: Apache NetBeans 11.2 features
:toc: left
:toc-title: 
:toclevels: 4
:syntax: true
:source-highlighter: pygments
:experimental:
:linkattrs:

Apache NetBeans 11.2 is the second Apache NetBeans release outside the Apache Incubator and the link:https://cwiki.apache.org/confluence/display/NETBEANS/Release+Schedule[second release of the new quarterly release cycle].

TIP: The LTS release of the Apache NetBeans 11 cycle is Apache NetBeans 11.0. The 11.1 and 11.2 releases have not been tested as heavily as the LTS release and may therefore be less stable. Use 11.2 to use the latest features and to provide feedback for the next LTS release, scheduled for April 2020. Go here to download  link:/download/nb110/nb110.html[Apache NetBeans 11.0], the current LTS release.

== Release Highlights

- JDK 13 support
- PHP 7.4 support
- JavaScript parser is now correctly licensed and no longer needs to be installed separately: link:https://github.com/apache/netbeans/pull/1407[https://github.com/apache/netbeans/pull/1407]
- Enhancement to the installer enables subsets of Apache NetBeans to be installed: https://github.com/apache/netbeans/pull/1505

== Newly Introduced Features

=== Java

The highlights of enhancements in the Java area are...

=== PHP

The highlights of enhancements in the PHP area are...

== Enhancements and Fixes

Closed issues for 11.2: link:https://github.com/apache/netbeans/milestone/3?closed=1[https://github.com/apache/netbeans/milestone/3?closed=1]

The highlights of the enhancements and fixes are listed below.

=== Enhancements

Gradle enhancements include being able to read the JDK's "--enable-preview": https://github.com/apache/netbeans/pull/1494
Amazon-related updates: https://github.com/apache/netbeans/pull/1312
LSP server for Java: https://github.com/apache/netbeans/pull/926
HTML5 attribute syntax support: https://github.com/apache/netbeans/pull/1380
Cleaned up Welcome Screen no longer refers to Oracle backends: https://github.com/apache/netbeans/pull/1457

=== Fixes

- Maven-based NetBeans modules can now be created again: link:https://github.com/apache/netbeans/commit/9e32a853c38f2b7514a42a3395a673d8ad06300f[https://github.com/apache/netbeans/commit/9e32a853c38f2b7514a42a3395a673d8ad06300f]
- "Copy Dependent Libraries" in Ant-based projects works again: link:https://github.com/apache/netbeans/pull/1469[https://github.com/apache/netbeans/pull/1469]
- OpenJFX Gluon samples are now correctly registered: link:https://github.com/apache/netbeans/pull/1503[https://github.com/apache/netbeans/pull/1503]

== Notes

- The donation of the C / C++ features from Oracle to Apache was not complete at the time of the 11.2 release, though it is not far off, and the 11.3 release (January 2020) is scheduled to focus primarily on the integration of the C/C++ features, once they land in the Apache NetBeans GitHub.
- WildFly integration is supported by means of the link:http://plugins.netbeans.org/plugin/76472/wildfly-application-server[WildFly Application Server] plugin located in the Plugin Portal.

