You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by ne...@apache.org on 2020/07/22 08:20:44 UTC

[netbeans] branch master updated: [NETBEANS-4021] Jakarta EE 8 Support

This is an automated email from the ASF dual-hosted git repository.

neilcsmith pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git


The following commit(s) were added to refs/heads/master by this push:
     new 1dfbad0  [NETBEANS-4021] Jakarta EE 8 Support
     new 9840dfe  Merge pull request #2023 from juneau001/jakartaee8_support
1dfbad0 is described below

commit 1dfbad00a3eb4b8c3af041dc2530b3483f6d57dd
Author: Josh Juneau <ju...@gmail.com>
AuthorDate: Mon Mar 16 06:24:12 2020 -0500

    [NETBEANS-4021] Jakarta EE 8 Support
---
 .../org-netbeans-modules-glassfish-common.sig      |   4 +-
 .../common/GlassfishInstanceProvider.java          |  44 ++---
 .../modules/glassfish/common/ServerDetails.java    |  22 +--
 .../common/registration/AutomaticRegistration.java |   3 +
 .../common/wizards/GlassfishWizardProvider.java    |   7 +
 .../modules/glassfish/spi/ServerUtilities.java     |  72 ++++----
 .../api/config/GlassfishConfiguration.java         |  15 +-
 .../glassfish/eecommon/api/config/J2EEVersion.java |  20 ++-
 .../javaee/AbstractHk2ConfigurationFactory.java    |   9 +-
 .../modules/glassfish/javaee/Bundle.properties     |   4 +-
 .../glassfish/javaee/Hk2DeploymentFactory.java     |  57 +++---
 .../glassfish/javaee/Hk2JavaEEPlatformFactory.java |  15 +-
 .../glassfish/javaee/Hk2JavaEEPlatformImpl.java    | 122 ++++++-------
 .../modules/glassfish/javaee/Hk2JaxWsStack.java    |  52 +++---
 .../glassfish/javaee/Hk2OptionalFactory.java       |  30 ++--
 .../netbeans/modules/glassfish/javaee/layer.xml    |  63 ++++++-
 .../modules/glassfish/javaee/nbdepjakartaee8.xml   |  54 ++++++
 .../org-netbeans-modules-glassfish-tooling.sig     |   3 +-
 .../tooling/server/config/GlassFishV5_1_0.xml      | 103 +++++++++++
 .../tooling/server/config/JavaEEProfile.java       |  22 ++-
 .../gradle/javaee/GradleJavaEEProjectSettings.java |  15 +-
 .../web/newproject/ServerSelectionPanelVisual.java |   4 +-
 .../newproject/WebApplicationProjectWizard.java    |   8 +-
 .../AppClientProjectJAXWSClientSupport.java        |  10 +-
 .../j2ee/common/J2eeProjectCapabilities.java       |  10 +-
 .../netbeans/modules/j2ee/common/dd/DDHelper.java  |  23 ++-
 .../j2ee/common/J2eeProjectCapabilitiesTest.java   |  22 ++-
 .../nbproject/org-netbeans-modules-j2ee-core.sig   |   3 +-
 .../org/netbeans/api/j2ee/core/Bundle.properties   |   2 +
 .../src/org/netbeans/api/j2ee/core/Profile.java    |  10 ++
 .../org/netbeans/api/j2ee/core/ProfileTest.java    |  17 +-
 .../org/netbeans/modules/j2ee/ejbcore/Utils.java   |   3 +-
 .../ejb/wizard/dd/EjbJarXmlWizardIterator.java     |  40 ++---
 .../wizard/jpa/dao/AppServerValidationPanel.java   |   3 +-
 .../j2ee/ejbcore/ejb/wizard/mdb/MdbWizard.java     |   4 +-
 .../ejb/wizard/session/SessionEJBWizard.java       |  14 +-
 .../rules/PersistentTimerInEjbLite.java            |   2 +-
 enterprise/j2ee.kit/nbproject/project.xml          |   6 +
 .../modules/j2ee/deployment/impl/layer.xml         |   3 +-
 enterprise/jakartaee8.api/build.xml                |  25 +++
 enterprise/jakartaee8.api/external/binaries-list   |  30 ++++
 .../jakarta.annotation-api-1.3.5-license.txt       |  94 ++++++++++
 .../external/jakarta.batch-api-1.0.2-license.txt   |  93 ++++++++++
 ...rta.enterprise.concurrent-api-1.1.2-license.txt |  93 ++++++++++
 ...jakarta.enterprise.deploy-api-1.7.2-license.txt |  94 ++++++++++
 .../external/jakarta.faces-api-2.3.2-license.txt   |  93 ++++++++++
 .../jakarta.jakartaee-api-8.0.0-license.txt        |  93 ++++++++++
 .../jakarta.jakartaee-web-api-8.0.0-license.txt    |  93 ++++++++++
 .../external/jakarta.jms-api-2.0.3-license.txt     |  93 ++++++++++
 .../external/jakarta.mail-api-1.6.4-license.txt    |  93 ++++++++++
 .../jakarta.management.j2ee-api-1.1.4-license.txt  |  93 ++++++++++
 .../jakarta.resource-api-1.7.4-license.txt         |  93 ++++++++++
 .../jakarta.security.jacc-api-1.6.1-license.txt    |  93 ++++++++++
 .../jakarta.xml.registry-api-1.0.10-license.txt    |  93 ++++++++++
 .../external/jakarta.xml.rpc-api-1.1.4-license.txt |  93 ++++++++++
 enterprise/jakartaee8.api/manifest.mf              |   6 +
 .../nbproject/project.properties}                  |  14 +-
 enterprise/jakartaee8.api/nbproject/project.xml    |  31 ++++
 .../modules/jakartaee8/api}/Bundle.properties      |  19 +-
 .../modules/jakartaee8/api/jakartaee-api-8.0.xml   |  41 +++++
 .../jakartaee8/api/jakartaee-web-api-8.0.xml       |  41 +++++
 .../org/netbeans/modules/jakartaee8/api/layer.xml  |  35 ++++
 .../api/ant/ui/wizard/J2eeVersionWarningPanel.java |  42 +++--
 .../api/ant/ui/wizard/ProjectServerPanel.java      |  95 +++++-----
 .../j2ee/ui/customizer/impl/CustomizerRunWeb.java  |   4 +-
 .../j2ee/ui/wizard/ServerSelectionHelper.java      |   8 +-
 .../archetype/BaseJ2eeArchetypeProvider.java       |  25 ++-
 .../j2ee/ui/wizard/archetype}/Bundle.properties    |  18 +-
 .../ui/wizard/archetype/J2eeArchetypeFactory.java  |  18 +-
 .../modules/maven/j2ee/web/WebModuleImpl.java      |  13 +-
 .../maven/j2ee/web/WebRecoPrivTemplates.java       |  17 +-
 .../modules/maven/j2ee/JavaEEMavenTestBase.java    | 137 +++++++--------
 .../payara/jakartaee/Hk2JavaEEPlatformImpl.java    | 108 ++++++------
 .../modules/payara/jakartaee/Hk2JaxWsStack.java    |  50 +++---
 .../org-netbeans-modules-payara-tooling.sig        |   3 +-
 .../tooling/server/config/JavaEEProfile.java       |  25 ++-
 .../modules/web/jsf/JSFFrameworkProvider.java      |   4 +-
 .../web/jsf/wizards/FacesConfigIterator.java       |   6 +-
 .../jsf/wizards/JSFConfigurationPanelVisual.java   |   2 +-
 .../test/web/MavenWebProjectValidation.java        |   2 +
 .../netbeans/test/web/WebProjectValidation.java    |   3 +-
 .../modules/web/project/ProjectWebModule.java      | 146 ++++++++--------
 .../netbeans/modules/web/project/WebProject.java   |   3 +-
 .../jaxws/WebProjectJAXWSClientSupport.java        |  10 +-
 .../web/project/jaxws/WebProjectJAXWSSupport.java  |  66 +++----
 .../ui/customizer/WebProjectProperties.java        | 192 +++++++++++----------
 .../modules/web/project/WebProjectTest.java        |  17 +-
 .../websocket/editor/WebSocketMethodsTask.java     |   7 +-
 .../modules/websocket/wizard/WebSocketPanel.java   |  16 +-
 .../org-netbeans-modules-websvc-clientapi.sig      |   2 +-
 .../jaxws/client/ProjectJAXWSClientSupport.java    |  77 +++++----
 .../org-netbeans-modules-websvc-jaxwsapi.sig       |   2 +-
 .../websvc/jaxws/spi/ProjectJAXWSSupport.java      |  69 ++++----
 .../modules/ws/qaf/WebServicesTestBase.java        |  14 +-
 .../modules/websvc/rest/editor/AsyncConverter.java |  66 +++----
 .../websvc/rest/wizard/InterceptorPanel.java       |  20 ++-
 .../websvc/rest/wizard/JaxRsFilterPanel.java       |  18 +-
 .../org-netbeans-modules-websvc-restapi.sig        |   2 +-
 .../modules/websvc/rest/spi/MiscUtilities.java     |  30 ++--
 .../modules/websvc/rest/spi/RestSupport.java       |  78 +++++----
 nbbuild/cluster.properties                         |   1 +
 101 files changed, 2948 insertions(+), 934 deletions(-)

diff --git a/enterprise/glassfish.common/nbproject/org-netbeans-modules-glassfish-common.sig b/enterprise/glassfish.common/nbproject/org-netbeans-modules-glassfish-common.sig
index 1e0e657..190dd46 100644
--- a/enterprise/glassfish.common/nbproject/org-netbeans-modules-glassfish-common.sig
+++ b/enterprise/glassfish.common/nbproject/org-netbeans-modules-glassfish-common.sig
@@ -1410,6 +1410,7 @@ CLSS public final org.netbeans.modules.glassfish.common.GlassfishInstanceProvide
 fld public final static java.lang.String EE6WC_DEPLOYER_FRAGMENT = "deployer:gfv3ee6wc"
 fld public final static java.lang.String EE6_DEPLOYER_FRAGMENT = "deployer:gfv3ee6"
 fld public final static java.lang.String EE8_DEPLOYER_FRAGMENT = "deployer:gfv5ee8"
+fld public final static java.lang.String JAKARTAEE8_DEPLOYER_FRAGMENT = "deployer:gfv510ee8"
 fld public final static java.lang.String GLASSFISH_AUTOREGISTERED_INSTANCE = "glassfish_autoregistered_instance"
 fld public final static java.lang.String PRELUDE_DEPLOYER_FRAGMENT = "deployer:gfv3"
 fld public final static java.util.Set<java.lang.String> activeRegistrationSet
@@ -1436,7 +1437,7 @@ meth public void addServerInstance(org.netbeans.modules.glassfish.common.Glassfi
 meth public void removeChangeListener(javax.swing.event.ChangeListener)
 meth public void resultChanged(org.openide.util.LookupEvent)
 supr java.lang.Object
-hfds AUTOINSTANCECOPIED,EE6WC_INSTANCES_PATH,EE6_INSTANCES_PATH,EE8_INSTANCES_PATH,LOGGER,activeDisplayNames,cf,displayName,glassFishProvider,instanceMap,instancesDirNames,lookupResult,needsJdk6,noPasswordOptions,support,uriFragments
+hfds AUTOINSTANCECOPIED,EE6WC_INSTANCES_PATH,EE6_INSTANCES_PATH,EE8_INSTANCES_PATH,JAKARTAEE8_INSTANCES_PATH,LOGGER,activeDisplayNames,cf,displayName,glassFishProvider,instanceMap,instancesDirNames,lookupResult,needsJdk6,noPasswordOptions,support,uriFragments
 
 CLSS public org.netbeans.modules.glassfish.common.Installer
 cons public init()
@@ -2544,4 +2545,3 @@ meth public void startPrefixMapping(java.lang.String,java.lang.String) throws or
 meth public void unparsedEntityDecl(java.lang.String,java.lang.String,java.lang.String,java.lang.String) throws org.xml.sax.SAXException
 meth public void warning(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException
 supr java.lang.Object
-
diff --git a/enterprise/glassfish.common/src/org/netbeans/modules/glassfish/common/GlassfishInstanceProvider.java b/enterprise/glassfish.common/src/org/netbeans/modules/glassfish/common/GlassfishInstanceProvider.java
index acfade5..e81e9a6 100644
--- a/enterprise/glassfish.common/src/org/netbeans/modules/glassfish/common/GlassfishInstanceProvider.java
+++ b/enterprise/glassfish.common/src/org/netbeans/modules/glassfish/common/GlassfishInstanceProvider.java
@@ -45,7 +45,7 @@ import org.openide.util.lookup.Lookups;
  * GlassFish server instances provider.
  * <p/>
  * Handles all registered GlassFish server instances. Implemented as singleton
- * because NetBeans GUI components require singleton implementing                                                         
+ * because NetBeans GUI components require singleton implementing
  * {@link ServerInstanceProvider} interface.
  * <p/>
  * @author Peter Williams, Vince Kraemer, Tomas Kraus
@@ -64,10 +64,12 @@ public final class GlassfishInstanceProvider implements ServerInstanceProvider,
 
     public static final String EE6_DEPLOYER_FRAGMENT = "deployer:gfv3ee6"; // NOI18N
     public static final String EE8_DEPLOYER_FRAGMENT = "deployer:gfv5ee8"; // NOI18N
+    public static final String JAKARTAEE8_DEPLOYER_FRAGMENT = "deployer:gfv510ee8";
     public static final String EE6WC_DEPLOYER_FRAGMENT = "deployer:gfv3ee6wc"; // NOI18N
     public static final String PRELUDE_DEPLOYER_FRAGMENT = "deployer:gfv3"; // NOI18N
     static private String EE6_INSTANCES_PATH = "/GlassFishEE6/Instances"; // NOI18N
     static private String EE8_INSTANCES_PATH = "/GlassFishEE8/Instances"; // NOI18N
+    static private String JAKARTAEE8_INSTANCES_PATH = "/GlassFishJakartaEE8/Instances"; // NOI18N
     static private String EE6WC_INSTANCES_PATH = "/GlassFishEE6WC/Instances"; // NOI18N
 
     static public String PRELUDE_DEFAULT_NAME = "GlassFish_v3_Prelude"; //NOI18N
@@ -89,10 +91,10 @@ public final class GlassfishInstanceProvider implements ServerInstanceProvider,
                 if (glassFishProvider == null) {
                     runInit = true;
                     glassFishProvider = new GlassfishInstanceProvider(
-                            new String[]{EE6_DEPLOYER_FRAGMENT, EE6WC_DEPLOYER_FRAGMENT, EE8_DEPLOYER_FRAGMENT},
-                            new String[]{EE6_INSTANCES_PATH, EE6WC_INSTANCES_PATH, EE8_INSTANCES_PATH},
+                            new String[]{EE6_DEPLOYER_FRAGMENT, EE6WC_DEPLOYER_FRAGMENT, EE8_DEPLOYER_FRAGMENT, JAKARTAEE8_DEPLOYER_FRAGMENT},
+                            new String[]{EE6_INSTANCES_PATH, EE6WC_INSTANCES_PATH, EE8_INSTANCES_PATH, JAKARTAEE8_INSTANCES_PATH},
                             null,
-                            true, 
+                            true,
                             new String[]{"--nopassword"}, // NOI18N
                             new CommandFactory()  {
 
@@ -107,14 +109,14 @@ public final class GlassfishInstanceProvider implements ServerInstanceProvider,
                 }
             }
             if (runInit) {
-                glassFishProvider.init();                
+                glassFishProvider.init();
             }
             return glassFishProvider;
         }
     }
 
     public static final Set<String> activeRegistrationSet = Collections.synchronizedSet(new HashSet<String>());
-    
+
     private final Map<String, GlassfishInstance> instanceMap =
             Collections.synchronizedMap(new HashMap<String, GlassfishInstance>());
     private static final Set<String> activeDisplayNames = Collections.synchronizedSet(new HashSet<String>());
@@ -127,15 +129,15 @@ public final class GlassfishInstanceProvider implements ServerInstanceProvider,
     final private List<String> noPasswordOptions;
     final private CommandFactory cf;
     final private Lookup.Result<RegisteredDDCatalog> lookupResult = Lookups.forPath(Util.GF_LOOKUP_PATH).lookupResult(RegisteredDDCatalog.class);
-    
+
     @SuppressWarnings("LeakingThisInConstructor")
     private GlassfishInstanceProvider(
-            String[] uriFragments, 
+            String[] uriFragments,
             String[] instancesDirNames,
-            String displayName, 
+            String displayName,
             boolean needsJdk6,
-            String[] noPasswordOptionsArray, 
-            CommandFactory cf 
+            String[] noPasswordOptionsArray,
+            CommandFactory cf
             ) {
         this.instancesDirNames = instancesDirNames;
         this.displayName = displayName;
@@ -147,8 +149,8 @@ public final class GlassfishInstanceProvider implements ServerInstanceProvider,
         }
         this.cf = cf;
         lookupResult.allInstances();
-        
-        lookupResult.addLookupListener(this); 
+
+        lookupResult.addLookupListener(this);
     }
 
     @Override
@@ -193,7 +195,7 @@ public final class GlassfishInstanceProvider implements ServerInstanceProvider,
     public static ServerInstance getInstanceByUri(String uri) {
         return getProvider().getInstance(uri);
     }
-        
+
     /**
      * Get {@link GlassfishInstance} matching provided internal
      * server URI.
@@ -289,7 +291,7 @@ public final class GlassfishInstanceProvider implements ServerInstanceProvider,
         }
         return result;
     }
-    
+
     public Lookup getLookupFor(ServerInstance instance) {
         synchronized (instanceMap) {
             for (GlassfishInstance gfInstance : instanceMap.values()) {
@@ -300,7 +302,7 @@ public final class GlassfishInstanceProvider implements ServerInstanceProvider,
             return null;
         }
     }
-    
+
     public ServerInstanceImplementation getInternalInstance(String uri) {
         return instanceMap.get(uri);
     }
@@ -313,7 +315,7 @@ public final class GlassfishInstanceProvider implements ServerInstanceProvider,
         }
         return result;
     }
-    
+
     public <T> List<T> getInstancesByCapability(Class<T> serverFacadeClass) {
         List<T> result = new ArrayList<>();
         synchronized (instanceMap) {
@@ -348,7 +350,7 @@ public final class GlassfishInstanceProvider implements ServerInstanceProvider,
         }
         return result;
     }
-    
+
     @Override
     public void addChangeListener(ChangeListener listener) {
         support.addChangeListener(listener);
@@ -363,7 +365,7 @@ public final class GlassfishInstanceProvider implements ServerInstanceProvider,
     public boolean hasServer(String uri) {
         return getInstance(uri) != null;
     }
-    
+
     public ServerInstance getInstance(String uri) {
         ServerInstance rv = null;
         GlassfishInstance instance = instanceMap.get(uri);
@@ -412,7 +414,7 @@ public final class GlassfishInstanceProvider implements ServerInstanceProvider,
             GlassfishInstance.updateModuleSupport(gi);
         }
     }
-    
+
     // ------------------------------------------------------------------------
     // Persistence for server instances.
     // ------------------------------------------------------------------------
@@ -499,7 +501,7 @@ public final class GlassfishInstanceProvider implements ServerInstanceProvider,
         return null;
     }
 
-    String[] getNoPasswordCreatDomainCommand(String startScript, String jarLocation, 
+    String[] getNoPasswordCreatDomainCommand(String startScript, String jarLocation,
             String domainDir, String portBase, String uname, String domain) {
             List<String> retVal = new ArrayList<>();
         retVal.addAll(Arrays.asList(new String[] {startScript,
diff --git a/enterprise/glassfish.common/src/org/netbeans/modules/glassfish/common/ServerDetails.java b/enterprise/glassfish.common/src/org/netbeans/modules/glassfish/common/ServerDetails.java
index 08d6b8d..02e8ea1 100644
--- a/enterprise/glassfish.common/src/org/netbeans/modules/glassfish/common/ServerDetails.java
+++ b/enterprise/glassfish.common/src/org/netbeans/modules/glassfish/common/ServerDetails.java
@@ -51,7 +51,7 @@ import org.xml.sax.SAXException;
  * @author vkraemer
  */
 public enum ServerDetails {
-    
+
     /**
      * details for an instance of GlassFish Server 3.0/3.0.x
      */
@@ -135,7 +135,7 @@ public enum ServerDetails {
         "https://download.oracle.com/glassfish/4.0.1/release/glassfish-4.0.1-ml.zip", // NOI18N
         "https://javaee.github.io/glassfish/LICENSE" //NOI18N"
     ),
-    
+
     /**
      * details for an instance of GlassFish Server 4.1 and dev 4.2
      */
@@ -157,7 +157,7 @@ public enum ServerDetails {
         "https://download.oracle.com/glassfish/4.1.1/release/glassfish-4.1.1.zip", // NOI18N
         "https://javaee.github.io/glassfish/LICENSE" //NOI18N
     ),
-    
+
     /**
      * details for an instance of GlassFish Server 4.1.2
      */
@@ -168,7 +168,7 @@ public enum ServerDetails {
         "https://download.oracle.com/glassfish/4.1.2/release/glassfish-4.1.2.zip", // NOI18N
         "https://javaee.github.io/glassfish/LICENSE" //NOI18N
     ),
-    
+
     /**
      * details for an instance of GlassFish Server 5
      */
@@ -179,7 +179,7 @@ public enum ServerDetails {
         "https://download.oracle.com/glassfish/5.0/release/glassfish-5.0.zip", // NOI18N
         "https://javaee.github.io/glassfish/LICENSE" //NOI18N
     ),
-    
+
     /**
      * details for an instance of GlassFish Server 5
      */
@@ -195,7 +195,7 @@ public enum ServerDetails {
      * details for an instance of GlassFish Server 5
      */
     GLASSFISH_SERVER_5_1_0(NbBundle.getMessage(ServerDetails.class, "STR_510_SERVER_NAME", new Object[]{}), // NOI18N
-        "deployer:gfv5ee8", // NOI18N
+        "deployer:gfv510ee8", // NOI18N
         510,
         "https://repo1.maven.org/maven2/org/glassfish/main/distributions/glassfish/5.1.0/glassfish-5.1.0.zip", // NOI18N
         "https://repo1.maven.org/maven2/org/glassfish/main/distributions/glassfish/5.1.0/glassfish-5.1.0.zip", // NOI18N
@@ -276,7 +276,7 @@ public enum ServerDetails {
 
     /**
      * Determine the version of the GlassFish Server that wrote the domain.xml file
-     * 
+     *
      * @param domainXml the file to analyze
      * @return -1 if domainXml is null, unreadable or not a directory
      * @throws IllegalStateException if domainXml cannot be parsed
@@ -296,14 +296,14 @@ public enum ServerDetails {
         TreeParser.readXml(domainXml, paths);
         return dp.hasDefaultConfig();
     }
-    
+
     private String displayName;
     private String uriFragment;
     private String indirectUrl;
     private String directUrl;
     private String licenseUrl;
     private int versionInt;
-    
+
 
     ServerDetails(String displayName, String uriFragment, int versionInt,
             String directUrl, String indirectUrl, String licenseUrl) {
@@ -314,8 +314,8 @@ public enum ServerDetails {
             this.versionInt = versionInt;
             this.licenseUrl = licenseUrl;
     }
-    
-    @Override 
+
+    @Override
     public String toString() {
         return displayName;
     }
diff --git a/enterprise/glassfish.common/src/org/netbeans/modules/glassfish/common/registration/AutomaticRegistration.java b/enterprise/glassfish.common/src/org/netbeans/modules/glassfish/common/registration/AutomaticRegistration.java
index 1db13c2..25792da 100644
--- a/enterprise/glassfish.common/src/org/netbeans/modules/glassfish/common/registration/AutomaticRegistration.java
+++ b/enterprise/glassfish.common/src/org/netbeans/modules/glassfish/common/registration/AutomaticRegistration.java
@@ -89,6 +89,9 @@ public class AutomaticRegistration {
         } else if (GlassFishVersion.ge(version, GlassFishVersion.GF_5)) {
             deployer = "deployer:gfv5ee8";
             config = "GlassFishEE8/Instances";
+        } else if (GlassFishVersion.ge(version, GlassFishVersion.GF_5_1_0)) {
+            deployer = "deployer:gfv510ee8";
+            config = "GlassFishJakartaEE8/Instances";
         }
         StringBuilder sb = new StringBuilder(
                 defaultDisplayNamePrefix.length() + 12);
diff --git a/enterprise/glassfish.common/src/org/netbeans/modules/glassfish/common/wizards/GlassfishWizardProvider.java b/enterprise/glassfish.common/src/org/netbeans/modules/glassfish/common/wizards/GlassfishWizardProvider.java
index 84febb4..4eb44ab 100644
--- a/enterprise/glassfish.common/src/org/netbeans/modules/glassfish/common/wizards/GlassfishWizardProvider.java
+++ b/enterprise/glassfish.common/src/org/netbeans/modules/glassfish/common/wizards/GlassfishWizardProvider.java
@@ -51,6 +51,13 @@ public class GlassfishWizardProvider implements ServerWizardProvider {
                 );
     }
     
+    public static GlassfishWizardProvider createJakartaEe8() {
+        return new GlassfishWizardProvider(
+                org.openide.util.NbBundle.getMessage(GlassfishWizardProvider.class,
+                "STR_V5_FAMILY_NAME", new Object[]{}) // NOI18N
+                );
+    }
+    
     private final String displayName;
 
     private GlassfishWizardProvider(
diff --git a/enterprise/glassfish.common/src/org/netbeans/modules/glassfish/spi/ServerUtilities.java b/enterprise/glassfish.common/src/org/netbeans/modules/glassfish/spi/ServerUtilities.java
index e0b6e49..970584f 100644
--- a/enterprise/glassfish.common/src/org/netbeans/modules/glassfish/spi/ServerUtilities.java
+++ b/enterprise/glassfish.common/src/org/netbeans/modules/glassfish/spi/ServerUtilities.java
@@ -58,8 +58,8 @@ public final class ServerUtilities {
     static public final String PROP_FIRST_RUN = "first_run";
     private GlassfishInstanceProvider gip;
     private GlassfishWizardProvider gwp;
-    
-    
+
+
     private ServerUtilities(GlassfishInstanceProvider gip, GlassfishWizardProvider gwp) {
         assert null != gip;
         this.gip = gip;
@@ -70,7 +70,7 @@ public final class ServerUtilities {
 //        GlassfishInstanceProvider gip = GlassfishInstanceProvider.getPrelude();
 //        return null == gip ? null : new ServerUtilities(gip,null);
 //    }
-    
+
     public static ServerUtilities getEe6Utilities() {
         GlassfishInstanceProvider gip = GlassfishInstanceProvider.getProvider();
         return null == gip ? null : new ServerUtilities(gip,
@@ -82,24 +82,30 @@ public final class ServerUtilities {
         return null == gip ? null : new ServerUtilities(gip,
                 GlassfishWizardProvider.createEe7());
     }
-    
+
     public static ServerUtilities getEe8Utilities() {
         GlassfishInstanceProvider gip = GlassfishInstanceProvider.getProvider();
         return null == gip ? null : new ServerUtilities(gip,
                 GlassfishWizardProvider.createEe8());
     }
 
+    public static ServerUtilities getJakartaEe8Utilities() {
+        GlassfishInstanceProvider gip = GlassfishInstanceProvider.getProvider();
+        return null == gip ? null : new ServerUtilities(gip,
+                GlassfishWizardProvider.createJakartaEe8());
+    }
+
 //    public static ServerUtilities getEe6WCUtilities() {
 //        GlassfishInstanceProvider gip = GlassfishInstanceProvider.getProvider();
 //        return null == gip ? null : new ServerUtilities(gip,
 //                GlassfishWizardProvider.createEe6WC());
 //    }
-    
+
     /**
      * Returns the ServerInstance object for the server with the specified URI.
-     * 
+     *
      * @param uri uri identifying the server instance.
-     * 
+     *
      * @return ServerInstance object for this server instance.
      */
     public ServerInstance getServerInstance(String uri) {
@@ -146,58 +152,58 @@ public final class ServerUtilities {
     /**
      * Returns the facade implementation for the specified server, if that server
      * supports the facade class passed in.
-     * 
+     *
      * @param uri uri identifying the server instance.
      * @param serverFacadeClass class definition of the server facade we're
      *   looking for.
-     * 
+     *
      * @return facade implementation for specified server or null if either the
      *   server does not exist or the server does not implement this facade.
      */
     public <T> T getInstanceByCapability(String uri, Class <T> serverFacadeClass) {
         return gip.getInstanceByCapability(uri, serverFacadeClass);
     }
-    
+
     /**
-     * Returns a list of the server instances that support the facade class 
+     * Returns a list of the server instances that support the facade class
      * specified (e.g. all servers that support <code>RubyInstance</code>).
-     * 
+     *
      * @param serverFacadeClass class definition of the server facade we're
      *   looking for.
-     * 
+     *
      * @return list of servers that support the interface specified or an empty
      *   list if no servers support that interface.
      */
     public<T> List<T> getInstancesByCapability(Class<T> serverFacadeClass) {
         return gip.getInstancesByCapability(serverFacadeClass);
     }
-    
+
     /**
      * Returns the ServerInstanceImplementation instance for the server with the
      * specified URI.  Use when you need to avoid calling through the ServerInstance
      * facade wrapper.  Otherwise, you should call <code>getServerInstance()</code> instead.
-     * 
+     *
      * @param uri uri identifying the server instance.
-     * 
+     *
      * @return ServerInstanceImplementation object for this server instance.
      */
 //    public static ServerInstanceImplementation getInternalServerInstance(String uri) {
 //        return GlassfishInstanceProvider.getDefault().getInternalInstance(uri);
 //    }
-    
+
     /**
-     * Returns the ServerInstanceProvider for this server plugin so we don't 
+     * Returns the ServerInstanceProvider for this server plugin so we don't
      * have to look it up via common server SPI.
-     * 
+     *
      * @return the GlassFish V3 impl for ServerInstanceProvider.
      */
     public ServerInstanceProvider getServerProvider() {
         return gip;
     }
-    
+
      /**
-     * Returns the fqn jar name with the correct version 
-     * 
+     * Returns the fqn jar name with the correct version
+     *
      * @return the File with full path of the jar or null
      */
     public static File getJarName(String glassfishInstallRoot, String jarNamePattern) {
@@ -223,14 +229,14 @@ public final class ServerUtilities {
         }
         return retVal;
     }
-    
+
     /**
      * Get the url for a file, including proper protocol for archive files (jars).
-     * 
+     *
      * @param file File to create URL from.
-     * 
+     *
      * @return url URL for file with proper protocol specifier.
-     * 
+     *
      * @throws java.net.MalformedURLException
      */
     public static URL fileToUrl(File file) throws MalformedURLException {
@@ -239,7 +245,7 @@ public final class ServerUtilities {
             url = FileUtil.getArchiveRoot(url);
         }
         return url;
-    }    
+    }
 
     /**
      * Surround the submitted string with quotes if it contains any embedded
@@ -262,18 +268,18 @@ public final class ServerUtilities {
 
     /**
      *  Determine if the named directory is a TP2 install.
-     * 
+     *
      * @param gfRoot the name of the directory to check against.
      * @return true if the directory appears to be the root of a TP2 installation.
-     */    
+     */
     static public boolean isTP2(String gfRoot) {
         return ServerUtilities.getJarName(gfRoot, ServerUtilities.GFV3_JAR_MATCHER).getName().indexOf("-tp-2-") > -1; // NOI18N
     }
-  
+
     /**
-     * create a list of jars that appear to be Java EE api jars that live in the 
+     * create a list of jars that appear to be Java EE api jars that live in the
      * modules directory.
-     * 
+     *
      * @param jarList the list "so far"
      * @param parent the directory to look into. Should not be null.
      * @param depth depth of the server
@@ -322,7 +328,7 @@ public final class ServerUtilities {
                         }
                     }
                 } catch (IOException ex) {
-                    Logger.getLogger(ServerUtilities.class.getName()).log(Level.INFO, 
+                    Logger.getLogger(ServerUtilities.class.getName()).log(Level.INFO,
                             candidate.getPath(), ex);
                 } finally {
                     if (null != jarFile) {
diff --git a/enterprise/glassfish.eecommon/src/org/netbeans/modules/glassfish/eecommon/api/config/GlassfishConfiguration.java b/enterprise/glassfish.eecommon/src/org/netbeans/modules/glassfish/eecommon/api/config/GlassfishConfiguration.java
index 62f197f..62bde71 100644
--- a/enterprise/glassfish.eecommon/src/org/netbeans/modules/glassfish/eecommon/api/config/GlassfishConfiguration.java
+++ b/enterprise/glassfish.eecommon/src/org/netbeans/modules/glassfish/eecommon/api/config/GlassfishConfiguration.java
@@ -191,7 +191,7 @@ public abstract class GlassfishConfiguration implements
      * <li><i>Configuration directory</i> is checked first, <i>resources directory</i>
      *        as fallback.</li>
      * </ul>
-     * 
+     *
      * @param module  Java EE module (project).
      * @param version Resources file names depend on GlassFish server version.
      * @return Existing GlassFish resources file together with boolean flag
@@ -391,7 +391,7 @@ public abstract class GlassfishConfiguration implements
 
         GlassfishConfiguration storedCfg = getConfiguration(primarySunDD);
         if (storedCfg != this) {
-            LOGGER.log(Level.INFO, 
+            LOGGER.log(Level.INFO,
                     "Stored DeploymentConfiguration ({0}) instance not the one being disposed of ({1}).",
                     new Object[]{storedCfg, this});
         }
@@ -502,7 +502,8 @@ public abstract class GlassfishConfiguration implements
         "gfv3",
         "gfv3ee6",
         "gfv3ee6wc",
-        "gfv5ee8"
+        "gfv5ee8",
+        "gfv510ee8"
     };
 
     protected ASDDVersion getTargetAppServerVersion() {
@@ -521,7 +522,7 @@ public abstract class GlassfishConfiguration implements
             if (Utils.notEmpty(instance)) {
                 try {
                     String asInstallPath = instance.substring(1, instance.indexOf("]deployer:"));
-                    if (asInstallPath.contains(File.pathSeparator)) 
+                    if (asInstallPath.contains(File.pathSeparator))
                         asInstallPath = asInstallPath.substring(0, asInstallPath.indexOf(File.pathSeparator));
                     File asInstallFolder = new File(asInstallPath);
                     if (asInstallFolder.exists()) {
@@ -546,11 +547,11 @@ public abstract class GlassfishConfiguration implements
     protected ASDDVersion getInstalledAppServerVersion(File asInstallFolder) {
         return getInstalledAppServerVersionFromDirectory(asInstallFolder);
     }
-    
+
     static ASDDVersion getInstalledAppServerVersionFromDirectory(File asInstallFolder) {
         File dtdFolder = new File(asInstallFolder, "lib/dtds/"); // NOI18N
         File schemaFolder = new File(asInstallFolder, "lib/schemas");
-        
+
         boolean geGF5 = false;
         if(schemaFolder.exists()){
             if(new File(schemaFolder, "javaee_8.xsd").exists() &&
@@ -831,7 +832,7 @@ public abstract class GlassfishConfiguration implements
         }
         return contextRoot;
     }
-    
+
     private static final RequestProcessor RP = new RequestProcessor("GlassFishConfiguration.setContextRoot");
 
     @Override
diff --git a/enterprise/glassfish.eecommon/src/org/netbeans/modules/glassfish/eecommon/api/config/J2EEVersion.java b/enterprise/glassfish.eecommon/src/org/netbeans/modules/glassfish/eecommon/api/config/J2EEVersion.java
index 43aa747..0bad537 100644
--- a/enterprise/glassfish.eecommon/src/org/netbeans/modules/glassfish/eecommon/api/config/J2EEVersion.java
+++ b/enterprise/glassfish.eecommon/src/org/netbeans/modules/glassfish/eecommon/api/config/J2EEVersion.java
@@ -30,7 +30,7 @@ package org.netbeans.modules.glassfish.eecommon.api.config;
  *
  * @author Peter Williams
  */
-public final class J2EEVersion extends J2EEBaseVersion {	
+public final class J2EEVersion extends J2EEBaseVersion {
 
     /** Represents J2EE version 1.3
      */
@@ -42,13 +42,13 @@ public final class J2EEVersion extends J2EEBaseVersion {
      */
     public static final J2EEVersion J2EE_1_4 = new J2EEVersion(
             "1.4", 1400,    // NOI18N
-            "1.4", 1400);   // NOI18N	
+            "1.4", 1400);   // NOI18N
 
     /** Represents JavaEE version 5.0
      */
     public static final J2EEVersion JAVAEE_5_0 = new J2EEVersion(
             "5.0", 5000,    // NOI18N
-            "5.0", 5000);   // NOI18N	
+            "5.0", 5000);   // NOI18N
 
     /** Represents JavaEE version 6.0
      */
@@ -61,18 +61,24 @@ public final class J2EEVersion extends J2EEBaseVersion {
     public static final J2EEVersion JAVAEE_7_0 = new J2EEVersion(
             "7.0", 7000,    // NOI18N
             "7.0", 7000);   // NOI18N
-    
+
     /** Represents JavaEE version 8.0
      */
     public static final J2EEVersion JAVAEE_8_0 = new J2EEVersion(
             "8.0", 8000,    // NOI18N
             "8.0", 8000);   // NOI18N
 
+    /** Represents Jakarta EE version 8.0.0
+     */
+    public static final J2EEVersion JAKARTAEE_8_0 = new J2EEVersion(
+            "8.0.0", 80000,    // NOI18N
+            "8.0.0", 80000);   // NOI18N
+
     /** -----------------------------------------------------------------------
      *  Implementation
      */
 
-    /** Creates a new instance of J2EEVersion 
+    /** Creates a new instance of J2EEVersion
      */
     private J2EEVersion(String version, int nv, String specVersion, int nsv) {
         super(version, nv, specVersion, nsv);
@@ -105,8 +111,10 @@ public final class J2EEVersion extends J2EEBaseVersion {
             result = JAVAEE_7_0;
         } else if(JAVAEE_8_0.toString().equals(version)) {
             result = JAVAEE_8_0;
+        } else if(JAKARTAEE_8_0.toString().equals(version)) {
+            result = JAKARTAEE_8_0;
         }
 
         return result;
-    }	
+    }
 }
diff --git a/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/AbstractHk2ConfigurationFactory.java b/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/AbstractHk2ConfigurationFactory.java
index cb8e192..c73b3ac 100644
--- a/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/AbstractHk2ConfigurationFactory.java
+++ b/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/AbstractHk2ConfigurationFactory.java
@@ -107,7 +107,10 @@ abstract class AbstractHk2ConfigurationFactory implements ModuleConfigurationFac
                 ? instance.getVersion() : null;
         try {
             Hk2DeploymentManager evaluatedDm = null;
-            if(version != null && GlassFishVersion.ge(version, GlassFishVersion.GF_5)){
+            if(version != null && GlassFishVersion.ge(version, GlassFishVersion.GF_5_1_0)){
+                        evaluatedDm = (Hk2DeploymentManager) Hk2DeploymentFactory.createJakartaEe8()
+                            .getDisconnectedDeploymentManager(instanceUrl);
+                    } else if(version != null && GlassFishVersion.ge(version, GlassFishVersion.GF_5)){
                         evaluatedDm = (Hk2DeploymentManager) Hk2DeploymentFactory.createEe8()
                             .getDisconnectedDeploymentManager(instanceUrl);
                     } else if(version != null && GlassFishVersion.ge(version, GlassFishVersion.GF_3_1)){
@@ -121,6 +124,10 @@ abstract class AbstractHk2ConfigurationFactory implements ModuleConfigurationFac
                     ? hk2dm
                     : evaluatedDm;
             if (version != null
+                    && GlassFishVersion.ge(version, GlassFishVersion.GF_5_1_0)) {
+                retVal = new ModuleConfigurationImpl(
+                        module, new Hk2Configuration(module, version), dm);
+            } else if (version != null
                     && GlassFishVersion.ge(version, GlassFishVersion.GF_5)) {
                 retVal = new ModuleConfigurationImpl(
                         module, new Hk2Configuration(module, version), dm);
diff --git a/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/Bundle.properties b/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/Bundle.properties
index 3939e45..5671e9d 100644
--- a/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/Bundle.properties
+++ b/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/Bundle.properties
@@ -32,7 +32,7 @@ MSG_START_SERVER_IN_PROGRESS=Starting {0}
 MSG_SERVER_STARTED={0} Server started
 MSG_START_SERVER_FAILED={0} Start Failed
 
-MSG_STOP_SERVER_FAILED_FNF={0} Server can not stop. 
+MSG_STOP_SERVER_FAILED_FNF={0} Server can not stop.
 MSG_STOP_SERVER_FAILED_PD={0} Server stop failed. Can't create stop process.
 MSG_STOP_SERVER_IN_PROGRESS=Server {0} is stopping
 MSG_SERVER_STOPPED={0} Server stopped
@@ -45,12 +45,14 @@ LBL_V2ServerLibraries=Unsupported GlassFish Server 2 Libraries
 LBL_V3ServerLibraries=GlassFish Server 3 Libraries
 LBL_V4ServerLibraries=GlassFish Server 4 Libraries
 LBL_V5ServerLibraries=GlassFish Server 5 Libraries
+LBL_V51ServerLibraries=GlassFish Server 5.1 Libraries
 
 MSG_V1ServerPlatform=Unsupported GlassFish Server 1 Platform
 MSG_V2ServerPlatform=Unsupported GlassFish Server 2 Platform
 MSG_V3ServerPlatform=GlassFish Server 3 Platform
 MSG_V4ServerPlatform=GlassFish Server 4 Platform
 MSG_V5ServerPlatform=GlassFish Server 5 Platform
+MSG_V51ServerPlatform=GlassFish Server 5.1 Platform
 
 LBL_V3RunTimeDDCatalog=GlassFish Server 3 Catalog
 DESC_V3RunTimeDDCatalog=List of all the runtime descriptors DTDs for GlassFish Server 3
diff --git a/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/Hk2DeploymentFactory.java b/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/Hk2DeploymentFactory.java
index 03146df..7a7965d 100644
--- a/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/Hk2DeploymentFactory.java
+++ b/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/Hk2DeploymentFactory.java
@@ -38,6 +38,7 @@ public class Hk2DeploymentFactory implements DeploymentFactory {
     private static Hk2DeploymentFactory ee6Instance;
     private static Hk2DeploymentFactory ee7Instance;
     private static Hk2DeploymentFactory ee8Instance;
+    private static Hk2DeploymentFactory jakartaee8Instance;
     private String[] uriFragments;
     private String version;
     private String displayName;
@@ -70,7 +71,7 @@ public class Hk2DeploymentFactory implements DeploymentFactory {
     }
 
     /**
-     * 
+     *
      * @return
      */
     public static synchronized DeploymentFactory createEe7() {
@@ -84,7 +85,7 @@ public class Hk2DeploymentFactory implements DeploymentFactory {
         }
         return ee7Instance;
     }
-    
+
     /**
      *
      * @return
@@ -102,9 +103,25 @@ public class Hk2DeploymentFactory implements DeploymentFactory {
     }
 
     /**
-     * 
-     * @param uri 
-     * @return 
+     *
+     * @return
+     */
+    public static synchronized DeploymentFactory createJakartaEe8() {
+        // FIXME -- these strings should come from some constant place
+        if (jakartaee8Instance == null) {
+            ServerUtilities tmp = ServerUtilities.getJakartaEe8Utilities();
+            jakartaee8Instance = new Hk2DeploymentFactory(new String[]{"deployer:gfv510ee8:", "deployer:gfv510"}, "0.3", // NOI18N
+                    NbBundle.getMessage(Hk2DeploymentFactory.class, "TXT_FactoryDisplayName"));  // NOI18N
+            DeploymentFactoryManager.getInstance().registerDeploymentFactory(jakartaee8Instance);
+            jakartaee8Instance.setServerUtilities(tmp);
+        }
+        return jakartaee8Instance;
+    }
+
+    /**
+     *
+     * @param uri
+     * @return
      */
     // also check the urlPattern in layer.xml when changing this
     @Override
@@ -112,7 +129,7 @@ public class Hk2DeploymentFactory implements DeploymentFactory {
         if (uri == null) {
             return false;
         }
-        
+
         if(uri.startsWith("[")) {//NOI18N
             for (String uriFragment : uriFragments) {
                 if (uri.indexOf(uriFragment)!=-1) {
@@ -125,12 +142,12 @@ public class Hk2DeploymentFactory implements DeploymentFactory {
     }
 
     /**
-     * 
-     * @param uri 
-     * @param uname 
-     * @param passwd 
-     * @return 
-     * @throws javax.enterprise.deploy.spi.exceptions.DeploymentManagerCreationException 
+     *
+     * @param uri
+     * @param uname
+     * @param passwd
+     * @return
+     * @throws javax.enterprise.deploy.spi.exceptions.DeploymentManagerCreationException
      */
     @Override
     public DeploymentManager getDeploymentManager(String uri, String uname, String passwd) throws DeploymentManagerCreationException {
@@ -145,10 +162,10 @@ public class Hk2DeploymentFactory implements DeploymentFactory {
     }
 
     /**
-     * 
-     * @param uri 
-     * @return 
-     * @throws javax.enterprise.deploy.spi.exceptions.DeploymentManagerCreationException 
+     *
+     * @param uri
+     * @return
+     * @throws javax.enterprise.deploy.spi.exceptions.DeploymentManagerCreationException
      */
     @Override
     public DeploymentManager getDisconnectedDeploymentManager(String uri) throws DeploymentManagerCreationException {
@@ -163,8 +180,8 @@ public class Hk2DeploymentFactory implements DeploymentFactory {
     }
 
     /**
-     * 
-     * @return 
+     *
+     * @return
      */
     @Override
     public String getProductVersion() {
@@ -172,8 +189,8 @@ public class Hk2DeploymentFactory implements DeploymentFactory {
     }
 
     /**
-     * 
-     * @return 
+     *
+     * @return
      */
     @Override
     public String getDisplayName() {
diff --git a/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/Hk2JavaEEPlatformFactory.java b/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/Hk2JavaEEPlatformFactory.java
index c702fbb..7cdbef8 100644
--- a/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/Hk2JavaEEPlatformFactory.java
+++ b/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/Hk2JavaEEPlatformFactory.java
@@ -64,6 +64,7 @@ public class Hk2JavaEEPlatformFactory extends J2eePlatformFactory {
      *  <p/>We will keep V3 value now because no one knows what will get broken
      *  when changing it. */
     private static final String V5_LOOKUP_KEY = "J2EE/DeploymentPlugins/gfv5ee8/Lookup";
+    private static final String V510_LOOKUP_KEY = "J2EE/DeploymentPlugins/gfv510ee8/Lookup";
 
     /** GlassFish JavaEE platform factory singleton object. */
     private static volatile Hk2JavaEEPlatformFactory instance;
@@ -99,7 +100,10 @@ public class Hk2JavaEEPlatformFactory extends J2eePlatformFactory {
      */
     private static String getDisplayName(final GlassFishVersion version) {
         final int ord = version.ordinal();
-        if(ord >= GlassFishVersion.GF_5.ordinal()) {
+        if(ord >= GlassFishVersion.GF_5_1_0.ordinal()) {
+            return NbBundle.getMessage(
+                    Hk2JavaEEPlatformFactory.class, "MSG_V51ServerPlatform");
+        } else if(ord >= GlassFishVersion.GF_5.ordinal()) {
             return NbBundle.getMessage(
                     Hk2JavaEEPlatformFactory.class, "MSG_V5ServerPlatform");
         } else if (ord >= GlassFishVersion.GF_4.ordinal()) {
@@ -127,7 +131,10 @@ public class Hk2JavaEEPlatformFactory extends J2eePlatformFactory {
      */
     private static String getLibraryName(final GlassFishVersion version) {
         final int ord = version.ordinal();
-        if (ord >= GlassFishVersion.GF_5.ordinal()) {
+        if (ord >= GlassFishVersion.GF_5_1_0.ordinal()) {
+            return NbBundle.getMessage(
+                    Hk2JavaEEPlatformFactory.class, "LBL_V51ServerLibraries");
+        } else if (ord >= GlassFishVersion.GF_5.ordinal()) {
             return NbBundle.getMessage(
                     Hk2JavaEEPlatformFactory.class, "LBL_V5ServerLibraries");
         } else if (ord >= GlassFishVersion.GF_4.ordinal()) {
@@ -155,7 +162,9 @@ public class Hk2JavaEEPlatformFactory extends J2eePlatformFactory {
      */
     private static String getLookupKey(final GlassFishVersion version) {
         final int ord = version.ordinal();
-        if (ord >= GlassFishVersion.GF_5.ordinal()) {
+        if (ord >= GlassFishVersion.GF_5_1_0.ordinal()){
+            return V510_LOOKUP_KEY;
+        } else if (ord >= GlassFishVersion.GF_5.ordinal()) {
             return V5_LOOKUP_KEY;
         } else if (ord >= GlassFishVersion.GF_4.ordinal()) {
             return V4_LOOKUP_KEY;
diff --git a/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/Hk2JavaEEPlatformImpl.java b/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/Hk2JavaEEPlatformImpl.java
index 1666625..ea3aef8 100644
--- a/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/Hk2JavaEEPlatformImpl.java
+++ b/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/Hk2JavaEEPlatformImpl.java
@@ -67,13 +67,13 @@ import org.openide.util.lookup.Lookups;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.DefaultHandler;
-    
+
 /**
  *
  * @author Ludo, Tomas Kraus
  */
 public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
-    
+
     /** Deployment manager. */
     private final Hk2DeploymentManager dm;
 
@@ -152,8 +152,8 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
         }
         return platforms;
     }
-            
-    
+
+
     /**
      * Map GlassFish tooling SDK JavaEE profiles to NetBeans JavaEE profiles.
      * <p/>
@@ -194,6 +194,10 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
                                break;
                 case v1_8:     profiles[index++] = Profile.JAVA_EE_8_FULL;
                                break;
+                case v8_0_0_web: profiles[index++] = Profile.JAKARTA_EE_8_WEB;
+                               break;
+                case v8_0_0:     profiles[index++] = Profile.JAKARTA_EE_8_FULL;
+                               break;
             }
         } else {
             profiles = new Profile[0];
@@ -283,7 +287,7 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
     ////////////////////////////////////////////////////////////////////////////
     // Constructors                                                           //
     ////////////////////////////////////////////////////////////////////////////
-    
+
     /**
      * Creates an instance of GlassFish JavaEE platform.
      * <p/>
@@ -363,7 +367,7 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
     // Persistence provider strings
     private static final String PERSISTENCE_PROV_ECLIPSELINK = "org.eclipse.persistence.jpa.PersistenceProvider"; //NOI18N
 
-    // WEB SERVICES PROPERTIES 
+    // WEB SERVICES PROPERTIES
     // TODO - shall be removed and usages replaced by values from j2eeserver or websvc apis after api redesign
     private static final String TOOL_WSCOMPILE = "wscompile";
     private static final String TOOL_JSR109 = "jsr109";
@@ -391,9 +395,9 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
     private static final String GFv5_ACC_XML = "glassfish-acc.xml";
 
     /**
-     * 
-     * @param toolName 
-     * @return 
+     *
+     * @param toolName
+     * @return
      */
     @Override
     public boolean isToolSupported(String toolName) {
@@ -408,7 +412,7 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
                 "org.apache.openjpa.persistence.PersistenceProviderImpl".equals(toolName)) { //NOI18N
             return true;
         }
-        
+
         if("defaultPersistenceProviderJavaEE5".equals(toolName)) {  //NOI18N
             return true;
         }
@@ -422,7 +426,7 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
         }
 
         File wsLib = null;
-        
+
         if (gfRootStr != null) {
             wsLib = ServerUtilities.getJarName(gfRootStr, "webservices(|-osgi).jar");
         }
@@ -463,14 +467,14 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
                 return true;
             }
         }
-        
-        return false;     
+
+        return false;
     }
-    
+
     /**
-     * 
-     * @param toolName 
-     * @return 
+     *
+     * @param toolName
+     * @return
      */
     @Override
     public File[] getToolClasspathEntries(String toolName) {
@@ -532,7 +536,7 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
         } else {
             Logger.getLogger("glassfish-javaee").log(Level.INFO, "dm has no root???", new Exception());
         }
-        
+
         return new File[0];
     }
 
@@ -545,7 +549,7 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
     public Set<Profile> getSupportedProfiles() {
         return profilesSetFromArray(profiles);
     }
-    
+
     /**
      * Get supported JavaEE profiles.
      * <p/>
@@ -566,10 +570,10 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
         return moduleTypesSetFromArray(types);
     }
 
-    
+
     /**
-     * 
-     * @return 
+     *
+     * @return
      */
     @Override
     public java.io.File[] getPlatformRoots() {
@@ -594,26 +598,26 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
     public File getMiddlewareHome() {
         return getExistingFolder(dm.getProperties().getInstallRoot());
     }
-    
+
     /**
-     * 
-     * @return 
+     *
+     * @return
      */
     @Override
     public LibraryImplementation[] getLibraries() {
         addFcl();
         return libraries.clone();
     }
-    
+
     /**
-     * 
-     * @return 
+     *
+     * @return
      */
     @Override
     public java.awt.Image getIcon() {
         return ImageUtilities.loadImage("org/netbeans/modules/j2ee/hk2/resources/server.gif"); // NOI18N
     }
-    
+
     /**
      * Get GlassFish JavaEE platform display name.
      * <p/>
@@ -623,7 +627,7 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
     public String getDisplayName() {
         return displayName;
     }
-    
+
     /**
      * Get supported JavaSE platforms.
      * <p/>
@@ -633,7 +637,7 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
     public Set getSupportedJavaPlatformVersions() {
         return platformsSetFromArray(platforms);
     }
-    
+
     /**
      * Get default GlassFish JavaSE platform.
      * <p/>
@@ -645,9 +649,9 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
     public JavaPlatform getJavaPlatform() {
         return null;
     }
-    
+
     /**
-     * 
+     *
      */
     public void notifyLibrariesChanged() {
         initLibraries();
@@ -655,7 +659,7 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
 
     private static final RequestProcessor libInitThread =
             new RequestProcessor("init libs -- Hk2JavaEEPlatformImpl");
-    
+
      private void initLibraries() {
         libInitThread.post(new Runnable() {
 
@@ -737,7 +741,7 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
         sb.append(accConfigFile);
         return sb.toString();
     }
-    
+
     @Override
     public String getToolProperty(String toolName, String propertyName) {
         if (J2eePlatform.TOOL_APP_CLIENT_RUNTIME.equals(toolName)) {
@@ -804,7 +808,7 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
     }
 
     private class JaxRsStackSupportImpl implements JaxRsStackSupportImplementation {
-        
+
         // Bug# 233840 - Fixing to avoid AssertionError and provide library
         // for GF4. But JAR names remain hardcoded. This shall be rewritten
         // to use Hk2LibraryProvider!
@@ -832,7 +836,7 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
             try {
                 if (version == null) {
                     return false;
-                }                
+                }
                 else if (version.equalsMajorMinor(GlassFishVersion.GF_3)) {
                     final File jsr311 = ServerUtilities.getJarName(dm.getProperties()
                             .getGlassfishRoot(), "jsr311-api.jar"); // NOI18N
@@ -895,24 +899,24 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
                 return addJars( project , urls );
             }*/
         }
-        
+
         @Override
         public void removeJaxRsLibraries(final Project project) {
             final Library library = libraryProvider.getJerseyLibrary();
             final FileObject sourceRoot = getSourceRoot(project);
             if ( sourceRoot != null){
-                final String[] classPathTypes = new String[]{ ClassPath.COMPILE , 
+                final String[] classPathTypes = new String[]{ ClassPath.COMPILE ,
                         JavaClassPathConstants.COMPILE_ONLY };
                 for (String type : classPathTypes) {
                     try {
                         ProjectClassPathModifier.removeLibraries( new Library[]{
                                 library} ,sourceRoot, type);
-                    }    
+                    }
                     catch (UnsupportedOperationException | IOException ex) {
                         Logger.getLogger(JaxRsStackSupportImpl.class.getName()).
                                 log (Level.INFO, null , ex );
                     }
-                }     
+                }
             }
             /*List<URL> urls = getJerseyLibraryURLs();
             if ( urls.sdkSize() >0 ){
@@ -925,9 +929,9 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
                 String[] classPathTypes = new String[]{ ClassPath.COMPILE , ClassPath.EXECUTE };
                 for (String type : classPathTypes) {
                     try {
-                        ProjectClassPathModifier.removeRoots(urls.toArray( 
+                        ProjectClassPathModifier.removeRoots(urls.toArray(
                             new URL[ urls.sdkSize()]), sourceRoot, type);
-                    }    
+                    }
                     catch(UnsupportedOperationException ex) {
                         Logger.getLogger( JaxRsStackSupportImpl.class.getName() ).
                                 log (Level.INFO, null , ex );
@@ -936,14 +940,14 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
                         Logger.getLogger( JaxRsStackSupportImpl.class.getName() ).
                                 log(Level.INFO, null , e );
                     }
-                }     
+                }
             }*/
         }
-        
+
         @Override
         public void configureCustomJersey( Project project ){
         }
-        
+
         /* (non-Javadoc)
          * @see org.netbeans.modules.javaee.specs.support.spi.JaxRsStackSupportImplementation#isBundled(java.lang.String)
          */
@@ -971,13 +975,13 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
             }
             return sourceGroups[0].getRootFolder();
         }
-        
+
         private boolean hasJee6Profile(){
             final Set<Profile> profiles = getSupportedProfiles();
-            return profiles.contains(Profile.JAVA_EE_6_FULL) || 
+            return profiles.contains(Profile.JAVA_EE_6_FULL) ||
                 profiles.contains(Profile.JAVA_EE_6_WEB) ;
         }
-        
+
         private void addURL(final Collection<URL> urls, final File file ){
             if ( file == null || !file.exists()) {
                 return;
@@ -988,7 +992,7 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
                 // ignore the file
             }
         }
-        
+
         private boolean addJars(final Project project, Collection<URL> jars ){
             final List<URL> urls = new ArrayList<>();
             for (URL url : jars) {
@@ -1010,15 +1014,15 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
                 else {
                     classPathType = ClassPath.COMPILE;
                 }
-                ProjectClassPathModifier.addRoots(urls.toArray( new URL[ urls.size()]), 
+                ProjectClassPathModifier.addRoots(urls.toArray( new URL[ urls.size()]),
                         sourceRoot, classPathType );
-            } 
+            }
             catch (UnsupportedOperationException | IOException ex) {
                 return false;
             }
             return true;
         }
-        
+
         /**
          * Get GlassFish version from instance stored in deployment manager.
          * <p/>
@@ -1039,12 +1043,12 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
     }
 
     private static class RegistrationHandler extends DefaultHandler {
-        
+
         private static final String VERSION_TAG = "product_version";    // NOI18N
 
         @Override
         public void startElement(final String uri, final String localName, final String qName,
-            Attributes attributes) throws SAXException 
+            Attributes attributes) throws SAXException
         {
             super.startElement(uri, localName, qName, attributes);
             if (VERSION_TAG.equals( localName )|| VERSION_TAG.equals( qName )){
@@ -1053,8 +1057,8 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
         }
 
         @Override
-        public void endElement(final String uri, final String localName, final String qName) 
-                throws SAXException 
+        public void endElement(final String uri, final String localName, final String qName)
+                throws SAXException
         {
             super.endElement(uri, localName, qName);
             if (VERSION_TAG.equals( localName )|| VERSION_TAG.equals( qName )){
@@ -1069,11 +1073,11 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
                 version.append(ch, start, length);
             }
         }
-        
+
         String getVersion() {
             return version.toString();
         }
-        
+
         private boolean versionTag;
         private final StringBuilder version = new StringBuilder();
     }
diff --git a/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/Hk2JaxWsStack.java b/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/Hk2JaxWsStack.java
index 0b8662c..756f6b8 100644
--- a/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/Hk2JaxWsStack.java
+++ b/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/Hk2JaxWsStack.java
@@ -52,34 +52,36 @@ public class Hk2JaxWsStack implements WSStackImplementation<JaxWs> {
                           "javax.ejb.jar", //NOI18N
                           "javax.activation.jar"}; //NOI18N
     private static final String GFV3_MODULES_DIR_NAME = "modules"; // NOI18N
-    
+
     private String gfRootStr;
     private JaxWs jaxWs;
     private Hk2JavaEEPlatformImpl platform;
-    
+
     public Hk2JaxWsStack(String gfRootStr, Hk2JavaEEPlatformImpl platform ) {
         this.gfRootStr = gfRootStr;
         jaxWs = new JaxWs(getUriDescriptor());
         this.platform = platform;
     }
 
-    
+
     @Override
     public JaxWs get() {
         return jaxWs;
     }
-    
+
     @Override
     public WSStackVersion getVersion() {
         Set<Profile> supportedProfiles = platform.getSupportedProfiles();
-        if (supportedProfiles.contains(Profile.JAVA_EE_8_FULL) ||
+        if (supportedProfiles.contains(Profile.JAKARTA_EE_8_FULL) ||
+                supportedProfiles.contains(Profile.JAKARTA_EE_8_WEB) ||
+                supportedProfiles.contains(Profile.JAVA_EE_8_FULL) ||
                 supportedProfiles.contains(Profile.JAVA_EE_8_WEB) ||
                 supportedProfiles.contains(Profile.JAVA_EE_7_FULL) ||
                 supportedProfiles.contains(Profile.JAVA_EE_7_WEB)  ||
                 supportedProfiles.contains(Profile.JAVA_EE_6_FULL) ||
                 supportedProfiles.contains(Profile.JAVA_EE_6_WEB))
         {
-            // gfv3ee6 GF id 
+            // gfv3ee6 GF id
             if (isMetroInstalled()) {
                 return WSStackVersion.valueOf(2, 2, 0, 0);
             }
@@ -104,7 +106,7 @@ public class Hk2JaxWsStack implements WSStackImplementation<JaxWs> {
             return null;
         }
     }
-    
+
     @Override
     public boolean isFeatureSupported(Feature feature) {
         if (feature == JaxWs.Feature.WSIT && isMetroInstalled()) {
@@ -114,15 +116,15 @@ public class Hk2JaxWsStack implements WSStackImplementation<JaxWs> {
             return true;
         }
         if (feature == JaxWs.Feature.TESTER_PAGE) return true;
-        return false;   
+        return false;
     }
-    
+
     private JaxWs.UriDescriptor getUriDescriptor() {
         return new JaxWs.UriDescriptor() {
 
             @Override
-            public String getServiceUri(String applicationRoot, String serviceName, 
-                    String portName, boolean isEjb) 
+            public String getServiceUri(String applicationRoot, String serviceName,
+                    String portName, boolean isEjb)
             {
                 if (isEjb) {
                     return serviceName+"/"+portName; //NOI18N
@@ -140,25 +142,25 @@ public class Hk2JaxWsStack implements WSStackImplementation<JaxWs> {
             }
 
             @Override
-            public String getDescriptorUri(String applicationRoot, 
-                    String serviceName, String portName, boolean isEjb) 
+            public String getDescriptorUri(String applicationRoot,
+                    String serviceName, String portName, boolean isEjb)
             {
-                return getServiceUri(applicationRoot, serviceName, portName, 
+                return getServiceUri(applicationRoot, serviceName, portName,
                         isEjb)+"?wsdl"; //NOI18N
             }
 
             @Override
-            public String getTesterPageUri(String host, String port, 
-                    String applicationRoot, String serviceName, String portName, 
-                        boolean isEjb) 
+            public String getTesterPageUri(String host, String port,
+                    String applicationRoot, String serviceName, String portName,
+                        boolean isEjb)
             {
-                return "http://"+host+":"+port+"/"+getServiceUri(applicationRoot, 
+                return "http://"+host+":"+port+"/"+getServiceUri(applicationRoot,
                         serviceName, portName, isEjb)+"?Tester"; //NOI18N
             }
-            
+
         };
     }
-    
+
     protected class JaxWsTool implements WSToolImplementation {
         JaxWs.Tool tool;
         JaxWsTool(JaxWs.Tool tool) {
@@ -187,9 +189,9 @@ public class Hk2JaxWsStack implements WSStackImplementation<JaxWs> {
             }
             return cPath.toArray(new URL[cPath.size()]);
         }
-      
+
     }
-    
+
     protected boolean isMetroInstalled() {
         File f = getWsJarName(gfRootStr, METRO_LIBRARIES[0]);
         return f!=null && f.exists();
@@ -210,10 +212,10 @@ public class Hk2JaxWsStack implements WSStackImplementation<JaxWs> {
 
     }
 
-    public static File getWsJarName(String glassfishInstallRoot, 
-            String jarNamePattern) 
+    public static File getWsJarName(String glassfishInstallRoot,
+            String jarNamePattern)
     {
-        File modulesDir = new File(glassfishInstallRoot + File.separatorChar + 
+        File modulesDir = new File(glassfishInstallRoot + File.separatorChar +
                 GFV3_MODULES_DIR_NAME);
         int subindex = jarNamePattern.lastIndexOf("/");
         if(subindex != -1) {
diff --git a/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/Hk2OptionalFactory.java b/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/Hk2OptionalFactory.java
index 3baebc4..45befb2 100644
--- a/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/Hk2OptionalFactory.java
+++ b/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/Hk2OptionalFactory.java
@@ -45,7 +45,7 @@ import org.openide.util.Lookup;
  * @author vince kraemer
  */
 public class Hk2OptionalFactory extends OptionalDeploymentManagerFactory {
-    
+
     private final DeploymentFactory df;
     private final ServerUtilities commonUtilities;
     private final boolean hasWizard;
@@ -61,24 +61,30 @@ public class Hk2OptionalFactory extends OptionalDeploymentManagerFactory {
 //        return null == t ? null : new Hk2OptionalFactory(Hk2DeploymentFactory.createPrelude(),
 //                t, false);
 //    }
-    
+
     public static Hk2OptionalFactory createEe6() {
         ServerUtilities t = ServerUtilities.getEe6Utilities();
         return null == t ? null : new Hk2OptionalFactory(Hk2DeploymentFactory.createEe6(),
                 t, true);
     }
-    
+
     public static Hk2OptionalFactory createEe8() {
         ServerUtilities t = ServerUtilities.getEe8Utilities();
         return null == t ? null : new Hk2OptionalFactory(Hk2DeploymentFactory.createEe8(),
                 t, true);
     }
-    
+
+    public static Hk2OptionalFactory createJakartaEe8() {
+        ServerUtilities t = ServerUtilities.getJakartaEe8Utilities();
+        return null == t ? null : new Hk2OptionalFactory(Hk2DeploymentFactory.createJakartaEe8(),
+                t, true);
+    }
+
     @Override
     public StartServer getStartServer(DeploymentManager dm) {
         return new Hk2StartServer(dm);
     }
-    
+
     @Override
     public IncrementalDeployment getIncrementalDeployment(DeploymentManager dm) {
         IncrementalDeployment result = null;
@@ -90,7 +96,7 @@ public class Hk2OptionalFactory extends OptionalDeploymentManagerFactory {
         }
         return result;
     }
-    
+
     @Override
     public FindJSPServlet getFindJSPServlet(DeploymentManager dm) {
         // if assertions are on... blame the caller
@@ -112,18 +118,18 @@ public class Hk2OptionalFactory extends OptionalDeploymentManagerFactory {
     public boolean isCommonUIRequired() {
         return false;
     }
-    
+
     @Override
     public InstantiatingIterator getAddInstanceIterator() {
         return hasWizard ? new J2eeInstantiatingIterator(commonUtilities) : null;
     }
-    
+
     @Override
     public DatasourceManager getDatasourceManager(DeploymentManager dm) {
         return dm instanceof Hk2DeploymentManager ?
                 new Hk2DatasourceManager((Hk2DeploymentManager) dm) : null;
     }
-    
+
     @Override
     public JDBCDriverDeployer getJDBCDriverDeployer(DeploymentManager dm) {
         // if assertions are on... blame the caller
@@ -137,7 +143,7 @@ public class Hk2OptionalFactory extends OptionalDeploymentManagerFactory {
         }
         return retVal;
     }
-    
+
     @Override
      public MessageDestinationDeployment getMessageDestinationDeployment(DeploymentManager dm) {
         return dm instanceof Hk2DeploymentManager ?
@@ -170,7 +176,7 @@ public class Hk2OptionalFactory extends OptionalDeploymentManagerFactory {
     }
 
     private static class J2eeInstantiatingIterator implements InstantiatingIterator {
-        
+
         private final InstantiatingIterator delegate;
         private ServerUtilities su;
 
@@ -254,6 +260,6 @@ public class Hk2OptionalFactory extends OptionalDeploymentManagerFactory {
         public void initialize(WizardDescriptor wizard) {
             delegate.initialize(wizard);
         }
-        
+
     }
 }
diff --git a/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/layer.xml b/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/layer.xml
index ff2f14f7..9156b0e 100644
--- a/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/layer.xml
+++ b/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/layer.xml
@@ -74,7 +74,7 @@
                 <!-- -->
                 <folder name="DeploymentFileNames">
                     <folder name="WAR">
-                        <file name="WEB-INF\sun-web.xml"/> 
+                        <file name="WEB-INF\sun-web.xml"/>
                         <file name="WEB-INF\glassfish-web.xml"/>
                         <file name="WEB-INF\glassfish-resources.xml"/>
                     </folder>
@@ -163,6 +163,67 @@
                     </folder>
                 </folder>
             </folder>
+            <folder name="gfv510ee8">
+                <file name="Descriptor" url="nbdepjakartaee8.xml"/>
+                <!-- -->
+                <file name="Factory.instance">
+                    <attr name="urlPattern" stringvalue="^\[.*deployer:gfv510ee8[w]?[c]?:.*$"/>
+                    <attr name="instanceCreate" methodvalue="org.netbeans.modules.j2ee.deployment.plugins.spi.support.ProxyDeploymentFactory.create"/>
+                    <attr name="delegate" methodvalue="org.netbeans.modules.glassfish.javaee.Hk2DeploymentFactory.createEe8"/>
+                    <attr name="instanceClass" stringvalue="org.netbeans.modules.j2ee.deployment.plugins.spi.support.ProxyDeploymentFactory"/>
+                    <attr name="instanceOf" stringvalue="javax.enterprise.deploy.spi.factories.DeploymentFactory"/>
+                </file>
+                <file name="J2eePlatformFactory.instance">
+                    <attr name="instanceCreate" methodvalue="org.netbeans.modules.glassfish.javaee.Hk2JavaEEPlatformFactory.getFactory"/>
+                    <attr name="instanceClass" stringvalue="org.netbeans.modules.glassfish.javaee.Hk2JavaEEPlatformFactory"/>
+                    <attr name="instanceOf" stringvalue="org.netbeans.modules.j2ee.deployment.plugins.spi.J2eePlatformFactory"/>
+                </file>
+                <file name="OptionalFactory.instance">
+                    <attr name="instanceCreate" methodvalue="org.netbeans.modules.j2ee.deployment.plugins.spi.support.ProxyOptionalFactory.create"/>
+                    <attr name="delegate" methodvalue="org.netbeans.modules.glassfish.javaee.Hk2OptionalFactory.createEe8"/>
+                    <attr name="instanceOf" stringvalue="org.netbeans.modules.j2ee.deployment.plugins.spi.OptionalDeploymentManagerFactory"/>
+                </file>
+                <file name="ModuleConfigFactory.instance">
+                    <attr name="instanceCreate" newvalue="org.netbeans.modules.glassfish.javaee.Hk2ModuleConfigFactory"/>
+                    <attr name="instanceClass" stringvalue="org.netbeans.modules.glassfish.javaee.Hk2ModuleConfigFactory"/>
+                    <attr name="instanceOf" stringvalue="org.netbeans.modules.j2ee.deployment.plugins.spi.config.ModuleConfigurationFactory"/>
+                </file>
+                <file name="J2eeVerifierSupport.instance">
+                    <attr name="instanceCreate" newvalue="org.netbeans.modules.glassfish.javaee.verifier.VerifierImpl"/>
+                    <attr name="instanceClass" stringvalue="org.netbeans.modules.glassfish.javaee.verifier.VerifierImpl"/>
+                    <attr name="instanceOf" stringvalue="org.netbeans.modules.j2ee.deployment.plugins.spi.VerifierSupport"/>
+                </file>
+                <!-- -->
+                <folder name="DeploymentFileNames">
+                    <folder name="WAR">
+                        <file name="WEB-INF\sun-web.xml"/>
+                        <file name="WEB-INF\glassfish-web.xml"/>
+                        <file name="WEB-INF\glassfish-resources.xml"/>
+        </folder>
+                    <folder name="EJB">
+                        <file name="META-INF\sun-ejb-jar.xml"/>
+                        <file name="META-INF\sun-cmp-mappings.xml"/>
+                        <file name="META-INF\glassfish-ejb-jar.xml"/>
+                        <file name="META-INF\glassfish-cmp-mappings.xml"/>
+                        <file name="META-INF\glassfish-resources.xml"/>
+    </folder>
+                    <folder name="EAR">
+                        <file name="META-INF\sun-application.xml"/>
+                        <file name="META-INF\glassfish-application.xml"/>
+                        <file name="META-INF\glassfish-resources.xml"/>
+                    </folder>
+                    <folder name="RAR">
+                        <file name="META-INF\sun-ra.xml"/>
+                        <file name="META-INF\glassfish-ra.xml"/>
+                        <file name="META-INF\glassfish-resources.xml"/>
+                    </folder>
+                    <folder name="CAR">
+                        <file name="META-INF\sun-application-client.xml"/>
+                        <file name="META-INF\glassfish-application-client.xml"/>
+                        <file name="META-INF\glassfish-resources.xml"/>
+                    </folder>
+                </folder>
+            </folder>
         </folder>
     </folder>
 
diff --git a/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/nbdepjakartaee8.xml b/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/nbdepjakartaee8.xml
new file mode 100644
index 0000000..8187a09
--- /dev/null
+++ b/enterprise/glassfish.javaee/src/org/netbeans/modules/glassfish/javaee/nbdepjakartaee8.xml
@@ -0,0 +1,54 @@
+<netbeans-deployment>
+<!--
+
+    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.
+
+-->
+    <!--
+    The icon element contains a path to the icon to be used to present the server
+    in the server registry.
+    -->
+    <icon>org/netbeans/modules/glassfish/common/resources/server</icon>
+
+    <!--
+    The disconnected-string element contains the String parameter to DeploymentFactory.getDisconnectedDeploymentManager()
+    -->
+    <disconnected-string>deployer:gfv510ee8</disconnected-string>
+
+    <!--
+    The container-limitation element modifies a plugin to say that not all j2ee deployments are valid.
+    For example, a web-only server would include
+    <container-limitation> <war-deploy/> </container-limitation>
+    to indicate that only war deployments are accepted.
+    If a container-limitation element is not present, all j2ee deployments are assumed valid.
+    If a container-limitation element is present, then only j2ee deployment types explicitly
+    mentioned are allowed.
+    -->
+    <!-- v3 ee6 has no limitations...
+    <container-limitation>
+        <ear-deploy/>
+        <war-deploy/>
+        <ejbjar-deploy/>
+    </container-limitation>
+    -->
+    <web-context-root>
+        <xpath>/</xpath>
+        <prop-name>contextRoot</prop-name>
+    </web-context-root>
+
+</netbeans-deployment>
diff --git a/enterprise/glassfish.tooling/nbproject/org-netbeans-modules-glassfish-tooling.sig b/enterprise/glassfish.tooling/nbproject/org-netbeans-modules-glassfish-tooling.sig
index 79cfa3f..e4c71eb 100644
--- a/enterprise/glassfish.tooling/nbproject/org-netbeans-modules-glassfish-tooling.sig
+++ b/enterprise/glassfish.tooling/nbproject/org-netbeans-modules-glassfish-tooling.sig
@@ -1748,6 +1748,8 @@ fld public final static org.netbeans.modules.glassfish.tooling.server.config.Jav
 fld public final static org.netbeans.modules.glassfish.tooling.server.config.JavaEEProfile v1_7_web
 fld public final static org.netbeans.modules.glassfish.tooling.server.config.JavaEEProfile v1_8
 fld public final static org.netbeans.modules.glassfish.tooling.server.config.JavaEEProfile v1_8_web
+fld public final static org.netbeans.modules.glassfish.tooling.server.config.JavaEEProfile v8_0_0
+fld public final static org.netbeans.modules.glassfish.tooling.server.config.JavaEEProfile v8_0_0_web
 innr public final static !enum Type
 innr public final static !enum Version
 meth public java.lang.String toString()
@@ -2454,4 +2456,3 @@ meth public void startPrefixMapping(java.lang.String,java.lang.String) throws or
 meth public void unparsedEntityDecl(java.lang.String,java.lang.String,java.lang.String,java.lang.String) throws org.xml.sax.SAXException
 meth public void warning(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException
 supr java.lang.Object
-
diff --git a/enterprise/glassfish.tooling/src/org/netbeans/modules/glassfish/tooling/server/config/GlassFishV5_1_0.xml b/enterprise/glassfish.tooling/src/org/netbeans/modules/glassfish/tooling/server/config/GlassFishV5_1_0.xml
new file mode 100644
index 0000000..bafd707
--- /dev/null
+++ b/enterprise/glassfish.tooling/src/org/netbeans/modules/glassfish/tooling/server/config/GlassFishV5_1_0.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<server>
+    <tools lib="lib">
+        <asadmin jar="client/appserver-cli.jar"/>
+    </tools>
+    <java version="1.8">
+        <platform version="1.7"/>
+        <platform version="1.8"/>
+    </java>
+    <javaee version="1.8">
+        <profile version="1.3" type="full"/>
+        <profile version="1.4" type="full"/>
+        <profile version="1.5" type="full"/>
+        <profile version="1.6" type="web"/>
+        <profile version="1.6" type="full" check="full"/>
+        <profile version="1.7" type="web"/>
+        <profile version="1.7" type="full" check="full"/>
+        <profile version="1.8" type="web"/>
+        <profile version="1.8" type="full" check="full"/>
+        <profile version="1.8.0" type="web"/>
+        <profile version="1.8.0" type="full" check="full"/>
+        <module type="war"/>
+        <module type="car" check="full"/>
+        <module type="ear" check="full"/>
+        <module type="ejb" check="full"/>
+        <module type="rar" check="full"/>
+        <check name="full">
+            <file path="appclient-server-core.jar"/>
+        </check>
+    </javaee>
+    <library id="Java EE">
+        <classpath>
+            <fileset dir="modules">
+                <include name="javax\..+\.jar"/>
+                <include name="bean-validator.jar"/>
+                <include name="cdi-api.jar"/>
+                <include name="jaxb-osgi.jar"/>
+                <include name="jaxr-api-osgi.jar"/>
+                <include name="jaxrpc-api-osgi.jar"/>
+                <include name="webservices-osgi.jar"/>
+                <include name="weld-osgi-bundle.jar"/>
+            </fileset>
+            <fileset dir="modules/endorsed">
+                <include name=".+\.jar"/>
+            </fileset>
+            <fileset dir="../mq/lib">
+                <include name="jaxm-api.jar"/>
+            </fileset>
+        </classpath>
+        <javadocs>
+            <lookup path="docs/javaee-doc-api.jar"/>
+        </javadocs>
+        <sources>
+        </sources>
+    </library>
+    <library id="Jersey 2">
+        <classpath>
+            <fileset dir="modules">
+                <include name="guava.+\.jar"/>
+                <include name="jackson.+\.jar"/>
+                <!-- include name="javax.ws.+\.jar"/ -->
+                <include name="jersey.+\.jar"/>
+                <include name="jettison.*\.jar"/>
+            </fileset>
+        </classpath>
+        <javadocs>
+            <link url="http://repo1.maven.org/maven2/org/glassfish/jersey/jersey-documentation/2.0-m05-2/jersey-documentation-2.0-m05-2-docbook.zip"/>
+        </javadocs>
+        <sources>
+        </sources>
+    </library>
+    <library id="JAX-RS">
+        <classpath>
+            <fileset dir="modules">
+                <include name="javax.ws.rs-api.jar"/>
+            </fileset>
+        </classpath>
+        <javadocs>
+        </javadocs>
+        <sources>
+        </sources>
+    </library>
+</server>
diff --git a/enterprise/glassfish.tooling/src/org/netbeans/modules/glassfish/tooling/server/config/JavaEEProfile.java b/enterprise/glassfish.tooling/src/org/netbeans/modules/glassfish/tooling/server/config/JavaEEProfile.java
index 5d1733e..7efcd2f 100644
--- a/enterprise/glassfish.tooling/src/org/netbeans/modules/glassfish/tooling/server/config/JavaEEProfile.java
+++ b/enterprise/glassfish.tooling/src/org/netbeans/modules/glassfish/tooling/server/config/JavaEEProfile.java
@@ -60,7 +60,13 @@ public enum JavaEEProfile {
     v1_8_web(Version.v1_8, Type.WEB, "1.8-web"),
 
     /** JavaEE 1.8 full profile. */
-    v1_8(Version.v1_8, Type.FULL, "1.8");
+    v1_8(Version.v1_8, Type.FULL, "1.8"),
+
+    /** JakartaEE 8 web profile. */
+    v8_0_0_web(Version.v8_0_0, Type.WEB, "8.0.0-web"),
+
+    /** JakartaEE 8 full profile. */
+    v8_0_0(Version.v8_0_0, Type.FULL, "8.0.0");
 
     ////////////////////////////////////////////////////////////////////////////
     // Inner enums                                                            //
@@ -112,7 +118,9 @@ public enum JavaEEProfile {
         /** JavaEE 1.7. */
         v1_7("1.7"),
         /** JavaEE 1.8. */
-        v1_8("1.8");
+        v1_8("1.8"),
+        /** JakartaEE 1.8.0. */
+        v8_0_0("8.0.0");
 
         /** JavaEE profile type name. */
         private final String name;
@@ -137,18 +145,18 @@ public enum JavaEEProfile {
             return this.name;
         }
     }
-    
+
     ////////////////////////////////////////////////////////////////////////////
     // Class attributes                                                       //
     ////////////////////////////////////////////////////////////////////////////
 
     /** GlassFish JavaEE profile enumeration length. */
     public static final int length = JavaEEProfile.values().length;
-    
+
     /** JavaEE profile type element separator character. */
     public static final char TYPE_SEPARATOR = '-';
 
-    /** 
+    /**
      * Stored <code>String</code> values for backward <code>String</code>
      * conversion.
      */
@@ -202,7 +210,7 @@ public enum JavaEEProfile {
                         ServerConfigException.INVALID_EE_PLATFORM_TYPE);
         }
         return names;
-    } 
+    }
 
     /**
      * Returns a <code>JavaEEProfile</code> with a value represented by the
@@ -211,7 +219,7 @@ public enum JavaEEProfile {
      * matches any <code>String</code> returned by <code>toString</code> method.
      * Otherwise <code>null</code> value is returned.
      * <p>
-     * @param name Value containing <code>JavaEEProfile</code> 
+     * @param name Value containing <code>JavaEEProfile</code>
      *                    <code>toString</code> representation.
      * @return <code>JavaEEProfile</code> value represented
      *         by <code>String</code> or <code>null</code> if value
diff --git a/enterprise/gradle.javaee/src/org/netbeans/modules/gradle/javaee/GradleJavaEEProjectSettings.java b/enterprise/gradle.javaee/src/org/netbeans/modules/gradle/javaee/GradleJavaEEProjectSettings.java
index 8ae223f..b7d5873 100644
--- a/enterprise/gradle.javaee/src/org/netbeans/modules/gradle/javaee/GradleJavaEEProjectSettings.java
+++ b/enterprise/gradle.javaee/src/org/netbeans/modules/gradle/javaee/GradleJavaEEProjectSettings.java
@@ -51,16 +51,19 @@ public class GradleJavaEEProjectSettings implements JavaEEProjectSettingsImpleme
 
     public static final String PROP_SELECTED_BROWSER = "selected.browser";
     public static final String PROP_SELECTED_SERVER = "selected.server";
-    
+
     static final Map<String, Profile> PROFILE_DEPENDENCIES = new LinkedHashMap<>();
 
     static {
+      PROFILE_DEPENDENCIES.put("jakarta.platform:jakarta.jakartaee-api:8.*", JAKARTA_EE_8_FULL);
+      PROFILE_DEPENDENCIES.put("jakarta.platform:jakarta.jakartaee-web-api:8.*", JAKARTA_EE_8_WEB);
         PROFILE_DEPENDENCIES.put("javax:javaee-api:8.*", JAVA_EE_8_FULL);
         PROFILE_DEPENDENCIES.put("javax:javaee-web-api:8.*", JAVA_EE_8_WEB);
         PROFILE_DEPENDENCIES.put("javax:javaee-api:7.*", JAVA_EE_7_FULL);
         PROFILE_DEPENDENCIES.put("javax:javaee-web-api:7.*", JAVA_EE_7_WEB);
         PROFILE_DEPENDENCIES.put("javax:javaee-api:6.*", JAVA_EE_6_FULL);
         PROFILE_DEPENDENCIES.put("javax:javaee-web-api:6.*", JAVA_EE_6_WEB);
+        PROFILE_DEPENDENCIES.put("javax\\.servlet:javax\\.servlet-api:4\\.0.*", JAKARTA_EE_8_WEB);
         PROFILE_DEPENDENCIES.put("javax\\.servlet:javax\\.servlet-api:4\\.0.*", JAVA_EE_8_WEB);
         PROFILE_DEPENDENCIES.put("javax\\.servlet:javax\\.servlet-api:3\\.1.*", JAVA_EE_7_WEB);
         PROFILE_DEPENDENCIES.put("javax\\.servlet:javax\\.servlet-api:3\\.0.*", JAVA_EE_6_WEB);
@@ -74,7 +77,7 @@ public class GradleJavaEEProjectSettings implements JavaEEProjectSettingsImpleme
     }
 
     private static final List<String> CHECK_FIRST_CONFIGURATIONS = Arrays.asList("providedCompile", "compileOnly");
-    
+
     final Project project;
     Profile profile;
     final PropertyChangeListener pcl;
@@ -93,7 +96,7 @@ public class GradleJavaEEProjectSettings implements JavaEEProjectSettingsImpleme
         };
         NbGradleProject.addPropertyChangeListener(project, WeakListeners.propertyChange(pcl, NbGradleProject.get(project)));
     }
-    
+
     @Override
     public void setProfile(Profile profile) {
     }
@@ -134,15 +137,15 @@ public class GradleJavaEEProjectSettings implements JavaEEProjectSettingsImpleme
     public String getServerInstanceID() {
         return getPreferences().get(PROP_SELECTED_SERVER, null);
     }
-    
+
     Preferences getPreferences(boolean shared) {
         return ProjectUtils.getPreferences(project, GradleJavaEEProjectSettings.class, shared);
     }
-    
+
     public Preferences getPreferences() {
         return getPreferences(false);
     }
-    
+
     private static Profile checkProfileDependency(ModuleSearchSupport support) {
         Profile ret = null;
         for (Map.Entry<String, Profile> entry : PROFILE_DEPENDENCIES.entrySet()) {
diff --git a/enterprise/gradle.javaee/src/org/netbeans/modules/gradle/javaee/web/newproject/ServerSelectionPanelVisual.java b/enterprise/gradle.javaee/src/org/netbeans/modules/gradle/javaee/web/newproject/ServerSelectionPanelVisual.java
index d4d3ed7..ab8abd7 100644
--- a/enterprise/gradle.javaee/src/org/netbeans/modules/gradle/javaee/web/newproject/ServerSelectionPanelVisual.java
+++ b/enterprise/gradle.javaee/src/org/netbeans/modules/gradle/javaee/web/newproject/ServerSelectionPanelVisual.java
@@ -154,11 +154,11 @@ public class ServerSelectionPanelVisual extends javax.swing.JPanel {
                 Set<Profile> availableProfiles = new TreeSet<>(Profile.UI_COMPARATOR);
                 for (Profile profile : platform.getSupportedProfiles(type)) {
                     if (type == J2eeModule.Type.WAR) {
-                        if (profile == Profile.JAVA_EE_6_FULL || profile == Profile.JAVA_EE_7_FULL || profile == Profile.JAVA_EE_8_FULL) {
+                        if (profile == Profile.JAVA_EE_6_FULL || profile == Profile.JAVA_EE_7_FULL || profile == Profile.JAVA_EE_8_FULL || profile == Profile.JAKARTA_EE_8_FULL) {
                             continue;
                         }
                     } else {
-                        if (profile == Profile.JAVA_EE_6_WEB || profile == Profile.JAVA_EE_7_WEB || profile == Profile.JAVA_EE_8_WEB) {
+                        if (profile == Profile.JAVA_EE_6_WEB || profile == Profile.JAVA_EE_7_WEB || profile == Profile.JAVA_EE_8_WEB || profile == Profile.JAKARTA_EE_8_WEB) {
                             continue;
                         }
                     }
diff --git a/enterprise/gradle.javaee/src/org/netbeans/modules/gradle/javaee/web/newproject/WebApplicationProjectWizard.java b/enterprise/gradle.javaee/src/org/netbeans/modules/gradle/javaee/web/newproject/WebApplicationProjectWizard.java
index d4ec655..1606d78 100644
--- a/enterprise/gradle.javaee/src/org/netbeans/modules/gradle/javaee/web/newproject/WebApplicationProjectWizard.java
+++ b/enterprise/gradle.javaee/src/org/netbeans/modules/gradle/javaee/web/newproject/WebApplicationProjectWizard.java
@@ -109,8 +109,14 @@ public class WebApplicationProjectWizard extends SimpleGradleWizardIterator {
     private static List<String> webDependencies(String profileId) {
         Profile profile = Profile.fromPropertiesString(profileId);
         List<String> ret = new LinkedList<>();
+        if (profile == Profile.JAKARTA_EE_8_WEB) {
+            ret.add("providedCompile 'jakarta.platform:jakarta.jakartaee-web-api:8.0.0'");
+        }
+        if (profile == Profile.JAKARTA_EE_8_FULL) {
+            ret.add("providedCompile 'jakarta.platform:jakarta.jakartaee-api:8.0.0'");
+        }
         if (profile == Profile.JAVA_EE_8_WEB) {
-            ret.add("providedCompile 'javax:javaee-web-api:8.0'");            
+            ret.add("providedCompile 'javax:javaee-web-api:8.0'");
         }
         if (profile == Profile.JAVA_EE_8_FULL) {
             ret.add("providedCompile 'javax:javaee-api:8.0'");
diff --git a/enterprise/j2ee.clientproject/src/org/netbeans/modules/j2ee/clientproject/wsclient/AppClientProjectJAXWSClientSupport.java b/enterprise/j2ee.clientproject/src/org/netbeans/modules/j2ee/clientproject/wsclient/AppClientProjectJAXWSClientSupport.java
index 7f99163..91711aa 100644
--- a/enterprise/j2ee.clientproject/src/org/netbeans/modules/j2ee/clientproject/wsclient/AppClientProjectJAXWSClientSupport.java
+++ b/enterprise/j2ee.clientproject/src/org/netbeans/modules/j2ee/clientproject/wsclient/AppClientProjectJAXWSClientSupport.java
@@ -41,7 +41,7 @@ import org.openide.filesystems.FileObject;
  */
 public class AppClientProjectJAXWSClientSupport extends ProjectJAXWSClientSupport /*implements JAXWSClientSupportImpl*/ {
     AppClientProject project;
-    
+
     /**
      * Creates a new instance of AppClientProjectJAXWSClientSupport
      */
@@ -78,7 +78,7 @@ public class AppClientProjectJAXWSClientSupport extends ProjectJAXWSClientSuppor
             }
         }
     }
-    
+
     /** return root folder for xml artifacts
      */
     @Override
@@ -102,7 +102,11 @@ public class AppClientProjectJAXWSClientSupport extends ProjectJAXWSClientSuppor
                 return JAVA_EE_VERSION_18;
             } else if (Profile.JAVA_EE_8_FULL.equals(j2eeClientModule.getJ2eeProfile())) {
                 return JAVA_EE_VERSION_18;
-            } else if (Profile.JAVA_EE_5.equals(j2eeClientModule.getJ2eeProfile())) {
+            } else if (Profile.JAKARTA_EE_8_WEB.equals(j2eeClientModule.getJ2eeProfile())) {
+                return JAKARTA_EE_VERSION_8;
+            } else if (Profile.JAKARTA_EE_8_FULL.equals(j2eeClientModule.getJ2eeProfile())) {
+                return JAKARTA_EE_VERSION_8;
+            }else if (Profile.JAVA_EE_5.equals(j2eeClientModule.getJ2eeProfile())) {
                 return JAVA_EE_VERSION_15;
             }
         }
diff --git a/enterprise/j2ee.common/src/org/netbeans/modules/j2ee/common/J2eeProjectCapabilities.java b/enterprise/j2ee.common/src/org/netbeans/modules/j2ee/common/J2eeProjectCapabilities.java
index 301b44c..45c2b6b 100644
--- a/enterprise/j2ee.common/src/org/netbeans/modules/j2ee/common/J2eeProjectCapabilities.java
+++ b/enterprise/j2ee.common/src/org/netbeans/modules/j2ee/common/J2eeProjectCapabilities.java
@@ -96,7 +96,7 @@ public final class J2eeProjectCapabilities {
     public boolean isEjb30Supported() {
         J2eeModule.Type moduleType = provider.getJ2eeModule().getType();
         boolean eeOk = ejbJarProfile != null && (ejbJarProfile.equals(Profile.JAVA_EE_5) ||
-                ejbJarProfile.equals(Profile.JAVA_EE_6_FULL) || ejbJarProfile.equals(Profile.JAVA_EE_7_FULL) || ejbJarProfile.equals(Profile.JAVA_EE_8_FULL));
+                ejbJarProfile.equals(Profile.JAVA_EE_6_FULL) || ejbJarProfile.equals(Profile.JAVA_EE_7_FULL) || ejbJarProfile.equals(Profile.JAVA_EE_8_FULL) || ejbJarProfile.equals(Profile.JAKARTA_EE_8_FULL));
         return J2eeModule.Type.EJB.equals(moduleType) && eeOk;
     }
 
@@ -106,7 +106,7 @@ public final class J2eeProjectCapabilities {
      */
     public boolean isEjb31Supported() {
         J2eeModule.Type moduleType = provider.getJ2eeModule().getType();
-        boolean ee6or7 = ejbJarProfile != null && (ejbJarProfile.equals(Profile.JAVA_EE_6_FULL) || ejbJarProfile.equals(Profile.JAVA_EE_7_FULL) || ejbJarProfile.equals(Profile.JAVA_EE_8_FULL));
+        boolean ee6or7 = ejbJarProfile != null && (ejbJarProfile.equals(Profile.JAVA_EE_6_FULL) || ejbJarProfile.equals(Profile.JAVA_EE_7_FULL) || ejbJarProfile.equals(Profile.JAVA_EE_8_FULL) || ejbJarProfile.equals(Profile.JAKARTA_EE_8_FULL));
         return ee6or7 && (J2eeModule.Type.EJB.equals(moduleType) ||
                 J2eeModule.Type.WAR.equals(moduleType));
     }
@@ -117,7 +117,7 @@ public final class J2eeProjectCapabilities {
      */
     public boolean isEjb31LiteSupported() {
         J2eeModule.Type moduleType = provider.getJ2eeModule().getType();
-        boolean ee6or7Web = ejbJarProfile != null && (ejbJarProfile.equals(Profile.JAVA_EE_6_WEB) || ejbJarProfile.equals(Profile.JAVA_EE_7_WEB) || ejbJarProfile.equals(Profile.JAVA_EE_8_WEB));
+        boolean ee6or7Web = ejbJarProfile != null && (ejbJarProfile.equals(Profile.JAVA_EE_6_WEB) || ejbJarProfile.equals(Profile.JAVA_EE_7_WEB) || ejbJarProfile.equals(Profile.JAVA_EE_8_WEB) || ejbJarProfile.equals(Profile.JAKARTA_EE_8_WEB));
         return isEjb31Supported() || (J2eeModule.Type.WAR.equals(moduleType) && ee6or7Web);
     }
 
@@ -130,7 +130,7 @@ public final class J2eeProjectCapabilities {
      */
     public boolean isEjb32Supported() {
         J2eeModule.Type moduleType = provider.getJ2eeModule().getType();
-        boolean ee7 = ejbJarProfile != null && (ejbJarProfile.equals(Profile.JAVA_EE_7_FULL) || ejbJarProfile.equals(Profile.JAVA_EE_8_FULL));
+        boolean ee7 = ejbJarProfile != null && (ejbJarProfile.equals(Profile.JAVA_EE_7_FULL) || ejbJarProfile.equals(Profile.JAVA_EE_8_FULL) || ejbJarProfile.equals(Profile.JAKARTA_EE_8_FULL));
         return ee7 && (J2eeModule.Type.EJB.equals(moduleType) || J2eeModule.Type.WAR.equals(moduleType));
     }
 
@@ -143,7 +143,7 @@ public final class J2eeProjectCapabilities {
      */
     public boolean isEjb32LiteSupported() {
         J2eeModule.Type moduleType = provider.getJ2eeModule().getType();
-        boolean ee7Web = ejbJarProfile != null && (ejbJarProfile.equals(Profile.JAVA_EE_7_WEB) || ejbJarProfile.equals(Profile.JAVA_EE_8_WEB));
+        boolean ee7Web = ejbJarProfile != null && (ejbJarProfile.equals(Profile.JAVA_EE_7_WEB) || ejbJarProfile.equals(Profile.JAVA_EE_8_WEB) || ejbJarProfile.equals(Profile.JAKARTA_EE_8_WEB));
         return isEjb32Supported() || (J2eeModule.Type.WAR.equals(moduleType) && ee7Web);
     }
 
diff --git a/enterprise/j2ee.common/src/org/netbeans/modules/j2ee/common/dd/DDHelper.java b/enterprise/j2ee.common/src/org/netbeans/modules/j2ee/common/dd/DDHelper.java
index 1d4ce1e..2f57fbb 100644
--- a/enterprise/j2ee.common/src/org/netbeans/modules/j2ee/common/dd/DDHelper.java
+++ b/enterprise/j2ee.common/src/org/netbeans/modules/j2ee/common/dd/DDHelper.java
@@ -55,7 +55,7 @@ public class DDHelper {
     public static FileObject createWebXml(Profile j2eeProfile, FileObject dir) throws IOException {
         return createWebXml(j2eeProfile, true, dir);
     }
-    
+
     /**
      * Creates web.xml deployment descriptor.
      * @param j2eeProfile Java EE profile to specify which version of web.xml should be created
@@ -66,7 +66,9 @@ public class DDHelper {
      */
     public static FileObject createWebXml(Profile j2eeProfile, boolean webXmlRequired, FileObject dir) throws IOException {
         String template = null;
-        if ((Profile.JAVA_EE_8_FULL == j2eeProfile || Profile.JAVA_EE_8_WEB == j2eeProfile) && webXmlRequired) {
+        if ((Profile.JAKARTA_EE_8_FULL == j2eeProfile || Profile.JAKARTA_EE_8_WEB == j2eeProfile) && webXmlRequired) {
+            template = "web-4.0.xml"; //NOI18N
+        } else if ((Profile.JAVA_EE_8_FULL == j2eeProfile || Profile.JAVA_EE_8_WEB == j2eeProfile) && webXmlRequired) {
             template = "web-4.0.xml"; //NOI18N
         } else if ((Profile.JAVA_EE_7_FULL == j2eeProfile || Profile.JAVA_EE_7_WEB == j2eeProfile) && webXmlRequired) {
             template = "web-3.1.xml"; //NOI18N
@@ -100,7 +102,9 @@ public class DDHelper {
      */
     public static FileObject createWebFragmentXml(Profile j2eeProfile, FileObject dir) throws IOException {
         String template = null;
-        if (Profile.JAVA_EE_8_FULL == j2eeProfile || Profile.JAVA_EE_8_WEB == j2eeProfile) {
+        if (Profile.JAKARTA_EE_8_FULL == j2eeProfile || Profile.JAKARTA_EE_8_WEB == j2eeProfile) {
+            template = "web-fragment-4.0.xml"; //NOI18N
+        } else if (Profile.JAVA_EE_8_FULL == j2eeProfile || Profile.JAVA_EE_8_WEB == j2eeProfile) {
             template = "web-fragment-4.0.xml"; //NOI18N
         } else if (Profile.JAVA_EE_7_FULL == j2eeProfile || Profile.JAVA_EE_7_WEB == j2eeProfile) {
             template = "web-fragment-3.1.xml"; //NOI18N
@@ -118,7 +122,7 @@ public class DDHelper {
         else
             return action.getResult();
     }
-    
+
     /**
      * Creates beans.xml deployment descriptor.
      * @param j2eeProfile Java EE profile to specify which version of beans.xml should be created
@@ -151,6 +155,9 @@ public class DDHelper {
         if (Profile.JAVA_EE_8_FULL == j2eeProfile || Profile.JAVA_EE_8_WEB == j2eeProfile) {
             template = "beans-2.0.xml"; //NOI18N
         }
+        if (Profile.JAKARTA_EE_8_FULL == j2eeProfile || Profile.JAKARTA_EE_8_WEB == j2eeProfile) {
+            template = "beans-2.0.xml"; //NOI18N
+        }
 
         if (template == null)
             return null;
@@ -188,7 +195,8 @@ public class DDHelper {
         String template = null;
         if (Profile.JAVA_EE_6_FULL == j2eeProfile || Profile.JAVA_EE_6_WEB == j2eeProfile ||
                 Profile.JAVA_EE_7_FULL == j2eeProfile || Profile.JAVA_EE_7_WEB == j2eeProfile ||
-                Profile.JAVA_EE_8_FULL == j2eeProfile || Profile.JAVA_EE_8_WEB == j2eeProfile) {
+                Profile.JAVA_EE_8_FULL == j2eeProfile || Profile.JAVA_EE_8_WEB == j2eeProfile ||
+                Profile.JAKARTA_EE_8_FULL == j2eeProfile || Profile.JAKARTA_EE_8_WEB == j2eeProfile) {
             template = "validation.xml"; //NOI18N
         }
 
@@ -228,7 +236,8 @@ public class DDHelper {
         String template = null;
         if (Profile.JAVA_EE_6_FULL == j2eeProfile || Profile.JAVA_EE_6_WEB == j2eeProfile ||
                 Profile.JAVA_EE_7_FULL == j2eeProfile || Profile.JAVA_EE_7_WEB == j2eeProfile ||
-                Profile.JAVA_EE_8_FULL == j2eeProfile || Profile.JAVA_EE_8_WEB == j2eeProfile) {
+                Profile.JAVA_EE_8_FULL == j2eeProfile || Profile.JAVA_EE_8_WEB == j2eeProfile ||
+                Profile.JAKARTA_EE_8_FULL == j2eeProfile || Profile.JAKARTA_EE_8_WEB == j2eeProfile) {
             template = "constraint.xml"; //NOI18N
         }
 
@@ -271,7 +280,7 @@ public class DDHelper {
         if (template == null) {
             return null;
         }
-        
+
         MakeFileCopy action = new MakeFileCopy(RESOURCE_FOLDER + template, dir, "application.xml");
         FileUtil.runAtomicAction(action);
         if (action.getException() != null) {
diff --git a/enterprise/j2ee.common/test/unit/src/org/netbeans/modules/j2ee/common/J2eeProjectCapabilitiesTest.java b/enterprise/j2ee.common/test/unit/src/org/netbeans/modules/j2ee/common/J2eeProjectCapabilitiesTest.java
index 69c4318..5273c0a 100644
--- a/enterprise/j2ee.common/test/unit/src/org/netbeans/modules/j2ee/common/J2eeProjectCapabilitiesTest.java
+++ b/enterprise/j2ee.common/test/unit/src/org/netbeans/modules/j2ee/common/J2eeProjectCapabilitiesTest.java
@@ -114,6 +114,14 @@ public class J2eeProjectCapabilitiesTest extends NbTestCase {
         assertTrue(cap.isEjb32Supported());
         assertTrue(cap.isEjb32LiteSupported());
 
+        p = createProject(Profile.JAKARTA_EE_8_FULL, Type.WAR);
+        cap = J2eeProjectCapabilities.forProject(p);
+        assertFalse(cap.isEjb30Supported());
+        assertTrue(cap.isEjb31Supported());
+        assertTrue(cap.isEjb31LiteSupported());
+        assertTrue(cap.isEjb32Supported());
+        assertTrue(cap.isEjb32LiteSupported());
+
         p = createProject(Profile.JAVA_EE_7_FULL, Type.EJB);
         cap = J2eeProjectCapabilities.forProject(p);
         assertTrue(cap.isEjb30Supported());
@@ -145,6 +153,14 @@ public class J2eeProjectCapabilitiesTest extends NbTestCase {
         assertTrue(cap.isEjb31LiteSupported());
         assertFalse(cap.isEjb32Supported());
         assertTrue(cap.isEjb32LiteSupported());
+
+        p = createProject(Profile.JAKARTA_EE_8_WEB, Type.WAR);
+        cap = J2eeProjectCapabilities.forProject(p);
+        assertFalse(cap.isEjb30Supported());
+        assertFalse(cap.isEjb31Supported());
+        assertTrue(cap.isEjb31LiteSupported());
+        assertFalse(cap.isEjb32Supported());
+        assertTrue(cap.isEjb32LiteSupported());
     }
 
     private Project createProject(final Profile profile, final Type type) throws IOException {
@@ -176,7 +192,7 @@ public class J2eeProjectCapabilitiesTest extends NbTestCase {
         public Lookup getLookup() {
             return l;
         }
-    
+
     }
 
     private static class FakeEjbJarsInProject implements EjbJarsInProject {
@@ -220,7 +236,7 @@ public class J2eeProjectCapabilitiesTest extends NbTestCase {
         public MetadataModel<EjbJarMetadata> getMetadataModel() {
             throw new UnsupportedOperationException("Not supported yet.");
         }
-    
+
     }
 
     private static class FakeJ2eeModuleProvider extends J2eeModuleProvider {
@@ -311,5 +327,5 @@ public class J2eeProjectCapabilitiesTest extends NbTestCase {
         }
 
     }
- 
+
 }
diff --git a/enterprise/j2ee.core/nbproject/org-netbeans-modules-j2ee-core.sig b/enterprise/j2ee.core/nbproject/org-netbeans-modules-j2ee-core.sig
index aba62da..b25b245 100644
--- a/enterprise/j2ee.core/nbproject/org-netbeans-modules-j2ee-core.sig
+++ b/enterprise/j2ee.core/nbproject/org-netbeans-modules-j2ee-core.sig
@@ -26,6 +26,8 @@ fld public final static org.netbeans.api.j2ee.core.Profile JAVA_EE_7_FULL
 fld public final static org.netbeans.api.j2ee.core.Profile JAVA_EE_7_WEB
 fld public final static org.netbeans.api.j2ee.core.Profile JAVA_EE_8_FULL
 fld public final static org.netbeans.api.j2ee.core.Profile JAVA_EE_8_WEB
+fld public final static org.netbeans.api.j2ee.core.Profile JAKARTA_EE_8_FULL
+fld public final static org.netbeans.api.j2ee.core.Profile JAKARTA_EE_8_WEB
 meth public boolean isAtLeast(org.netbeans.api.j2ee.core.Profile)
  anno 1 org.netbeans.api.annotations.common.NonNull()
 meth public java.lang.String getDisplayName()
@@ -38,4 +40,3 @@ meth public static org.netbeans.api.j2ee.core.Profile fromPropertiesString(java.
  anno 1 org.netbeans.api.annotations.common.NullAllowed()
 supr java.lang.Object
 hfds bundleKey,order,propertiesString
-
diff --git a/enterprise/j2ee.core/src/org/netbeans/api/j2ee/core/Bundle.properties b/enterprise/j2ee.core/src/org/netbeans/api/j2ee/core/Bundle.properties
index 3d9277d..7cb2123 100644
--- a/enterprise/j2ee.core/src/org/netbeans/api/j2ee/core/Bundle.properties
+++ b/enterprise/j2ee.core/src/org/netbeans/api/j2ee/core/Bundle.properties
@@ -26,3 +26,5 @@ JavaEE7Full.displayName=Java EE 7
 JavaEE7Web.displayName=Java EE 7 Web
 JavaEE8Full.displayName=Java EE 8
 JavaEE8Web.displayName=Java EE 8 Web
+JakartaEE8Full.displayName=Jakarta EE 8
+JakartaEE8Web.displayName=Jakarta EE 8 Web
diff --git a/enterprise/j2ee.core/src/org/netbeans/api/j2ee/core/Profile.java b/enterprise/j2ee.core/src/org/netbeans/api/j2ee/core/Profile.java
index 0033e37..f90b6d3 100644
--- a/enterprise/j2ee.core/src/org/netbeans/api/j2ee/core/Profile.java
+++ b/enterprise/j2ee.core/src/org/netbeans/api/j2ee/core/Profile.java
@@ -61,6 +61,10 @@ public final class Profile {
 
     public static final Profile JAVA_EE_8_WEB  = new Profile(9, "1.8", "web", "JavaEE8Web.displayName");
 
+    public static final Profile JAKARTA_EE_8_WEB  = new Profile(10, "8.0", "web", "JakartaEE8Web.displayName");
+
+    public static final Profile JAKARTA_EE_8_FULL  = new Profile(11, "8.0", "web", "JakartaEE8Full.displayName");
+
     private final int order;
 
     // cache
@@ -152,6 +156,12 @@ public final class Profile {
         } else if (JAVA_EE_8_WEB.toPropertiesString().equals(valueMinusQuotes)
                 || "EE_8_WEB".equals(value)) {
             return JAVA_EE_8_WEB;
+        } else if (JAKARTA_EE_8_FULL.toPropertiesString().equals(valueMinusQuotes)
+                || "JAKARTA_EE_8_FULL".equals(value)) {
+            return JAKARTA_EE_8_FULL;
+        } else if (JAKARTA_EE_8_WEB.toPropertiesString().equals(valueMinusQuotes)
+                || "JAKARTA_EE_8_WEB".equals(value)) {
+            return JAKARTA_EE_8_WEB;
         } else {
             return null;
         }
diff --git a/enterprise/j2ee.core/test/unit/src/org/netbeans/api/j2ee/core/ProfileTest.java b/enterprise/j2ee.core/test/unit/src/org/netbeans/api/j2ee/core/ProfileTest.java
index d8d3806..675f160 100644
--- a/enterprise/j2ee.core/test/unit/src/org/netbeans/api/j2ee/core/ProfileTest.java
+++ b/enterprise/j2ee.core/test/unit/src/org/netbeans/api/j2ee/core/ProfileTest.java
@@ -86,6 +86,21 @@ public class ProfileTest extends NbTestCase {
         assertFalse(Profile.JAVA_EE_7_FULL.isAtLeast(Profile.JAVA_EE_8_WEB));
         assertTrue(Profile.JAVA_EE_8_WEB.isAtLeast(Profile.JAVA_EE_8_WEB));
         assertTrue(Profile.JAVA_EE_8_FULL.isAtLeast(Profile.JAVA_EE_8_WEB));
-}
+    }
+
+    public void testIsHigherJavaEEVersionJakartaEE8full() {
+        assertFalse(Profile.J2EE_13.isAtLeast(Profile.JAKARTA_EE_8_WEB));
+        assertFalse(Profile.J2EE_14.isAtLeast(Profile.JAKARTA_EE_8_WEB));
+        assertFalse(Profile.JAVA_EE_5.isAtLeast(Profile.JAKARTA_EE_8_WEB));
+
+        assertFalse(Profile.JAVA_EE_6_WEB.isAtLeast(Profile.JAKARTA_EE_8_WEB));
+        assertFalse(Profile.JAVA_EE_6_FULL.isAtLeast(Profile.JAKARTA_EE_8_WEB));
+        assertFalse(Profile.JAVA_EE_7_WEB.isAtLeast(Profile.JAKARTA_EE_8_WEB));
+        assertFalse(Profile.JAVA_EE_7_FULL.isAtLeast(Profile.JAKARTA_EE_8_WEB));
+        assertTrue(Profile.JAVA_EE_8_WEB.isAtLeast(Profile.JAKARTA_EE_8_WEB));
+        assertTrue(Profile.JAVA_EE_8_FULL.isAtLeast(Profile.JAKARTA_EE_8_WEB));
+        assertTrue(Profile.JAKARTA_EE_8_WEB.isAtLeast(Profile.JAKARTA_EE_8_WEB));
+        assertTrue(Profile.JAKARTA_EE_8_FULL.isAtLeast(Profile.JAKARTA_EE_8_WEB));
+    }
 
 }
diff --git a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/Utils.java b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/Utils.java
index 4d62c96..6ea1741 100644
--- a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/Utils.java
+++ b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/Utils.java
@@ -253,7 +253,8 @@ public class Utils {
                     if (J2eeModule.Type.EJB.equals(type) || (J2eeModule.Type.WAR.equals(type) &&
                                 (Profile.JAVA_EE_6_WEB.equals(profile) || Profile.JAVA_EE_6_FULL.equals(profile) ||
                                 Profile.JAVA_EE_7_WEB.equals(profile) || Profile.JAVA_EE_7_FULL.equals(profile) ||
-                                Profile.JAVA_EE_8_WEB.equals(profile) || Profile.JAVA_EE_8_FULL.equals(profile)))){
+                                Profile.JAVA_EE_8_WEB.equals(profile) || Profile.JAVA_EE_8_FULL.equals(profile) ||
+                                Profile.JAKARTA_EE_8_WEB.equals(profile) || Profile.JAKARTA_EE_8_FULL.equals(profile)))){
                         isEJBModule = true;
                     }
             }
diff --git a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/dd/EjbJarXmlWizardIterator.java b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/dd/EjbJarXmlWizardIterator.java
index 70c5b42..0328c2e 100644
--- a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/dd/EjbJarXmlWizardIterator.java
+++ b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/dd/EjbJarXmlWizardIterator.java
@@ -39,15 +39,15 @@ import org.openide.filesystems.FileUtil;
  *
  * @author Martin Adamek
  */
-public final class EjbJarXmlWizardIterator implements WizardDescriptor.InstantiatingIterator { 
+public final class EjbJarXmlWizardIterator implements WizardDescriptor.InstantiatingIterator {
 
     // generated by apisupport wizard
-    
+
     private int index;
-    
+
     private WizardDescriptor wizard;
     private WizardDescriptor.Panel[] panels;
-    
+
     /**
      * Initialize panels representing individual wizard's steps and sets
      * various properties for them influencing wizard appearance.
@@ -83,7 +83,7 @@ public final class EjbJarXmlWizardIterator implements WizardDescriptor.Instantia
         }
         return panels;
     }
-    
+
     public Set instantiate() throws IOException {
         FileObject confRoot = ((EjbJarXmlWizardPanel1) panels[0]).getSelectedLocation();
         Project project = ((EjbJarXmlWizardPanel1) panels[0]).getProject();
@@ -94,7 +94,7 @@ public final class EjbJarXmlWizardIterator implements WizardDescriptor.Instantia
             String resource;
             // see #213631 - caused by fact that EJB DD schemas have different numbering than WEB DD schemas
             //   (so Java EE6 Web-DD is of the version 3.0, but Ejb-DD is of the version 3.1)
-            if (j2eeProfile == Profile.JAVA_EE_7_WEB || j2eeProfile == Profile.JAVA_EE_8_WEB) {
+            if (j2eeProfile == Profile.JAVA_EE_7_WEB || j2eeProfile == Profile.JAVA_EE_8_WEB || j2eeProfile == Profile.JAKARTA_EE_8_WEB) {
                 resource = "org-netbeans-modules-j2ee-ejbjarproject/ejb-jar-3.2.xml";
             } else if (j2eeProfile == Profile.JAVA_EE_6_WEB) {
                 // ee6 web module is of the version 3.0 but the ee6 deployment descriptor schema should be of version 3.1
@@ -111,49 +111,49 @@ public final class EjbJarXmlWizardIterator implements WizardDescriptor.Instantia
         }
         return Collections.EMPTY_SET;
     }
-    
+
     public void initialize(WizardDescriptor wizard) {
         this.wizard = wizard;
     }
-    
+
     public void uninitialize(WizardDescriptor wizard) {
         panels = null;
     }
-    
+
     public WizardDescriptor.Panel current() {
         return getPanels()[index];
     }
-    
+
     public String name() {
         return index + 1 + ". from " + getPanels().length;
     }
-    
+
     public boolean hasNext() {
         return index < getPanels().length - 1;
     }
-    
+
     public boolean hasPrevious() {
         return index > 0;
     }
-    
+
     public void nextPanel() {
         if (!hasNext()) {
             throw new NoSuchElementException();
         }
         index++;
     }
-    
+
     public void previousPanel() {
         if (!hasPrevious()) {
             throw new NoSuchElementException();
         }
         index--;
     }
-    
+
     // If nothing unusual changes in the middle of the wizard, simply:
     public void addChangeListener(ChangeListener listener) {}
     public void removeChangeListener(ChangeListener listener) {}
-    
+
     // If something changes dynamically (besides moving between panels), e.g.
     // the number of panels changes in response to user input, then uncomment
     // the following and call when needed: fireChangeEvent();
@@ -180,7 +180,7 @@ public final class EjbJarXmlWizardIterator implements WizardDescriptor.Instantia
         }
     }
      */
-    
+
     // You could safely ignore this method. Is is here to keep steps which were
     // there before this wizard was instantiated. It should be better handled
     // by NetBeans Wizard API itself rather than needed to be implemented by a
@@ -191,11 +191,11 @@ public final class EjbJarXmlWizardIterator implements WizardDescriptor.Instantia
         if (prop != null && prop instanceof String[]) {
             beforeSteps = (String[]) prop;
         }
-        
+
         if (beforeSteps == null) {
             beforeSteps = new String[0];
         }
-        
+
         String[] res = new String[(beforeSteps.length - 1) + panels.length];
         for (int i = 0; i < res.length; i++) {
             if (i < (beforeSteps.length - 1)) {
@@ -206,5 +206,5 @@ public final class EjbJarXmlWizardIterator implements WizardDescriptor.Instantia
         }
         return res;
     }
-    
+
 }
diff --git a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/jpa/dao/AppServerValidationPanel.java b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/jpa/dao/AppServerValidationPanel.java
index 41e8d02..94a3839 100644
--- a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/jpa/dao/AppServerValidationPanel.java
+++ b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/jpa/dao/AppServerValidationPanel.java
@@ -58,7 +58,8 @@ public final class AppServerValidationPanel extends DelegatingWizardDescriptorPa
         WebModule wm = WebModule.getWebModule(project.getProjectDirectory());
         if (wm != null && (wm.getJ2eeProfile() == Profile.JAVA_EE_6_FULL || wm.getJ2eeProfile() == Profile.JAVA_EE_6_WEB ||
                 wm.getJ2eeProfile() == Profile.JAVA_EE_7_FULL || wm.getJ2eeProfile() == Profile.JAVA_EE_7_WEB ||
-                wm.getJ2eeProfile() == Profile.JAVA_EE_8_FULL || wm.getJ2eeProfile() == Profile.JAVA_EE_8_WEB)) {
+                wm.getJ2eeProfile() == Profile.JAVA_EE_8_FULL || wm.getJ2eeProfile() == Profile.JAVA_EE_8_WEB ||
+                wm.getJ2eeProfile() == Profile.JAKARTA_EE_8_FULL || wm.getJ2eeProfile() == Profile.JAKARTA_EE_8_WEB)) {
             // check that server is EJB lite sufficient
             EjbSupport ejbSupport = EjbSupport.getInstance(j2eePlatform);
             if (!ejbSupport.isEjb31LiteSupported(j2eePlatform)) {
diff --git a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/mdb/MdbWizard.java b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/mdb/MdbWizard.java
index 9ca9f65..a0aed8c 100644
--- a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/mdb/MdbWizard.java
+++ b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/mdb/MdbWizard.java
@@ -177,7 +177,9 @@ public final class MdbWizard implements WizardDescriptor.InstantiatingIterator {
     private Profile getTargetFullProfile() {
         Profile profile = JavaEEProjectSettings.getProfile(Templates.getProject(wiz));
         if (profile != null) {
-            if (profile.isAtLeast(Profile.JAVA_EE_8_WEB)) {
+            if (profile.isAtLeast(Profile.JAKARTA_EE_8_WEB)) {
+              return Profile.JAKARTA_EE_8_FULL;
+            } else if (profile.isAtLeast(Profile.JAVA_EE_8_WEB)) {
                 return Profile.JAVA_EE_8_FULL;
             } else if (profile.isAtLeast(Profile.JAVA_EE_7_WEB)) {
                 return Profile.JAVA_EE_7_FULL;
diff --git a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/session/SessionEJBWizard.java b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/session/SessionEJBWizard.java
index 29fcab3..0ae0f57 100644
--- a/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/session/SessionEJBWizard.java
+++ b/enterprise/j2ee.ejbcore/src/org/netbeans/modules/j2ee/ejbcore/ejb/wizard/session/SessionEJBWizard.java
@@ -90,14 +90,15 @@ public final class SessionEJBWizard implements WizardDescriptor.AsynchronousInst
         Profile profile = ejbModule.getJ2eeProfile();
         boolean isSimplified = Profile.JAVA_EE_5.equals(profile) || Profile.JAVA_EE_6_FULL.equals(profile) || Profile.JAVA_EE_6_WEB.equals(profile) ||
                  Profile.JAVA_EE_7_FULL.equals(profile) || Profile.JAVA_EE_7_WEB.equals(profile) ||
-                 Profile.JAVA_EE_8_FULL.equals(profile) || Profile.JAVA_EE_8_WEB.equals(profile);
+                 Profile.JAVA_EE_8_FULL.equals(profile) || Profile.JAVA_EE_8_WEB.equals(profile) ||
+                 Profile.JAKARTA_EE_8_FULL.equals(profile) || Profile.JAKARTA_EE_8_WEB.equals(profile);
         SessionGenerator sessionGenerator = SessionGenerator.create(
-                Templates.getTargetName(wiz), 
-                pkg, 
-                ejbPanel.hasRemote(), 
-                ejbPanel.hasLocal(), 
+                Templates.getTargetName(wiz),
+                pkg,
+                ejbPanel.hasRemote(),
+                ejbPanel.hasLocal(),
                 ejbPanel.getSessionType(),
-                isSimplified, 
+                isSimplified,
                 true, // TODO: UI - add checkbox for creation of business interface
                 !isSimplified, // TODO: UI - add checkbox for option XML (not annotation) usage
                 ejbPanel.getTimerOptions(),
@@ -148,4 +149,3 @@ public final class SessionEJBWizard implements WizardDescriptor.AsynchronousInst
     }
 
 }
-
diff --git a/enterprise/j2ee.ejbverification/src/org/netbeans/modules/j2ee/ejbverification/rules/PersistentTimerInEjbLite.java b/enterprise/j2ee.ejbverification/src/org/netbeans/modules/j2ee/ejbverification/rules/PersistentTimerInEjbLite.java
index da3ab8d..74b64af 100644
--- a/enterprise/j2ee.ejbverification/src/org/netbeans/modules/j2ee/ejbverification/rules/PersistentTimerInEjbLite.java
+++ b/enterprise/j2ee.ejbverification/src/org/netbeans/modules/j2ee/ejbverification/rules/PersistentTimerInEjbLite.java
@@ -83,7 +83,7 @@ public final class PersistentTimerInEjbLite {
         final List<ErrorDescription> problems = new ArrayList<>();
         final EJBProblemContext ctx = HintsUtils.getOrCacheContext(hintContext);
         if (ctx != null && ctx.getEjb() instanceof Session) {
-            boolean ee7lite = (ctx.getEjbModule().getJ2eeProfile() == Profile.JAVA_EE_7_WEB) || (ctx.getEjbModule().getJ2eeProfile() == Profile.JAVA_EE_8_WEB);
+            boolean ee7lite = (ctx.getEjbModule().getJ2eeProfile() == Profile.JAVA_EE_7_WEB) || (ctx.getEjbModule().getJ2eeProfile() == Profile.JAVA_EE_8_WEB) || (ctx.getEjbModule().getJ2eeProfile() == Profile.JAKARTA_EE_8_WEB);
             boolean ee6lite = ctx.getEjbModule().getJ2eeProfile() == Profile.JAVA_EE_6_WEB;
             J2eePlatform platform = ProjectUtil.getPlatform(ctx.getProject());
             if ((ee6lite || ee7lite) && nonEeFullServer(platform)) {
diff --git a/enterprise/j2ee.kit/nbproject/project.xml b/enterprise/j2ee.kit/nbproject/project.xml
index 31f5911..fe947d7 100644
--- a/enterprise/j2ee.kit/nbproject/project.xml
+++ b/enterprise/j2ee.kit/nbproject/project.xml
@@ -95,6 +95,12 @@
                     </run-dependency>
                 </dependency>
                 <dependency>
+                    <code-name-base>org.netbeans.modules.jakartaee8.api</code-name-base>
+                    <run-dependency>
+                        <specification-version>1.0</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
                     <code-name-base>org.netbeans.modules.web.kit</code-name-base>
                     <run-dependency>
                         <specification-version>1.0</specification-version>
diff --git a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/impl/layer.xml b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/impl/layer.xml
index 917e6a4..c97aa91 100644
--- a/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/impl/layer.xml
+++ b/enterprise/j2eeserver/src/org/netbeans/modules/j2ee/deployment/impl/layer.xml
@@ -56,6 +56,7 @@
                 <!-- More appropriate place would be GF module, but that would need another action-->
                 <attr name="config-GlassFishEE6/Instances/" boolvalue="true"/>
                 <attr name="config-GlassFishEE8/Instances/" boolvalue="true"/>
+                <attr name="config-GlassFishJakartaEE8/Instances/" boolvalue="true"/>
                 <attr name="config-GlassFishEE6WC/Instances/" boolvalue="true"/>
             </file>
         </folder>
@@ -131,7 +132,7 @@
     <folder name="OptionsExport">
         <folder name="Advanced">
             <file name="J2EE">
-                <attr name="include" stringvalue="config/(J2EE|GlassFish|GlassFishEE6|GlassFishEE6WC|GlassFishEE8)/.*"/>
+                <attr name="include" stringvalue="config/(J2EE|GlassFish|GlassFishEE6|GlassFishEE6WC|GlassFishEE8|GlassFishJakartaEE8)/.*"/>
                 <attr name="displayName" bundlevalue="org.netbeans.modules.j2ee.deployment.impl.Bundle#J2EE.Options.Export.displayName"/>
             </file>
         </folder>
diff --git a/enterprise/jakartaee8.api/build.xml b/enterprise/jakartaee8.api/build.xml
new file mode 100644
index 0000000..870046d
--- /dev/null
+++ b/enterprise/jakartaee8.api/build.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<project basedir="." default="build" name="enterprise/jakartaee8.api">
+    <description>Builds, tests, and runs the project org.netbeans.modules.jakartaee8.api</description>
+    <import file="../../nbbuild/templates/projectized.xml"/>
+</project>
diff --git a/enterprise/jakartaee8.api/external/binaries-list b/enterprise/jakartaee8.api/external/binaries-list
new file mode 100644
index 0000000..5b50e06
--- /dev/null
+++ b/enterprise/jakartaee8.api/external/binaries-list
@@ -0,0 +1,30 @@
+# 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.
+5983B3E05328AA17EFA9A5EA91F3DE474E60342F jakarta.platform:jakarta.jakartaee-api:8.0.0
+D8B6BC85DEEFD37299341F6B8D88938CCF12A9CE jakarta.platform:jakarta.jakartaee-web-api:8.0.0
+59EB84EE0D616332FF44ABA065F3888CF002CD2D jakarta.annotation:jakarta.annotation-api:1.3.5
+BDAA44A4CAAA9E14D5B466888F617306F6472F3A jakarta.faces:jakarta.faces-api:2.3.2
+C3267A1A8129BA26E1093E7B51AE296891C5FA17 jakarta.jms:jakarta.jms-api:2.0.3
+1CE0C37301D50810028A27F0B12E956CCE1F0C19 jakarta.mail:jakarta.mail-api:1.6.4
+BFC06BC961C1BE81B444F56754BF6D614B2CCD46 jakarta.resource:jakarta.resource-api:1.7.4
+DBBE7575F97EFD0B04F3A8455CF82C256C853055 jakarta.management.j2ee:jakarta.management.j2ee-api:1.1.4
+80D16C2D3226BD593B0CA7401D6883A11891997D jakarta.security.jacc:jakarta.security.jacc-api:1.6.1
+7A218C255AEBB81B526E3A3E580F6F30AFF4BC9C jakarta.enterprise.concurrent:jakarta.enterprise.concurrent-api:1.1.2
+254BD3BE5C68B45F488D3BAC47291AE3AC09EAA4 jakarta.batch:jakarta.batch-api:1.0.2
+ADB36570B632EC6317E22E945A7E51326C7B828D jakarta.enterprise.deploy:jakarta.enterprise.deploy-api:1.7.2
+17773ADDBD61C312FB881471ED20DA4A167667F6 jakarta.xml.registry:jakarta.xml.registry-api:1.0.10
+00B5C2578C5D7132CA691E52C44CE5416AE473EB jakarta.xml.rpc:jakarta.xml.rpc-api:1.1.4
diff --git a/enterprise/jakartaee8.api/external/jakarta.annotation-api-1.3.5-license.txt b/enterprise/jakartaee8.api/external/jakarta.annotation-api-1.3.5-license.txt
new file mode 100644
index 0000000..c144b775
--- /dev/null
+++ b/enterprise/jakartaee8.api/external/jakarta.annotation-api-1.3.5-license.txt
@@ -0,0 +1,94 @@
+Name: JakartaEE Annotation API 1.3.5
+Version: 1.3.5
+License: EPL-v20
+Description: JakartaEE Annotation API 1.3.5
+Origin: Eclipse Foundation (https://mvnrepository.com/artifact/jakarta.annotation/jakarta.annotation-api/1.3.5)
+
+
+Eclipse Public License - v 2.0
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. Definitions
+“Contribution” means:
+
+a) in the case of the initial Contributor, the initial content Distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+i) changes to the Program, and
+ii) additions to the Program; where such changes and/or additions to the Program originate from and are Distributed by that particular Contributor. A Contribution “originates” from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include changes or additions to the Program that are not Modified Works.
+“Contributor” means any person or entity that Distributes the Program.
+
+“Licensed Patents” mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+“Program” means the Contributions Distributed in accordance with this Agreement.
+
+“Recipient” means anyone who receives the Program under this Agreement or any Secondary License (as applicable), including Contributors.
+
+“Derivative Works” shall mean any work, whether in Source Code or other form, that is based on (or derived from) the Program and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship.
+
+“Modified Works” shall mean any work in Source Code or other form that results from an addition to, deletion from, or modification of the contents of the Program, including, for purposes of clarity any new file in Source Code form that contains any contents of the Program. Modified Works shall not include works that contain only declarations, interfaces, types, classes, structures, or files of the Program solely in each case in order to link to, bind by name, or subclass the Program or M [...]
+
+“Distribute” means the acts of a) distributing or b) making available in any manner that enables the transfer of a copy.
+
+“Source Code” means the form of a Program preferred for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+“Secondary License” means either the GNU General Public License, Version 2.0, or any later versions of that license, including any exceptions or additional permissions as identified by the initial Contributor.
+
+2. Grant of Rights
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, Distribute and sublicense the Contribution of such Contributor, if any, and such Derivative Works.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in Source Code or other form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution cause [...]
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted here [...]
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+
+e) Notwithstanding the terms of any Secondary License, no Contributor makes additional grants to any Recipient (other than those set forth in this Agreement) as a result of such Recipient's receipt of the Program under the terms of a Secondary License (if permitted under the terms of Section 3).
+
+3. Requirements
+3.1 If a Contributor Distributes the Program in any form, then:
+
+a) the Program must also be made available as Source Code, in accordance with section 3.2, and the Contributor must accompany the Program with a statement that the Source Code for the Program is available under this Agreement, and informs Recipients how to obtain it in a reasonable manner on or through a medium customarily used for software exchange; and
+
+b) the Contributor may Distribute the Program under a license different than this Agreement, provided that such license:
+
+i) effectively disclaims on behalf of all other Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+ii) effectively excludes on behalf of all other Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+iii) does not attempt to limit or alter the recipients' rights in the Source Code under section 3.2; and
+iv) requires any subsequent distribution of the Program by any party to be under a license that satisfies the requirements of this section 3.
+3.2 When the Program is Distributed as Source Code:
+
+a) it must be made available under this Agreement, or if the Program (i) is combined with other material in a separate file or files made available under a Secondary License, and (ii) the initial Contributor attached to the Source Code the notice described in Exhibit A of this Agreement, then the Program may be made available under the terms of such Secondary Licenses, and
+b) a copy of this Agreement must be included with each copy of the Program.
+3.3 Contributors may not remove or alter any copyright, patent, trademark, attribution notices, disclaimers of warranty, or limitations of liability (“notices”) contained within the Program from any copy of the Program which they Distribute, provided that Contributors may add their own appropriate notices.
+
+4. Commercial Distribution
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor (“Commercial Con [...]
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims  [...]
+
+5. No Warranty
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks assoc [...]
+
+6. Disclaimer of Liability
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EX [...]
+
+7. General
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Reci [...]
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the respons [...]
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. Nothing in this Agreement is intended to be enforceable by any entity that is not a Contributor or Recipient. No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+“This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), version(s), and exceptions or additional permissions here}.”
+
+Simply including a copy of this Agreement, including this Exhibit A is not sufficient to license the Source Code under Secondary Licenses.
+
+If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice.
+
+You may add additional accurate notices of copyright ownership.
+
diff --git a/enterprise/jakartaee8.api/external/jakarta.batch-api-1.0.2-license.txt b/enterprise/jakartaee8.api/external/jakarta.batch-api-1.0.2-license.txt
new file mode 100644
index 0000000..b364752
--- /dev/null
+++ b/enterprise/jakartaee8.api/external/jakarta.batch-api-1.0.2-license.txt
@@ -0,0 +1,93 @@
+Name: JakartaEE Batch API 1.0.2
+Version: 1.0.2
+License: EPL-v20
+Description: JakartaEE Batch API 1.0.2
+Origin: Eclipse Foundation (https://mvnrepository.com/artifact/jakarta.batch/jakarta.batch-api/1.0.2)
+
+
+Eclipse Public License - v 2.0
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. Definitions
+“Contribution” means:
+
+a) in the case of the initial Contributor, the initial content Distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+i) changes to the Program, and
+ii) additions to the Program; where such changes and/or additions to the Program originate from and are Distributed by that particular Contributor. A Contribution “originates” from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include changes or additions to the Program that are not Modified Works.
+“Contributor” means any person or entity that Distributes the Program.
+
+“Licensed Patents” mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+“Program” means the Contributions Distributed in accordance with this Agreement.
+
+“Recipient” means anyone who receives the Program under this Agreement or any Secondary License (as applicable), including Contributors.
+
+“Derivative Works” shall mean any work, whether in Source Code or other form, that is based on (or derived from) the Program and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship.
+
+“Modified Works” shall mean any work in Source Code or other form that results from an addition to, deletion from, or modification of the contents of the Program, including, for purposes of clarity any new file in Source Code form that contains any contents of the Program. Modified Works shall not include works that contain only declarations, interfaces, types, classes, structures, or files of the Program solely in each case in order to link to, bind by name, or subclass the Program or M [...]
+
+“Distribute” means the acts of a) distributing or b) making available in any manner that enables the transfer of a copy.
+
+“Source Code” means the form of a Program preferred for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+“Secondary License” means either the GNU General Public License, Version 2.0, or any later versions of that license, including any exceptions or additional permissions as identified by the initial Contributor.
+
+2. Grant of Rights
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, Distribute and sublicense the Contribution of such Contributor, if any, and such Derivative Works.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in Source Code or other form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution cause [...]
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted here [...]
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+
+e) Notwithstanding the terms of any Secondary License, no Contributor makes additional grants to any Recipient (other than those set forth in this Agreement) as a result of such Recipient's receipt of the Program under the terms of a Secondary License (if permitted under the terms of Section 3).
+
+3. Requirements
+3.1 If a Contributor Distributes the Program in any form, then:
+
+a) the Program must also be made available as Source Code, in accordance with section 3.2, and the Contributor must accompany the Program with a statement that the Source Code for the Program is available under this Agreement, and informs Recipients how to obtain it in a reasonable manner on or through a medium customarily used for software exchange; and
+
+b) the Contributor may Distribute the Program under a license different than this Agreement, provided that such license:
+
+i) effectively disclaims on behalf of all other Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+ii) effectively excludes on behalf of all other Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+iii) does not attempt to limit or alter the recipients' rights in the Source Code under section 3.2; and
+iv) requires any subsequent distribution of the Program by any party to be under a license that satisfies the requirements of this section 3.
+3.2 When the Program is Distributed as Source Code:
+
+a) it must be made available under this Agreement, or if the Program (i) is combined with other material in a separate file or files made available under a Secondary License, and (ii) the initial Contributor attached to the Source Code the notice described in Exhibit A of this Agreement, then the Program may be made available under the terms of such Secondary Licenses, and
+b) a copy of this Agreement must be included with each copy of the Program.
+3.3 Contributors may not remove or alter any copyright, patent, trademark, attribution notices, disclaimers of warranty, or limitations of liability (“notices”) contained within the Program from any copy of the Program which they Distribute, provided that Contributors may add their own appropriate notices.
+
+4. Commercial Distribution
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor (“Commercial Con [...]
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims  [...]
+
+5. No Warranty
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks assoc [...]
+
+6. Disclaimer of Liability
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EX [...]
+
+7. General
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Reci [...]
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the respons [...]
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. Nothing in this Agreement is intended to be enforceable by any entity that is not a Contributor or Recipient. No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+“This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), version(s), and exceptions or additional permissions here}.”
+
+Simply including a copy of this Agreement, including this Exhibit A is not sufficient to license the Source Code under Secondary Licenses.
+
+If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/enterprise/jakartaee8.api/external/jakarta.enterprise.concurrent-api-1.1.2-license.txt b/enterprise/jakartaee8.api/external/jakarta.enterprise.concurrent-api-1.1.2-license.txt
new file mode 100644
index 0000000..d50c35b
--- /dev/null
+++ b/enterprise/jakartaee8.api/external/jakarta.enterprise.concurrent-api-1.1.2-license.txt
@@ -0,0 +1,93 @@
+Name: JakartaEE Enterprise Concurrent API 1.1.2
+Version: 1.1.2
+License: EPL-v20
+Description: JakartaEE Enterprise Concurrent API 1.1.2
+Origin: Eclipse Foundation (https://mvnrepository.com/artifact/jakarta.enterprise.concurrent/jakarta.enterprise.concurrent-api/1.1.2)
+
+
+Eclipse Public License - v 2.0
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. Definitions
+“Contribution” means:
+
+a) in the case of the initial Contributor, the initial content Distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+i) changes to the Program, and
+ii) additions to the Program; where such changes and/or additions to the Program originate from and are Distributed by that particular Contributor. A Contribution “originates” from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include changes or additions to the Program that are not Modified Works.
+“Contributor” means any person or entity that Distributes the Program.
+
+“Licensed Patents” mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+“Program” means the Contributions Distributed in accordance with this Agreement.
+
+“Recipient” means anyone who receives the Program under this Agreement or any Secondary License (as applicable), including Contributors.
+
+“Derivative Works” shall mean any work, whether in Source Code or other form, that is based on (or derived from) the Program and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship.
+
+“Modified Works” shall mean any work in Source Code or other form that results from an addition to, deletion from, or modification of the contents of the Program, including, for purposes of clarity any new file in Source Code form that contains any contents of the Program. Modified Works shall not include works that contain only declarations, interfaces, types, classes, structures, or files of the Program solely in each case in order to link to, bind by name, or subclass the Program or M [...]
+
+“Distribute” means the acts of a) distributing or b) making available in any manner that enables the transfer of a copy.
+
+“Source Code” means the form of a Program preferred for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+“Secondary License” means either the GNU General Public License, Version 2.0, or any later versions of that license, including any exceptions or additional permissions as identified by the initial Contributor.
+
+2. Grant of Rights
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, Distribute and sublicense the Contribution of such Contributor, if any, and such Derivative Works.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in Source Code or other form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution cause [...]
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted here [...]
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+
+e) Notwithstanding the terms of any Secondary License, no Contributor makes additional grants to any Recipient (other than those set forth in this Agreement) as a result of such Recipient's receipt of the Program under the terms of a Secondary License (if permitted under the terms of Section 3).
+
+3. Requirements
+3.1 If a Contributor Distributes the Program in any form, then:
+
+a) the Program must also be made available as Source Code, in accordance with section 3.2, and the Contributor must accompany the Program with a statement that the Source Code for the Program is available under this Agreement, and informs Recipients how to obtain it in a reasonable manner on or through a medium customarily used for software exchange; and
+
+b) the Contributor may Distribute the Program under a license different than this Agreement, provided that such license:
+
+i) effectively disclaims on behalf of all other Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+ii) effectively excludes on behalf of all other Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+iii) does not attempt to limit or alter the recipients' rights in the Source Code under section 3.2; and
+iv) requires any subsequent distribution of the Program by any party to be under a license that satisfies the requirements of this section 3.
+3.2 When the Program is Distributed as Source Code:
+
+a) it must be made available under this Agreement, or if the Program (i) is combined with other material in a separate file or files made available under a Secondary License, and (ii) the initial Contributor attached to the Source Code the notice described in Exhibit A of this Agreement, then the Program may be made available under the terms of such Secondary Licenses, and
+b) a copy of this Agreement must be included with each copy of the Program.
+3.3 Contributors may not remove or alter any copyright, patent, trademark, attribution notices, disclaimers of warranty, or limitations of liability (“notices”) contained within the Program from any copy of the Program which they Distribute, provided that Contributors may add their own appropriate notices.
+
+4. Commercial Distribution
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor (“Commercial Con [...]
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims  [...]
+
+5. No Warranty
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks assoc [...]
+
+6. Disclaimer of Liability
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EX [...]
+
+7. General
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Reci [...]
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the respons [...]
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. Nothing in this Agreement is intended to be enforceable by any entity that is not a Contributor or Recipient. No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+“This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), version(s), and exceptions or additional permissions here}.”
+
+Simply including a copy of this Agreement, including this Exhibit A is not sufficient to license the Source Code under Secondary Licenses.
+
+If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/enterprise/jakartaee8.api/external/jakarta.enterprise.deploy-api-1.7.2-license.txt b/enterprise/jakartaee8.api/external/jakarta.enterprise.deploy-api-1.7.2-license.txt
new file mode 100644
index 0000000..f661851
--- /dev/null
+++ b/enterprise/jakartaee8.api/external/jakarta.enterprise.deploy-api-1.7.2-license.txt
@@ -0,0 +1,94 @@
+Name: Jakarta Enterprise Deploy API 1.7.2
+Version: 1.7.2
+License: EPL-v20
+Description: Jakarta Enterprise Deploy API 1.7.2
+Origin: Eclipse Foundation (https://mvnrepository.com/artifact/jakarta.enterprise.deploy/jakarta.enterprise.deploy-api/1.7.2)
+
+
+Eclipse Public License - v 2.0
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. Definitions
+“Contribution” means:
+
+a) in the case of the initial Contributor, the initial content Distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+i) changes to the Program, and
+ii) additions to the Program; where such changes and/or additions to the Program originate from and are Distributed by that particular Contributor. A Contribution “originates” from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include changes or additions to the Program that are not Modified Works.
+“Contributor” means any person or entity that Distributes the Program.
+
+“Licensed Patents” mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+“Program” means the Contributions Distributed in accordance with this Agreement.
+
+“Recipient” means anyone who receives the Program under this Agreement or any Secondary License (as applicable), including Contributors.
+
+“Derivative Works” shall mean any work, whether in Source Code or other form, that is based on (or derived from) the Program and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship.
+
+“Modified Works” shall mean any work in Source Code or other form that results from an addition to, deletion from, or modification of the contents of the Program, including, for purposes of clarity any new file in Source Code form that contains any contents of the Program. Modified Works shall not include works that contain only declarations, interfaces, types, classes, structures, or files of the Program solely in each case in order to link to, bind by name, or subclass the Program or M [...]
+
+“Distribute” means the acts of a) distributing or b) making available in any manner that enables the transfer of a copy.
+
+“Source Code” means the form of a Program preferred for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+“Secondary License” means either the GNU General Public License, Version 2.0, or any later versions of that license, including any exceptions or additional permissions as identified by the initial Contributor.
+
+2. Grant of Rights
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, Distribute and sublicense the Contribution of such Contributor, if any, and such Derivative Works.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in Source Code or other form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution cause [...]
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted here [...]
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+
+e) Notwithstanding the terms of any Secondary License, no Contributor makes additional grants to any Recipient (other than those set forth in this Agreement) as a result of such Recipient's receipt of the Program under the terms of a Secondary License (if permitted under the terms of Section 3).
+
+3. Requirements
+3.1 If a Contributor Distributes the Program in any form, then:
+
+a) the Program must also be made available as Source Code, in accordance with section 3.2, and the Contributor must accompany the Program with a statement that the Source Code for the Program is available under this Agreement, and informs Recipients how to obtain it in a reasonable manner on or through a medium customarily used for software exchange; and
+
+b) the Contributor may Distribute the Program under a license different than this Agreement, provided that such license:
+
+i) effectively disclaims on behalf of all other Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+ii) effectively excludes on behalf of all other Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+iii) does not attempt to limit or alter the recipients' rights in the Source Code under section 3.2; and
+iv) requires any subsequent distribution of the Program by any party to be under a license that satisfies the requirements of this section 3.
+3.2 When the Program is Distributed as Source Code:
+
+a) it must be made available under this Agreement, or if the Program (i) is combined with other material in a separate file or files made available under a Secondary License, and (ii) the initial Contributor attached to the Source Code the notice described in Exhibit A of this Agreement, then the Program may be made available under the terms of such Secondary Licenses, and
+b) a copy of this Agreement must be included with each copy of the Program.
+3.3 Contributors may not remove or alter any copyright, patent, trademark, attribution notices, disclaimers of warranty, or limitations of liability (“notices”) contained within the Program from any copy of the Program which they Distribute, provided that Contributors may add their own appropriate notices.
+
+4. Commercial Distribution
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor (“Commercial Con [...]
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims  [...]
+
+5. No Warranty
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks assoc [...]
+
+6. Disclaimer of Liability
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EX [...]
+
+7. General
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Reci [...]
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the respons [...]
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. Nothing in this Agreement is intended to be enforceable by any entity that is not a Contributor or Recipient. No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+“This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), version(s), and exceptions or additional permissions here}.”
+
+Simply including a copy of this Agreement, including this Exhibit A is not sufficient to license the Source Code under Secondary Licenses.
+
+If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice.
+
+You may add additional accurate notices of copyright ownership.
+
diff --git a/enterprise/jakartaee8.api/external/jakarta.faces-api-2.3.2-license.txt b/enterprise/jakartaee8.api/external/jakarta.faces-api-2.3.2-license.txt
new file mode 100644
index 0000000..743b520
--- /dev/null
+++ b/enterprise/jakartaee8.api/external/jakarta.faces-api-2.3.2-license.txt
@@ -0,0 +1,93 @@
+Name: Jakarta Faces API 2.3.2
+Version: 2.3.2
+License: EPL-v20
+Description: Jakarta Faces API 2.3.2
+Origin: Eclipse Foundation (https://mvnrepository.com/artifact/jakarta.faces/jakarta.faces-api/2.3.2)
+
+
+Eclipse Public License - v 2.0
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. Definitions
+“Contribution” means:
+
+a) in the case of the initial Contributor, the initial content Distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+i) changes to the Program, and
+ii) additions to the Program; where such changes and/or additions to the Program originate from and are Distributed by that particular Contributor. A Contribution “originates” from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include changes or additions to the Program that are not Modified Works.
+“Contributor” means any person or entity that Distributes the Program.
+
+“Licensed Patents” mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+“Program” means the Contributions Distributed in accordance with this Agreement.
+
+“Recipient” means anyone who receives the Program under this Agreement or any Secondary License (as applicable), including Contributors.
+
+“Derivative Works” shall mean any work, whether in Source Code or other form, that is based on (or derived from) the Program and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship.
+
+“Modified Works” shall mean any work in Source Code or other form that results from an addition to, deletion from, or modification of the contents of the Program, including, for purposes of clarity any new file in Source Code form that contains any contents of the Program. Modified Works shall not include works that contain only declarations, interfaces, types, classes, structures, or files of the Program solely in each case in order to link to, bind by name, or subclass the Program or M [...]
+
+“Distribute” means the acts of a) distributing or b) making available in any manner that enables the transfer of a copy.
+
+“Source Code” means the form of a Program preferred for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+“Secondary License” means either the GNU General Public License, Version 2.0, or any later versions of that license, including any exceptions or additional permissions as identified by the initial Contributor.
+
+2. Grant of Rights
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, Distribute and sublicense the Contribution of such Contributor, if any, and such Derivative Works.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in Source Code or other form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution cause [...]
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted here [...]
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+
+e) Notwithstanding the terms of any Secondary License, no Contributor makes additional grants to any Recipient (other than those set forth in this Agreement) as a result of such Recipient's receipt of the Program under the terms of a Secondary License (if permitted under the terms of Section 3).
+
+3. Requirements
+3.1 If a Contributor Distributes the Program in any form, then:
+
+a) the Program must also be made available as Source Code, in accordance with section 3.2, and the Contributor must accompany the Program with a statement that the Source Code for the Program is available under this Agreement, and informs Recipients how to obtain it in a reasonable manner on or through a medium customarily used for software exchange; and
+
+b) the Contributor may Distribute the Program under a license different than this Agreement, provided that such license:
+
+i) effectively disclaims on behalf of all other Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+ii) effectively excludes on behalf of all other Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+iii) does not attempt to limit or alter the recipients' rights in the Source Code under section 3.2; and
+iv) requires any subsequent distribution of the Program by any party to be under a license that satisfies the requirements of this section 3.
+3.2 When the Program is Distributed as Source Code:
+
+a) it must be made available under this Agreement, or if the Program (i) is combined with other material in a separate file or files made available under a Secondary License, and (ii) the initial Contributor attached to the Source Code the notice described in Exhibit A of this Agreement, then the Program may be made available under the terms of such Secondary Licenses, and
+b) a copy of this Agreement must be included with each copy of the Program.
+3.3 Contributors may not remove or alter any copyright, patent, trademark, attribution notices, disclaimers of warranty, or limitations of liability (“notices”) contained within the Program from any copy of the Program which they Distribute, provided that Contributors may add their own appropriate notices.
+
+4. Commercial Distribution
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor (“Commercial Con [...]
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims  [...]
+
+5. No Warranty
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks assoc [...]
+
+6. Disclaimer of Liability
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EX [...]
+
+7. General
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Reci [...]
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the respons [...]
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. Nothing in this Agreement is intended to be enforceable by any entity that is not a Contributor or Recipient. No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+“This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), version(s), and exceptions or additional permissions here}.”
+
+Simply including a copy of this Agreement, including this Exhibit A is not sufficient to license the Source Code under Secondary Licenses.
+
+If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/enterprise/jakartaee8.api/external/jakarta.jakartaee-api-8.0.0-license.txt b/enterprise/jakartaee8.api/external/jakarta.jakartaee-api-8.0.0-license.txt
new file mode 100644
index 0000000..29f4c93
--- /dev/null
+++ b/enterprise/jakartaee8.api/external/jakarta.jakartaee-api-8.0.0-license.txt
@@ -0,0 +1,93 @@
+Name: JakartaEE API 8.0.0
+Version: 8.0.0
+License: EPL-v20
+Description: JakartaEE API 8.0.0
+Origin: Eclipse Foundation (https://mvnrepository.com/artifact/jakarta.platform/jakarta.jakartaee-api/8.0.0)
+
+
+Eclipse Public License - v 2.0
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. Definitions
+“Contribution” means:
+
+a) in the case of the initial Contributor, the initial content Distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+i) changes to the Program, and
+ii) additions to the Program; where such changes and/or additions to the Program originate from and are Distributed by that particular Contributor. A Contribution “originates” from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include changes or additions to the Program that are not Modified Works.
+“Contributor” means any person or entity that Distributes the Program.
+
+“Licensed Patents” mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+“Program” means the Contributions Distributed in accordance with this Agreement.
+
+“Recipient” means anyone who receives the Program under this Agreement or any Secondary License (as applicable), including Contributors.
+
+“Derivative Works” shall mean any work, whether in Source Code or other form, that is based on (or derived from) the Program and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship.
+
+“Modified Works” shall mean any work in Source Code or other form that results from an addition to, deletion from, or modification of the contents of the Program, including, for purposes of clarity any new file in Source Code form that contains any contents of the Program. Modified Works shall not include works that contain only declarations, interfaces, types, classes, structures, or files of the Program solely in each case in order to link to, bind by name, or subclass the Program or M [...]
+
+“Distribute” means the acts of a) distributing or b) making available in any manner that enables the transfer of a copy.
+
+“Source Code” means the form of a Program preferred for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+“Secondary License” means either the GNU General Public License, Version 2.0, or any later versions of that license, including any exceptions or additional permissions as identified by the initial Contributor.
+
+2. Grant of Rights
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, Distribute and sublicense the Contribution of such Contributor, if any, and such Derivative Works.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in Source Code or other form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution cause [...]
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted here [...]
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+
+e) Notwithstanding the terms of any Secondary License, no Contributor makes additional grants to any Recipient (other than those set forth in this Agreement) as a result of such Recipient's receipt of the Program under the terms of a Secondary License (if permitted under the terms of Section 3).
+
+3. Requirements
+3.1 If a Contributor Distributes the Program in any form, then:
+
+a) the Program must also be made available as Source Code, in accordance with section 3.2, and the Contributor must accompany the Program with a statement that the Source Code for the Program is available under this Agreement, and informs Recipients how to obtain it in a reasonable manner on or through a medium customarily used for software exchange; and
+
+b) the Contributor may Distribute the Program under a license different than this Agreement, provided that such license:
+
+i) effectively disclaims on behalf of all other Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+ii) effectively excludes on behalf of all other Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+iii) does not attempt to limit or alter the recipients' rights in the Source Code under section 3.2; and
+iv) requires any subsequent distribution of the Program by any party to be under a license that satisfies the requirements of this section 3.
+3.2 When the Program is Distributed as Source Code:
+
+a) it must be made available under this Agreement, or if the Program (i) is combined with other material in a separate file or files made available under a Secondary License, and (ii) the initial Contributor attached to the Source Code the notice described in Exhibit A of this Agreement, then the Program may be made available under the terms of such Secondary Licenses, and
+b) a copy of this Agreement must be included with each copy of the Program.
+3.3 Contributors may not remove or alter any copyright, patent, trademark, attribution notices, disclaimers of warranty, or limitations of liability (“notices”) contained within the Program from any copy of the Program which they Distribute, provided that Contributors may add their own appropriate notices.
+
+4. Commercial Distribution
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor (“Commercial Con [...]
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims  [...]
+
+5. No Warranty
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks assoc [...]
+
+6. Disclaimer of Liability
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EX [...]
+
+7. General
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Reci [...]
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the respons [...]
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. Nothing in this Agreement is intended to be enforceable by any entity that is not a Contributor or Recipient. No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+“This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), version(s), and exceptions or additional permissions here}.”
+
+Simply including a copy of this Agreement, including this Exhibit A is not sufficient to license the Source Code under Secondary Licenses.
+
+If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/enterprise/jakartaee8.api/external/jakarta.jakartaee-web-api-8.0.0-license.txt b/enterprise/jakartaee8.api/external/jakarta.jakartaee-web-api-8.0.0-license.txt
new file mode 100644
index 0000000..49c4f1e
--- /dev/null
+++ b/enterprise/jakartaee8.api/external/jakarta.jakartaee-web-api-8.0.0-license.txt
@@ -0,0 +1,93 @@
+Name: JakartaEE Web API 8.0.0
+Version: 8.0.0
+License: EPL-v20
+Description: JakartaEE Web API 8.0.0
+Origin: Eclipse Foundation (https://mvnrepository.com/artifact/jakarta.platform/jakarta.jakartaee-web-api/8.0.0)
+
+
+Eclipse Public License - v 2.0
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. Definitions
+“Contribution” means:
+
+a) in the case of the initial Contributor, the initial content Distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+i) changes to the Program, and
+ii) additions to the Program; where such changes and/or additions to the Program originate from and are Distributed by that particular Contributor. A Contribution “originates” from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include changes or additions to the Program that are not Modified Works.
+“Contributor” means any person or entity that Distributes the Program.
+
+“Licensed Patents” mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+“Program” means the Contributions Distributed in accordance with this Agreement.
+
+“Recipient” means anyone who receives the Program under this Agreement or any Secondary License (as applicable), including Contributors.
+
+“Derivative Works” shall mean any work, whether in Source Code or other form, that is based on (or derived from) the Program and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship.
+
+“Modified Works” shall mean any work in Source Code or other form that results from an addition to, deletion from, or modification of the contents of the Program, including, for purposes of clarity any new file in Source Code form that contains any contents of the Program. Modified Works shall not include works that contain only declarations, interfaces, types, classes, structures, or files of the Program solely in each case in order to link to, bind by name, or subclass the Program or M [...]
+
+“Distribute” means the acts of a) distributing or b) making available in any manner that enables the transfer of a copy.
+
+“Source Code” means the form of a Program preferred for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+“Secondary License” means either the GNU General Public License, Version 2.0, or any later versions of that license, including any exceptions or additional permissions as identified by the initial Contributor.
+
+2. Grant of Rights
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, Distribute and sublicense the Contribution of such Contributor, if any, and such Derivative Works.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in Source Code or other form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution cause [...]
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted here [...]
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+
+e) Notwithstanding the terms of any Secondary License, no Contributor makes additional grants to any Recipient (other than those set forth in this Agreement) as a result of such Recipient's receipt of the Program under the terms of a Secondary License (if permitted under the terms of Section 3).
+
+3. Requirements
+3.1 If a Contributor Distributes the Program in any form, then:
+
+a) the Program must also be made available as Source Code, in accordance with section 3.2, and the Contributor must accompany the Program with a statement that the Source Code for the Program is available under this Agreement, and informs Recipients how to obtain it in a reasonable manner on or through a medium customarily used for software exchange; and
+
+b) the Contributor may Distribute the Program under a license different than this Agreement, provided that such license:
+
+i) effectively disclaims on behalf of all other Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+ii) effectively excludes on behalf of all other Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+iii) does not attempt to limit or alter the recipients' rights in the Source Code under section 3.2; and
+iv) requires any subsequent distribution of the Program by any party to be under a license that satisfies the requirements of this section 3.
+3.2 When the Program is Distributed as Source Code:
+
+a) it must be made available under this Agreement, or if the Program (i) is combined with other material in a separate file or files made available under a Secondary License, and (ii) the initial Contributor attached to the Source Code the notice described in Exhibit A of this Agreement, then the Program may be made available under the terms of such Secondary Licenses, and
+b) a copy of this Agreement must be included with each copy of the Program.
+3.3 Contributors may not remove or alter any copyright, patent, trademark, attribution notices, disclaimers of warranty, or limitations of liability (“notices”) contained within the Program from any copy of the Program which they Distribute, provided that Contributors may add their own appropriate notices.
+
+4. Commercial Distribution
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor (“Commercial Con [...]
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims  [...]
+
+5. No Warranty
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks assoc [...]
+
+6. Disclaimer of Liability
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EX [...]
+
+7. General
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Reci [...]
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the respons [...]
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. Nothing in this Agreement is intended to be enforceable by any entity that is not a Contributor or Recipient. No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+“This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), version(s), and exceptions or additional permissions here}.”
+
+Simply including a copy of this Agreement, including this Exhibit A is not sufficient to license the Source Code under Secondary Licenses.
+
+If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/enterprise/jakartaee8.api/external/jakarta.jms-api-2.0.3-license.txt b/enterprise/jakartaee8.api/external/jakarta.jms-api-2.0.3-license.txt
new file mode 100644
index 0000000..a98d6f3
--- /dev/null
+++ b/enterprise/jakartaee8.api/external/jakarta.jms-api-2.0.3-license.txt
@@ -0,0 +1,93 @@
+Name: Jakarta JMS API 2.0.3
+Version: 2.0.3
+License: EPL-v20
+Description: Jakarta JMS API 2.0.3
+Origin: Eclipse Foundation (https://mvnrepository.com/artifact/jakarta.jms/jakarta.jms-api/2.0.3)
+
+
+Eclipse Public License - v 2.0
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. Definitions
+“Contribution” means:
+
+a) in the case of the initial Contributor, the initial content Distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+i) changes to the Program, and
+ii) additions to the Program; where such changes and/or additions to the Program originate from and are Distributed by that particular Contributor. A Contribution “originates” from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include changes or additions to the Program that are not Modified Works.
+“Contributor” means any person or entity that Distributes the Program.
+
+“Licensed Patents” mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+“Program” means the Contributions Distributed in accordance with this Agreement.
+
+“Recipient” means anyone who receives the Program under this Agreement or any Secondary License (as applicable), including Contributors.
+
+“Derivative Works” shall mean any work, whether in Source Code or other form, that is based on (or derived from) the Program and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship.
+
+“Modified Works” shall mean any work in Source Code or other form that results from an addition to, deletion from, or modification of the contents of the Program, including, for purposes of clarity any new file in Source Code form that contains any contents of the Program. Modified Works shall not include works that contain only declarations, interfaces, types, classes, structures, or files of the Program solely in each case in order to link to, bind by name, or subclass the Program or M [...]
+
+“Distribute” means the acts of a) distributing or b) making available in any manner that enables the transfer of a copy.
+
+“Source Code” means the form of a Program preferred for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+“Secondary License” means either the GNU General Public License, Version 2.0, or any later versions of that license, including any exceptions or additional permissions as identified by the initial Contributor.
+
+2. Grant of Rights
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, Distribute and sublicense the Contribution of such Contributor, if any, and such Derivative Works.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in Source Code or other form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution cause [...]
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted here [...]
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+
+e) Notwithstanding the terms of any Secondary License, no Contributor makes additional grants to any Recipient (other than those set forth in this Agreement) as a result of such Recipient's receipt of the Program under the terms of a Secondary License (if permitted under the terms of Section 3).
+
+3. Requirements
+3.1 If a Contributor Distributes the Program in any form, then:
+
+a) the Program must also be made available as Source Code, in accordance with section 3.2, and the Contributor must accompany the Program with a statement that the Source Code for the Program is available under this Agreement, and informs Recipients how to obtain it in a reasonable manner on or through a medium customarily used for software exchange; and
+
+b) the Contributor may Distribute the Program under a license different than this Agreement, provided that such license:
+
+i) effectively disclaims on behalf of all other Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+ii) effectively excludes on behalf of all other Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+iii) does not attempt to limit or alter the recipients' rights in the Source Code under section 3.2; and
+iv) requires any subsequent distribution of the Program by any party to be under a license that satisfies the requirements of this section 3.
+3.2 When the Program is Distributed as Source Code:
+
+a) it must be made available under this Agreement, or if the Program (i) is combined with other material in a separate file or files made available under a Secondary License, and (ii) the initial Contributor attached to the Source Code the notice described in Exhibit A of this Agreement, then the Program may be made available under the terms of such Secondary Licenses, and
+b) a copy of this Agreement must be included with each copy of the Program.
+3.3 Contributors may not remove or alter any copyright, patent, trademark, attribution notices, disclaimers of warranty, or limitations of liability (“notices”) contained within the Program from any copy of the Program which they Distribute, provided that Contributors may add their own appropriate notices.
+
+4. Commercial Distribution
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor (“Commercial Con [...]
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims  [...]
+
+5. No Warranty
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks assoc [...]
+
+6. Disclaimer of Liability
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EX [...]
+
+7. General
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Reci [...]
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the respons [...]
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. Nothing in this Agreement is intended to be enforceable by any entity that is not a Contributor or Recipient. No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+“This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), version(s), and exceptions or additional permissions here}.”
+
+Simply including a copy of this Agreement, including this Exhibit A is not sufficient to license the Source Code under Secondary Licenses.
+
+If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/enterprise/jakartaee8.api/external/jakarta.mail-api-1.6.4-license.txt b/enterprise/jakartaee8.api/external/jakarta.mail-api-1.6.4-license.txt
new file mode 100644
index 0000000..444cd0d
--- /dev/null
+++ b/enterprise/jakartaee8.api/external/jakarta.mail-api-1.6.4-license.txt
@@ -0,0 +1,93 @@
+Name: Jakarta Mail API 1.6.4
+Version: 1.6.4
+License: EPL-v20
+Description: Jakarta Mail API 1.6.4
+Origin: Eclipse Foundation (https://mvnrepository.com/artifact/jakarta.mail/jakarta.mail-api/1.6.4)
+
+
+Eclipse Public License - v 2.0
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. Definitions
+“Contribution” means:
+
+a) in the case of the initial Contributor, the initial content Distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+i) changes to the Program, and
+ii) additions to the Program; where such changes and/or additions to the Program originate from and are Distributed by that particular Contributor. A Contribution “originates” from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include changes or additions to the Program that are not Modified Works.
+“Contributor” means any person or entity that Distributes the Program.
+
+“Licensed Patents” mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+“Program” means the Contributions Distributed in accordance with this Agreement.
+
+“Recipient” means anyone who receives the Program under this Agreement or any Secondary License (as applicable), including Contributors.
+
+“Derivative Works” shall mean any work, whether in Source Code or other form, that is based on (or derived from) the Program and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship.
+
+“Modified Works” shall mean any work in Source Code or other form that results from an addition to, deletion from, or modification of the contents of the Program, including, for purposes of clarity any new file in Source Code form that contains any contents of the Program. Modified Works shall not include works that contain only declarations, interfaces, types, classes, structures, or files of the Program solely in each case in order to link to, bind by name, or subclass the Program or M [...]
+
+“Distribute” means the acts of a) distributing or b) making available in any manner that enables the transfer of a copy.
+
+“Source Code” means the form of a Program preferred for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+“Secondary License” means either the GNU General Public License, Version 2.0, or any later versions of that license, including any exceptions or additional permissions as identified by the initial Contributor.
+
+2. Grant of Rights
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, Distribute and sublicense the Contribution of such Contributor, if any, and such Derivative Works.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in Source Code or other form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution cause [...]
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted here [...]
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+
+e) Notwithstanding the terms of any Secondary License, no Contributor makes additional grants to any Recipient (other than those set forth in this Agreement) as a result of such Recipient's receipt of the Program under the terms of a Secondary License (if permitted under the terms of Section 3).
+
+3. Requirements
+3.1 If a Contributor Distributes the Program in any form, then:
+
+a) the Program must also be made available as Source Code, in accordance with section 3.2, and the Contributor must accompany the Program with a statement that the Source Code for the Program is available under this Agreement, and informs Recipients how to obtain it in a reasonable manner on or through a medium customarily used for software exchange; and
+
+b) the Contributor may Distribute the Program under a license different than this Agreement, provided that such license:
+
+i) effectively disclaims on behalf of all other Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+ii) effectively excludes on behalf of all other Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+iii) does not attempt to limit or alter the recipients' rights in the Source Code under section 3.2; and
+iv) requires any subsequent distribution of the Program by any party to be under a license that satisfies the requirements of this section 3.
+3.2 When the Program is Distributed as Source Code:
+
+a) it must be made available under this Agreement, or if the Program (i) is combined with other material in a separate file or files made available under a Secondary License, and (ii) the initial Contributor attached to the Source Code the notice described in Exhibit A of this Agreement, then the Program may be made available under the terms of such Secondary Licenses, and
+b) a copy of this Agreement must be included with each copy of the Program.
+3.3 Contributors may not remove or alter any copyright, patent, trademark, attribution notices, disclaimers of warranty, or limitations of liability (“notices”) contained within the Program from any copy of the Program which they Distribute, provided that Contributors may add their own appropriate notices.
+
+4. Commercial Distribution
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor (“Commercial Con [...]
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims  [...]
+
+5. No Warranty
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks assoc [...]
+
+6. Disclaimer of Liability
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EX [...]
+
+7. General
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Reci [...]
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the respons [...]
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. Nothing in this Agreement is intended to be enforceable by any entity that is not a Contributor or Recipient. No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+“This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), version(s), and exceptions or additional permissions here}.”
+
+Simply including a copy of this Agreement, including this Exhibit A is not sufficient to license the Source Code under Secondary Licenses.
+
+If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/enterprise/jakartaee8.api/external/jakarta.management.j2ee-api-1.1.4-license.txt b/enterprise/jakartaee8.api/external/jakarta.management.j2ee-api-1.1.4-license.txt
new file mode 100644
index 0000000..4ff899e
--- /dev/null
+++ b/enterprise/jakartaee8.api/external/jakarta.management.j2ee-api-1.1.4-license.txt
@@ -0,0 +1,93 @@
+Name: Jakarta Management API 1.1.4
+Version: 1.1.4
+License: EPL-v20
+Description: Jakarta Management API 1.1.4
+Origin: Eclipse Foundation (https://mvnrepository.com/artifact/jakarta.management.j2ee/jakarta.management.j2ee-api/1.1.4)
+
+
+Eclipse Public License - v 2.0
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. Definitions
+“Contribution” means:
+
+a) in the case of the initial Contributor, the initial content Distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+i) changes to the Program, and
+ii) additions to the Program; where such changes and/or additions to the Program originate from and are Distributed by that particular Contributor. A Contribution “originates” from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include changes or additions to the Program that are not Modified Works.
+“Contributor” means any person or entity that Distributes the Program.
+
+“Licensed Patents” mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+“Program” means the Contributions Distributed in accordance with this Agreement.
+
+“Recipient” means anyone who receives the Program under this Agreement or any Secondary License (as applicable), including Contributors.
+
+“Derivative Works” shall mean any work, whether in Source Code or other form, that is based on (or derived from) the Program and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship.
+
+“Modified Works” shall mean any work in Source Code or other form that results from an addition to, deletion from, or modification of the contents of the Program, including, for purposes of clarity any new file in Source Code form that contains any contents of the Program. Modified Works shall not include works that contain only declarations, interfaces, types, classes, structures, or files of the Program solely in each case in order to link to, bind by name, or subclass the Program or M [...]
+
+“Distribute” means the acts of a) distributing or b) making available in any manner that enables the transfer of a copy.
+
+“Source Code” means the form of a Program preferred for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+“Secondary License” means either the GNU General Public License, Version 2.0, or any later versions of that license, including any exceptions or additional permissions as identified by the initial Contributor.
+
+2. Grant of Rights
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, Distribute and sublicense the Contribution of such Contributor, if any, and such Derivative Works.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in Source Code or other form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution cause [...]
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted here [...]
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+
+e) Notwithstanding the terms of any Secondary License, no Contributor makes additional grants to any Recipient (other than those set forth in this Agreement) as a result of such Recipient's receipt of the Program under the terms of a Secondary License (if permitted under the terms of Section 3).
+
+3. Requirements
+3.1 If a Contributor Distributes the Program in any form, then:
+
+a) the Program must also be made available as Source Code, in accordance with section 3.2, and the Contributor must accompany the Program with a statement that the Source Code for the Program is available under this Agreement, and informs Recipients how to obtain it in a reasonable manner on or through a medium customarily used for software exchange; and
+
+b) the Contributor may Distribute the Program under a license different than this Agreement, provided that such license:
+
+i) effectively disclaims on behalf of all other Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+ii) effectively excludes on behalf of all other Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+iii) does not attempt to limit or alter the recipients' rights in the Source Code under section 3.2; and
+iv) requires any subsequent distribution of the Program by any party to be under a license that satisfies the requirements of this section 3.
+3.2 When the Program is Distributed as Source Code:
+
+a) it must be made available under this Agreement, or if the Program (i) is combined with other material in a separate file or files made available under a Secondary License, and (ii) the initial Contributor attached to the Source Code the notice described in Exhibit A of this Agreement, then the Program may be made available under the terms of such Secondary Licenses, and
+b) a copy of this Agreement must be included with each copy of the Program.
+3.3 Contributors may not remove or alter any copyright, patent, trademark, attribution notices, disclaimers of warranty, or limitations of liability (“notices”) contained within the Program from any copy of the Program which they Distribute, provided that Contributors may add their own appropriate notices.
+
+4. Commercial Distribution
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor (“Commercial Con [...]
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims  [...]
+
+5. No Warranty
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks assoc [...]
+
+6. Disclaimer of Liability
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EX [...]
+
+7. General
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Reci [...]
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the respons [...]
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. Nothing in this Agreement is intended to be enforceable by any entity that is not a Contributor or Recipient. No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+“This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), version(s), and exceptions or additional permissions here}.”
+
+Simply including a copy of this Agreement, including this Exhibit A is not sufficient to license the Source Code under Secondary Licenses.
+
+If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/enterprise/jakartaee8.api/external/jakarta.resource-api-1.7.4-license.txt b/enterprise/jakartaee8.api/external/jakarta.resource-api-1.7.4-license.txt
new file mode 100644
index 0000000..f67c58d
--- /dev/null
+++ b/enterprise/jakartaee8.api/external/jakarta.resource-api-1.7.4-license.txt
@@ -0,0 +1,93 @@
+Name: Jakarta Resource API 1.7.4
+Version: 1.7.4
+License: EPL-v20
+Description: Jakarta Resource API 1.7.4
+Origin: Eclipse Foundation (https://mvnrepository.com/artifact/jakarta.mail/jakarta.mail-api/1.6.4)
+
+
+Eclipse Public License - v 2.0
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. Definitions
+“Contribution” means:
+
+a) in the case of the initial Contributor, the initial content Distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+i) changes to the Program, and
+ii) additions to the Program; where such changes and/or additions to the Program originate from and are Distributed by that particular Contributor. A Contribution “originates” from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include changes or additions to the Program that are not Modified Works.
+“Contributor” means any person or entity that Distributes the Program.
+
+“Licensed Patents” mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+“Program” means the Contributions Distributed in accordance with this Agreement.
+
+“Recipient” means anyone who receives the Program under this Agreement or any Secondary License (as applicable), including Contributors.
+
+“Derivative Works” shall mean any work, whether in Source Code or other form, that is based on (or derived from) the Program and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship.
+
+“Modified Works” shall mean any work in Source Code or other form that results from an addition to, deletion from, or modification of the contents of the Program, including, for purposes of clarity any new file in Source Code form that contains any contents of the Program. Modified Works shall not include works that contain only declarations, interfaces, types, classes, structures, or files of the Program solely in each case in order to link to, bind by name, or subclass the Program or M [...]
+
+“Distribute” means the acts of a) distributing or b) making available in any manner that enables the transfer of a copy.
+
+“Source Code” means the form of a Program preferred for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+“Secondary License” means either the GNU General Public License, Version 2.0, or any later versions of that license, including any exceptions or additional permissions as identified by the initial Contributor.
+
+2. Grant of Rights
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, Distribute and sublicense the Contribution of such Contributor, if any, and such Derivative Works.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in Source Code or other form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution cause [...]
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted here [...]
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+
+e) Notwithstanding the terms of any Secondary License, no Contributor makes additional grants to any Recipient (other than those set forth in this Agreement) as a result of such Recipient's receipt of the Program under the terms of a Secondary License (if permitted under the terms of Section 3).
+
+3. Requirements
+3.1 If a Contributor Distributes the Program in any form, then:
+
+a) the Program must also be made available as Source Code, in accordance with section 3.2, and the Contributor must accompany the Program with a statement that the Source Code for the Program is available under this Agreement, and informs Recipients how to obtain it in a reasonable manner on or through a medium customarily used for software exchange; and
+
+b) the Contributor may Distribute the Program under a license different than this Agreement, provided that such license:
+
+i) effectively disclaims on behalf of all other Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+ii) effectively excludes on behalf of all other Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+iii) does not attempt to limit or alter the recipients' rights in the Source Code under section 3.2; and
+iv) requires any subsequent distribution of the Program by any party to be under a license that satisfies the requirements of this section 3.
+3.2 When the Program is Distributed as Source Code:
+
+a) it must be made available under this Agreement, or if the Program (i) is combined with other material in a separate file or files made available under a Secondary License, and (ii) the initial Contributor attached to the Source Code the notice described in Exhibit A of this Agreement, then the Program may be made available under the terms of such Secondary Licenses, and
+b) a copy of this Agreement must be included with each copy of the Program.
+3.3 Contributors may not remove or alter any copyright, patent, trademark, attribution notices, disclaimers of warranty, or limitations of liability (“notices”) contained within the Program from any copy of the Program which they Distribute, provided that Contributors may add their own appropriate notices.
+
+4. Commercial Distribution
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor (“Commercial Con [...]
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims  [...]
+
+5. No Warranty
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks assoc [...]
+
+6. Disclaimer of Liability
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EX [...]
+
+7. General
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Reci [...]
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the respons [...]
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. Nothing in this Agreement is intended to be enforceable by any entity that is not a Contributor or Recipient. No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+“This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), version(s), and exceptions or additional permissions here}.”
+
+Simply including a copy of this Agreement, including this Exhibit A is not sufficient to license the Source Code under Secondary Licenses.
+
+If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/enterprise/jakartaee8.api/external/jakarta.security.jacc-api-1.6.1-license.txt b/enterprise/jakartaee8.api/external/jakarta.security.jacc-api-1.6.1-license.txt
new file mode 100644
index 0000000..7669c94
--- /dev/null
+++ b/enterprise/jakartaee8.api/external/jakarta.security.jacc-api-1.6.1-license.txt
@@ -0,0 +1,93 @@
+Name: Jakarta Security JACC API 1.6.1
+Version: 1.6.1
+License: EPL-v20
+Description: Jakarta Security JACC API 1.6.1
+Origin: Eclipse Foundation (https://mvnrepository.com/artifact/jakarta.security.jacc/jakarta.security.jacc-api/1.6.1)
+
+
+Eclipse Public License - v 2.0
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. Definitions
+“Contribution” means:
+
+a) in the case of the initial Contributor, the initial content Distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+i) changes to the Program, and
+ii) additions to the Program; where such changes and/or additions to the Program originate from and are Distributed by that particular Contributor. A Contribution “originates” from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include changes or additions to the Program that are not Modified Works.
+“Contributor” means any person or entity that Distributes the Program.
+
+“Licensed Patents” mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+“Program” means the Contributions Distributed in accordance with this Agreement.
+
+“Recipient” means anyone who receives the Program under this Agreement or any Secondary License (as applicable), including Contributors.
+
+“Derivative Works” shall mean any work, whether in Source Code or other form, that is based on (or derived from) the Program and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship.
+
+“Modified Works” shall mean any work in Source Code or other form that results from an addition to, deletion from, or modification of the contents of the Program, including, for purposes of clarity any new file in Source Code form that contains any contents of the Program. Modified Works shall not include works that contain only declarations, interfaces, types, classes, structures, or files of the Program solely in each case in order to link to, bind by name, or subclass the Program or M [...]
+
+“Distribute” means the acts of a) distributing or b) making available in any manner that enables the transfer of a copy.
+
+“Source Code” means the form of a Program preferred for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+“Secondary License” means either the GNU General Public License, Version 2.0, or any later versions of that license, including any exceptions or additional permissions as identified by the initial Contributor.
+
+2. Grant of Rights
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, Distribute and sublicense the Contribution of such Contributor, if any, and such Derivative Works.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in Source Code or other form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution cause [...]
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted here [...]
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+
+e) Notwithstanding the terms of any Secondary License, no Contributor makes additional grants to any Recipient (other than those set forth in this Agreement) as a result of such Recipient's receipt of the Program under the terms of a Secondary License (if permitted under the terms of Section 3).
+
+3. Requirements
+3.1 If a Contributor Distributes the Program in any form, then:
+
+a) the Program must also be made available as Source Code, in accordance with section 3.2, and the Contributor must accompany the Program with a statement that the Source Code for the Program is available under this Agreement, and informs Recipients how to obtain it in a reasonable manner on or through a medium customarily used for software exchange; and
+
+b) the Contributor may Distribute the Program under a license different than this Agreement, provided that such license:
+
+i) effectively disclaims on behalf of all other Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+ii) effectively excludes on behalf of all other Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+iii) does not attempt to limit or alter the recipients' rights in the Source Code under section 3.2; and
+iv) requires any subsequent distribution of the Program by any party to be under a license that satisfies the requirements of this section 3.
+3.2 When the Program is Distributed as Source Code:
+
+a) it must be made available under this Agreement, or if the Program (i) is combined with other material in a separate file or files made available under a Secondary License, and (ii) the initial Contributor attached to the Source Code the notice described in Exhibit A of this Agreement, then the Program may be made available under the terms of such Secondary Licenses, and
+b) a copy of this Agreement must be included with each copy of the Program.
+3.3 Contributors may not remove or alter any copyright, patent, trademark, attribution notices, disclaimers of warranty, or limitations of liability (“notices”) contained within the Program from any copy of the Program which they Distribute, provided that Contributors may add their own appropriate notices.
+
+4. Commercial Distribution
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor (“Commercial Con [...]
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims  [...]
+
+5. No Warranty
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks assoc [...]
+
+6. Disclaimer of Liability
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EX [...]
+
+7. General
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Reci [...]
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the respons [...]
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. Nothing in this Agreement is intended to be enforceable by any entity that is not a Contributor or Recipient. No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+“This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), version(s), and exceptions or additional permissions here}.”
+
+Simply including a copy of this Agreement, including this Exhibit A is not sufficient to license the Source Code under Secondary Licenses.
+
+If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/enterprise/jakartaee8.api/external/jakarta.xml.registry-api-1.0.10-license.txt b/enterprise/jakartaee8.api/external/jakarta.xml.registry-api-1.0.10-license.txt
new file mode 100644
index 0000000..759a85d
--- /dev/null
+++ b/enterprise/jakartaee8.api/external/jakarta.xml.registry-api-1.0.10-license.txt
@@ -0,0 +1,93 @@
+Name: Jakarta XML Registry API 1.0.10
+Version: 1.0.10
+License: EPL-v20
+Description: Jakarta XML Registry API 1.0.10
+Origin: Eclipse Foundation (https://mvnrepository.com/artifact/jakarta.xml.registry/jakarta.xml.registry-api/1.0.10)
+
+
+Eclipse Public License - v 2.0
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. Definitions
+“Contribution” means:
+
+a) in the case of the initial Contributor, the initial content Distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+i) changes to the Program, and
+ii) additions to the Program; where such changes and/or additions to the Program originate from and are Distributed by that particular Contributor. A Contribution “originates” from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include changes or additions to the Program that are not Modified Works.
+“Contributor” means any person or entity that Distributes the Program.
+
+“Licensed Patents” mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+“Program” means the Contributions Distributed in accordance with this Agreement.
+
+“Recipient” means anyone who receives the Program under this Agreement or any Secondary License (as applicable), including Contributors.
+
+“Derivative Works” shall mean any work, whether in Source Code or other form, that is based on (or derived from) the Program and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship.
+
+“Modified Works” shall mean any work in Source Code or other form that results from an addition to, deletion from, or modification of the contents of the Program, including, for purposes of clarity any new file in Source Code form that contains any contents of the Program. Modified Works shall not include works that contain only declarations, interfaces, types, classes, structures, or files of the Program solely in each case in order to link to, bind by name, or subclass the Program or M [...]
+
+“Distribute” means the acts of a) distributing or b) making available in any manner that enables the transfer of a copy.
+
+“Source Code” means the form of a Program preferred for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+“Secondary License” means either the GNU General Public License, Version 2.0, or any later versions of that license, including any exceptions or additional permissions as identified by the initial Contributor.
+
+2. Grant of Rights
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, Distribute and sublicense the Contribution of such Contributor, if any, and such Derivative Works.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in Source Code or other form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution cause [...]
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted here [...]
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+
+e) Notwithstanding the terms of any Secondary License, no Contributor makes additional grants to any Recipient (other than those set forth in this Agreement) as a result of such Recipient's receipt of the Program under the terms of a Secondary License (if permitted under the terms of Section 3).
+
+3. Requirements
+3.1 If a Contributor Distributes the Program in any form, then:
+
+a) the Program must also be made available as Source Code, in accordance with section 3.2, and the Contributor must accompany the Program with a statement that the Source Code for the Program is available under this Agreement, and informs Recipients how to obtain it in a reasonable manner on or through a medium customarily used for software exchange; and
+
+b) the Contributor may Distribute the Program under a license different than this Agreement, provided that such license:
+
+i) effectively disclaims on behalf of all other Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+ii) effectively excludes on behalf of all other Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+iii) does not attempt to limit or alter the recipients' rights in the Source Code under section 3.2; and
+iv) requires any subsequent distribution of the Program by any party to be under a license that satisfies the requirements of this section 3.
+3.2 When the Program is Distributed as Source Code:
+
+a) it must be made available under this Agreement, or if the Program (i) is combined with other material in a separate file or files made available under a Secondary License, and (ii) the initial Contributor attached to the Source Code the notice described in Exhibit A of this Agreement, then the Program may be made available under the terms of such Secondary Licenses, and
+b) a copy of this Agreement must be included with each copy of the Program.
+3.3 Contributors may not remove or alter any copyright, patent, trademark, attribution notices, disclaimers of warranty, or limitations of liability (“notices”) contained within the Program from any copy of the Program which they Distribute, provided that Contributors may add their own appropriate notices.
+
+4. Commercial Distribution
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor (“Commercial Con [...]
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims  [...]
+
+5. No Warranty
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks assoc [...]
+
+6. Disclaimer of Liability
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EX [...]
+
+7. General
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Reci [...]
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the respons [...]
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. Nothing in this Agreement is intended to be enforceable by any entity that is not a Contributor or Recipient. No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+“This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), version(s), and exceptions or additional permissions here}.”
+
+Simply including a copy of this Agreement, including this Exhibit A is not sufficient to license the Source Code under Secondary Licenses.
+
+If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/enterprise/jakartaee8.api/external/jakarta.xml.rpc-api-1.1.4-license.txt b/enterprise/jakartaee8.api/external/jakarta.xml.rpc-api-1.1.4-license.txt
new file mode 100644
index 0000000..5a2ef66
--- /dev/null
+++ b/enterprise/jakartaee8.api/external/jakarta.xml.rpc-api-1.1.4-license.txt
@@ -0,0 +1,93 @@
+Name: Jakarta XML RPC API 1.1.4
+Version: 1.1.4
+License: EPL-v20
+Description: Jakarta XML RPC API 1.1.4
+Origin: Eclipse Foundation (https://mvnrepository.com/artifact/jakarta.mail/jakarta.mail-api/1.6.4)
+
+
+Eclipse Public License - v 2.0
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. Definitions
+“Contribution” means:
+
+a) in the case of the initial Contributor, the initial content Distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+i) changes to the Program, and
+ii) additions to the Program; where such changes and/or additions to the Program originate from and are Distributed by that particular Contributor. A Contribution “originates” from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include changes or additions to the Program that are not Modified Works.
+“Contributor” means any person or entity that Distributes the Program.
+
+“Licensed Patents” mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+“Program” means the Contributions Distributed in accordance with this Agreement.
+
+“Recipient” means anyone who receives the Program under this Agreement or any Secondary License (as applicable), including Contributors.
+
+“Derivative Works” shall mean any work, whether in Source Code or other form, that is based on (or derived from) the Program and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship.
+
+“Modified Works” shall mean any work in Source Code or other form that results from an addition to, deletion from, or modification of the contents of the Program, including, for purposes of clarity any new file in Source Code form that contains any contents of the Program. Modified Works shall not include works that contain only declarations, interfaces, types, classes, structures, or files of the Program solely in each case in order to link to, bind by name, or subclass the Program or M [...]
+
+“Distribute” means the acts of a) distributing or b) making available in any manner that enables the transfer of a copy.
+
+“Source Code” means the form of a Program preferred for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+“Secondary License” means either the GNU General Public License, Version 2.0, or any later versions of that license, including any exceptions or additional permissions as identified by the initial Contributor.
+
+2. Grant of Rights
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, Distribute and sublicense the Contribution of such Contributor, if any, and such Derivative Works.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in Source Code or other form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution cause [...]
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted here [...]
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+
+e) Notwithstanding the terms of any Secondary License, no Contributor makes additional grants to any Recipient (other than those set forth in this Agreement) as a result of such Recipient's receipt of the Program under the terms of a Secondary License (if permitted under the terms of Section 3).
+
+3. Requirements
+3.1 If a Contributor Distributes the Program in any form, then:
+
+a) the Program must also be made available as Source Code, in accordance with section 3.2, and the Contributor must accompany the Program with a statement that the Source Code for the Program is available under this Agreement, and informs Recipients how to obtain it in a reasonable manner on or through a medium customarily used for software exchange; and
+
+b) the Contributor may Distribute the Program under a license different than this Agreement, provided that such license:
+
+i) effectively disclaims on behalf of all other Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+ii) effectively excludes on behalf of all other Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+iii) does not attempt to limit or alter the recipients' rights in the Source Code under section 3.2; and
+iv) requires any subsequent distribution of the Program by any party to be under a license that satisfies the requirements of this section 3.
+3.2 When the Program is Distributed as Source Code:
+
+a) it must be made available under this Agreement, or if the Program (i) is combined with other material in a separate file or files made available under a Secondary License, and (ii) the initial Contributor attached to the Source Code the notice described in Exhibit A of this Agreement, then the Program may be made available under the terms of such Secondary Licenses, and
+b) a copy of this Agreement must be included with each copy of the Program.
+3.3 Contributors may not remove or alter any copyright, patent, trademark, attribution notices, disclaimers of warranty, or limitations of liability (“notices”) contained within the Program from any copy of the Program which they Distribute, provided that Contributors may add their own appropriate notices.
+
+4. Commercial Distribution
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor (“Commercial Con [...]
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims  [...]
+
+5. No Warranty
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks assoc [...]
+
+6. Disclaimer of Liability
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EX [...]
+
+7. General
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Reci [...]
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the respons [...]
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. Nothing in this Agreement is intended to be enforceable by any entity that is not a Contributor or Recipient. No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+“This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), version(s), and exceptions or additional permissions here}.”
+
+Simply including a copy of this Agreement, including this Exhibit A is not sufficient to license the Source Code under Secondary Licenses.
+
+If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/enterprise/jakartaee8.api/manifest.mf b/enterprise/jakartaee8.api/manifest.mf
new file mode 100644
index 0000000..21b79ed
--- /dev/null
+++ b/enterprise/jakartaee8.api/manifest.mf
@@ -0,0 +1,6 @@
+Manifest-Version: 1.0
+AutoUpdate-Show-In-Client: false
+OpenIDE-Module: org.netbeans.modules.jakartaee8.api
+OpenIDE-Module-Layer: org/netbeans/modules/jakartaee8/api/layer.xml
+OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/jakartaee8/api/Bundle.properties
+OpenIDE-Module-Specification-Version: 1.10
diff --git a/enterprise/j2ee.core/src/org/netbeans/api/j2ee/core/Bundle.properties b/enterprise/jakartaee8.api/nbproject/project.properties
similarity index 72%
copy from enterprise/j2ee.core/src/org/netbeans/api/j2ee/core/Bundle.properties
copy to enterprise/jakartaee8.api/nbproject/project.properties
index 3d9277d..e81e0e1 100644
--- a/enterprise/j2ee.core/src/org/netbeans/api/j2ee/core/Bundle.properties
+++ b/enterprise/jakartaee8.api/nbproject/project.properties
@@ -1,4 +1,3 @@
-#
 # 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
@@ -15,14 +14,7 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-#
 
-J2EE13.displayName=J2EE 1.3
-J2EE14.displayName=J2EE 1.4
-JavaEE5.displayName=Java EE 5
-JavaEE6Full.displayName=Java EE 6
-JavaEE6Web.displayName=Java EE 6 Web
-JavaEE7Full.displayName=Java EE 7
-JavaEE7Web.displayName=Java EE 7 Web
-JavaEE8Full.displayName=Java EE 8
-JavaEE8Web.displayName=Java EE 8 Web
+javac.source=1.8
+release.external/jakarta.jakartaee-api-8.0.0.jar=modules/ext/jakarta.jakartaee-api-8.0.0.jar
+release.external/jakarta.jakartaee-web-api-8.0.0.jar=modules/ext/jakarta.jakartaee-web-api-8.0.0.jar
diff --git a/enterprise/jakartaee8.api/nbproject/project.xml b/enterprise/jakartaee8.api/nbproject/project.xml
new file mode 100644
index 0000000..18e9a03
--- /dev/null
+++ b/enterprise/jakartaee8.api/nbproject/project.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<project xmlns="http://www.netbeans.org/ns/project/1">
+    <type>org.netbeans.modules.apisupport.project</type>
+    <configuration>
+        <data xmlns="http://www.netbeans.org/ns/nb-module-project/3">
+            <code-name-base>org.netbeans.modules.jakartaee8.api</code-name-base>
+            <module-dependencies/>
+            <public-packages/>
+        </data>
+    </configuration>
+</project>
diff --git a/enterprise/j2ee.core/src/org/netbeans/api/j2ee/core/Bundle.properties b/enterprise/jakartaee8.api/src/org/netbeans/modules/jakartaee8/api/Bundle.properties
similarity index 67%
copy from enterprise/j2ee.core/src/org/netbeans/api/j2ee/core/Bundle.properties
copy to enterprise/jakartaee8.api/src/org/netbeans/modules/jakartaee8/api/Bundle.properties
index 3d9277d..07f9fce 100644
--- a/enterprise/j2ee.core/src/org/netbeans/api/j2ee/core/Bundle.properties
+++ b/enterprise/jakartaee8.api/src/org/netbeans/modules/jakartaee8/api/Bundle.properties
@@ -1,4 +1,3 @@
-#
 # 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
@@ -15,14 +14,12 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-#
+OpenIDE-Module-Display-Category=Jakarta EE
+OpenIDE-Module-Long-Description=\
+    Library wrapper which provides JakartaEE 8 API (full API and web profile API)
+OpenIDE-Module-Name=Jakarta EE 8 API Library
+OpenIDE-Module-Short-Description=Jakarta EE 8 API Library
 
-J2EE13.displayName=J2EE 1.3
-J2EE14.displayName=J2EE 1.4
-JavaEE5.displayName=Java EE 5
-JavaEE6Full.displayName=Java EE 6
-JavaEE6Web.displayName=Java EE 6 Web
-JavaEE7Full.displayName=Java EE 7
-JavaEE7Web.displayName=Java EE 7 Web
-JavaEE8Full.displayName=Java EE 8
-JavaEE8Web.displayName=Java EE 8 Web
+#library display name
+jakartaee-api-8.0=Jakarta EE 8 API Library
+jakartaee-web-api-8.0=Jakarta EE Web 8 API Library
diff --git a/enterprise/jakartaee8.api/src/org/netbeans/modules/jakartaee8/api/jakartaee-api-8.0.xml b/enterprise/jakartaee8.api/src/org/netbeans/modules/jakartaee8/api/jakartaee-api-8.0.xml
new file mode 100644
index 0000000..f74d6cf
--- /dev/null
+++ b/enterprise/jakartaee8.api/src/org/netbeans/modules/jakartaee8/api/jakartaee-api-8.0.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+
+    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.
+
+-->
+<library version="3.0" xmlns="http://www.netbeans.org/ns/library-declaration/3">
+    <name>jakartaee-api-8.0</name>
+    <type>j2se</type>
+    <localizing-bundle>org/netbeans/modules/jakartaee8/api/Bundle</localizing-bundle>
+    <volume>
+        <type>classpath</type>
+	<resource>jar:nbinst://org.netbeans.modules.jakartaee8.api/modules/ext/jakartaee-api-8.0.jar!/</resource>
+    </volume>
+    <volume>
+        <type>javadoc</type>
+        <resource>jar:nbinst://org.netbeans.modules.j2ee.platform/docs/jakartaee-doc-api.jar!/</resource>
+    </volume>
+    <properties>
+        <property>
+            <name>maven-dependencies</name>
+            <value>jakarta:jakartaee-api:8.0:jar</value>
+        </property>
+    </properties>
+</library>
diff --git a/enterprise/jakartaee8.api/src/org/netbeans/modules/jakartaee8/api/jakartaee-web-api-8.0.xml b/enterprise/jakartaee8.api/src/org/netbeans/modules/jakartaee8/api/jakartaee-web-api-8.0.xml
new file mode 100644
index 0000000..8935846
--- /dev/null
+++ b/enterprise/jakartaee8.api/src/org/netbeans/modules/jakartaee8/api/jakartaee-web-api-8.0.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+
+    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.
+
+-->
+<library version="3.0" xmlns="http://www.netbeans.org/ns/library-declaration/3">
+    <name>jakartaee-web-api-8.0</name>
+    <type>j2se</type>
+    <localizing-bundle>org/netbeans/modules/jakartaee8/api/Bundle</localizing-bundle>
+    <volume>
+        <type>classpath</type>
+	<resource>jar:nbinst://org.netbeans.modules.jakartaee8.api/modules/ext/jakartaee-web-api-8.0.jar!/</resource>
+    </volume>
+    <volume>
+        <type>javadoc</type>
+        <resource>jar:nbinst://org.netbeans.modules.j2ee.platform/docs/jakartaee-doc-api.jar!/</resource>
+    </volume>
+    <properties>
+        <property>
+            <name>maven-dependencies</name>
+            <value>jakarta:jakartaee-web-api:8.0:jar</value>
+        </property>
+    </properties>
+</library>
diff --git a/enterprise/jakartaee8.api/src/org/netbeans/modules/jakartaee8/api/layer.xml b/enterprise/jakartaee8.api/src/org/netbeans/modules/jakartaee8/api/layer.xml
new file mode 100644
index 0000000..9bfb26a
--- /dev/null
+++ b/enterprise/jakartaee8.api/src/org/netbeans/modules/jakartaee8/api/layer.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+
+<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.2//EN" "http://www.netbeans.org/dtds/filesystem-1_2.dtd">
+<filesystem>
+  <folder name="org-netbeans-api-project-libraries">
+    <folder name="Libraries">
+      <file name="jakartaee-api-8.0.xml" url="jakartaee-api-8.0.xml">
+        <attr name="displayName" bundlevalue="org/netbeans/modules/jakartaee8/api/Bundle#jakartaee-api-8.0"/>
+      </file>
+      <file name="jakartaee-web-api-8.0.xml" url="jakartaee-web-api-8.0.xml">
+        <attr name="displayName" bundlevalue="org/netbeans/modules/jakartaee8/api/Bundle#jakartaee-web-api-8.0"/>
+      </file>
+    </folder>
+  </folder>
+</filesystem>
diff --git a/enterprise/javaee.project/src/org/netbeans/modules/javaee/project/api/ant/ui/wizard/J2eeVersionWarningPanel.java b/enterprise/javaee.project/src/org/netbeans/modules/javaee/project/api/ant/ui/wizard/J2eeVersionWarningPanel.java
index de269f2..cc7a22f 100644
--- a/enterprise/javaee.project/src/org/netbeans/modules/javaee/project/api/ant/ui/wizard/J2eeVersionWarningPanel.java
+++ b/enterprise/javaee.project/src/org/netbeans/modules/javaee/project/api/ant/ui/wizard/J2eeVersionWarningPanel.java
@@ -36,32 +36,32 @@ import org.openide.util.NbBundle;
  * @author Andrei Badea
  */
 final class J2eeVersionWarningPanel extends javax.swing.JPanel {
-    
+
     public final static String WARN_SET_JDK_15 = "warnSetJdk15"; // NOI18N
     public final static String WARN_SET_JDK_6 = "warnSetJdk6"; // NOI18N
     public final static String WARN_SET_JDK_7 = "warnSetJdk7"; // NOI18N
     public final static String WARN_SET_JDK_8 = "warnSetJdk8"; // NOI18N
-    
+
     public final static String WARN_SET_SOURCE_LEVEL_15 = "warnSetSourceLevel15"; // NOI18N
     public final static String WARN_SET_SOURCE_LEVEL_6 = "warnSetSourceLevel6"; // NOI18N
     public final static String WARN_SET_SOURCE_LEVEL_7 = "warnSetSourceLevel7"; // NOI18N
     public final static String WARN_SET_SOURCE_LEVEL_8 = "warnSetSourceLevel8";
-    
+
     public final static String WARN_JDK_6_REQUIRED = "warnJdk6Required"; // NOI18N
     public final static String WARN_JDK_7_REQUIRED = "warnJdk7Required"; // NOI18N
     public final static String WARN_JDK_8_REQUIRED = "warnJdk8Required"; // NOI18N
 
     private String warningType;
-    
+
     public J2eeVersionWarningPanel(String warningType) {
         initComponents();
         setWarningType(warningType);
     }
-    
+
     public String getWarningType() {
         return warningType;
     }
-    
+
     public void setWarningType(String warningType) {
         String labelText = "";
         this.warningType = warningType;
@@ -90,7 +90,7 @@ final class J2eeVersionWarningPanel extends javax.swing.JPanel {
         }
         jLabel.setText(labelText);
     }
-    
+
     public String getSuggestedJavaPlatformName() {
         if (WARN_SET_JDK_15.equals(warningType) ) {
             JavaPlatform[] javaPlatforms = getJavaPlatforms("1.5");
@@ -110,7 +110,7 @@ final class J2eeVersionWarningPanel extends javax.swing.JPanel {
         }
         return JavaPlatform.getDefault().getDisplayName();
     }
-    
+
     public Specification getSuggestedJavaPlatformSpecification() {
         if (WARN_SET_JDK_15.equals(warningType) ) {
             JavaPlatform[] javaPlatforms = getJavaPlatforms("1.5");
@@ -157,17 +157,21 @@ final class J2eeVersionWarningPanel extends javax.swing.JPanel {
         if ((j2eeProfile == Profile.JAVA_EE_6_FULL || j2eeProfile == Profile.JAVA_EE_6_WEB) &&
                 isAcceptableSourceLevel("1.6", sourceLevel, acceptableSourceLevels)) // NOI18N
             return null;
-        
+
         // no warning if 1.7 is the default for j2ee7
         if ((j2eeProfile == Profile.JAVA_EE_7_FULL || j2eeProfile == Profile.JAVA_EE_7_WEB) &&
                 isAcceptableSourceLevel("1.7", sourceLevel, acceptableSourceLevels)) // NOI18N
             return null;
-        
+
         // no warning if 1.8 is the default for j2ee8
         if ((j2eeProfile == Profile.JAVA_EE_8_FULL || j2eeProfile == Profile.JAVA_EE_8_WEB) &&
                 isAcceptableSourceLevel("1.8", sourceLevel, acceptableSourceLevels)) // NOI18N
             return null;
 
+            if ((j2eeProfile == Profile.JAKARTA_EE_8_FULL || j2eeProfile == Profile.JAKARTA_EE_8_WEB) &&
+                    isAcceptableSourceLevel("1.8", sourceLevel, acceptableSourceLevels)) // NOI18N
+                return null;
+
         if (j2eeProfile == Profile.JAVA_EE_5) {
             JavaPlatform[] java15Platforms = getJavaPlatforms("1.5"); //NOI18N
             if (java15Platforms.length > 0) {
@@ -201,6 +205,17 @@ final class J2eeVersionWarningPanel extends javax.swing.JPanel {
             JavaPlatform[] java18Platforms = getJavaPlatforms("1.8"); //NOI18N
             if (java18Platforms.length > 0) {
                 return WARN_SET_JDK_8;
+           }  else {
+                    if (canSetSourceLevel("1.8")) {
+                        return WARN_SET_SOURCE_LEVEL_8;
+                    } else {
+                        return WARN_JDK_8_REQUIRED;
+                    }
+                }
+        } else if (j2eeProfile == Profile.JAKARTA_EE_8_FULL || j2eeProfile == Profile.JAKARTA_EE_8_WEB) {
+            JavaPlatform[] java18Platforms = getJavaPlatforms("1.8"); //NOI18N
+            if (java18Platforms.length > 0) {
+                return WARN_SET_JDK_8;
         } else {
                 if (canSetSourceLevel("1.8")) {
                     return WARN_SET_SOURCE_LEVEL_8;
@@ -233,7 +248,7 @@ final class J2eeVersionWarningPanel extends javax.swing.JPanel {
     private static JavaPlatform[] getJavaPlatforms(String level) {
         return JavaPlatformManager.getDefault().getPlatforms(null, new Specification("J2SE", new SpecificationVersion(level))); // NOI18N
     }
-    
+
     /** This method is called from within the constructor to
      * initialize the form.
      * WARNING: Do NOT modify this code. The content of this method is
@@ -257,10 +272,9 @@ final class J2eeVersionWarningPanel extends javax.swing.JPanel {
             .addComponent(jLabel)
         );
     }// </editor-fold>//GEN-END:initComponents
-    
+
     // Variables declaration - do not modify//GEN-BEGIN:variables
     private javax.swing.JLabel jLabel;
     // End of variables declaration//GEN-END:variables
-    
-}
 
+}
diff --git a/enterprise/javaee.project/src/org/netbeans/modules/javaee/project/api/ant/ui/wizard/ProjectServerPanel.java b/enterprise/javaee.project/src/org/netbeans/modules/javaee/project/api/ant/ui/wizard/ProjectServerPanel.java
index 5ccd770..6a2acea 100644
--- a/enterprise/javaee.project/src/org/netbeans/modules/javaee/project/api/ant/ui/wizard/ProjectServerPanel.java
+++ b/enterprise/javaee.project/src/org/netbeans/modules/javaee/project/api/ant/ui/wizard/ProjectServerPanel.java
@@ -66,7 +66,7 @@ final class ProjectServerPanel extends javax.swing.JPanel implements DocumentLis
     private ProjectServerWizardPanel wizard;
     private boolean contextModified = false;
     private final DefaultComboBoxModel<ServerInstanceWrapper> serversModel = new DefaultComboBoxModel<>();
-    
+
     private J2eeVersionWarningPanel warningPanel;
     private boolean sharableProject;
 
@@ -74,7 +74,7 @@ final class ProjectServerPanel extends javax.swing.JPanel implements DocumentLis
     private final J2eeModule.Type j2eeModuleType;
     private File projectLocation;
     private boolean importScenario;
-    
+
     private BigDecimal xmlVersion;
 
     @Deprecated
@@ -87,7 +87,7 @@ final class ProjectServerPanel extends javax.swing.JPanel implements DocumentLis
 
     /** Creates new form ProjectServerPanel */
     public ProjectServerPanel(J2eeModule.Type j2eeModuleType, String name, String title,
-            ProjectServerWizardPanel wizard, boolean showAddToEar, 
+            ProjectServerWizardPanel wizard, boolean showAddToEar,
             boolean mainAppClientClass, boolean showContextPath, boolean createProjects, boolean importScenario) {
         this.importScenario = importScenario;
         initComponents();
@@ -99,11 +99,11 @@ final class ProjectServerPanel extends javax.swing.JPanel implements DocumentLis
             j2eeSpecComboBox.setSelectedIndex(0);
         }
         initEnterpriseApplications();
-        
+
         // Provide a name in the title bar.
         setName(name);
         putClientProperty ("NewProjectWizard_Title", title);
-        
+
         jLabelEnterprise.setVisible(showAddToEar);
         jComboBoxEnterprise.setVisible(showAddToEar);
         jLabelContextPath.setVisible(showContextPath);
@@ -118,7 +118,7 @@ final class ProjectServerPanel extends javax.swing.JPanel implements DocumentLis
         jTextFieldWebAppName.setVisible(createProjects);
         mainClassLabel1.setVisible(false);
         mainClassTextFieldWithinEar.setVisible(false);
-        
+
         jTextFieldCarName.getDocument().addDocumentListener( this );
         jTextFieldEjbModuleName.getDocument().addDocumentListener( this );
         jTextFieldWebAppName.getDocument().addDocumentListener( this );
@@ -430,12 +430,12 @@ final class ProjectServerPanel extends javax.swing.JPanel implements DocumentLis
                     continue;
                 }
                 if (j2eeModuleType ==J2eeModule.Type.WAR) {
-                    if (Profile.JAVA_EE_6_FULL.equals(profile) || Profile.JAVA_EE_7_FULL.equals(profile) || Profile.JAVA_EE_8_FULL.equals(profile)) {
+                    if (Profile.JAVA_EE_6_FULL.equals(profile) || Profile.JAVA_EE_7_FULL.equals(profile) || Profile.JAVA_EE_8_FULL.equals(profile) || Profile.JAKARTA_EE_8_FULL.equals(profile)) {
                         // for web apps always offer only JAVA_EE_6_WEB profile and skip full one
                         continue;
                     }
                 } else {
-                    if (Profile.JAVA_EE_6_WEB.equals(profile) || Profile.JAVA_EE_7_WEB.equals(profile) || Profile.JAVA_EE_8_WEB.equals(profile)) {
+                    if (Profile.JAVA_EE_6_WEB.equals(profile) || Profile.JAVA_EE_7_WEB.equals(profile) || Profile.JAVA_EE_8_WEB.equals(profile) || Profile.JAKARTA_EE_8_WEB.equals(profile)) {
                         // for EE apps always skip web profile
                         continue;
                     }
@@ -474,7 +474,7 @@ private void createCarCheckBox_action(java.awt.event.ActionEvent evt) {//GEN-FIR
 private void serverLibraryCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_serverLibraryCheckboxActionPerformed
     wizard.fireChangeEvent();
 }//GEN-LAST:event_serverLibraryCheckboxActionPerformed
-    
+
     boolean valid(WizardDescriptor wizardDescriptor) {
         wizardDescriptor.putProperty(ProjectLocationPanel.PROP_ERROR_MESSAGE, null);
         if (getSelectedServer() == null) {
@@ -497,7 +497,7 @@ private void serverLibraryCheckboxActionPerformed(java.awt.event.ActionEvent evt
         if (J2eeModule.Type.EJB.equals(j2eeModuleType)) {
             setJ2eeVersionWarning(wizardDescriptor);
         }
-        
+
         if (J2eeModule.Type.CAR.equals(j2eeModuleType)) {
             if (!isMainClassValid(mainClassTextField.getText())) {
                 setErrorMessage("ERROR_IllegalMainClassName", wizardDescriptor); // NOI18N
@@ -562,17 +562,17 @@ private void serverLibraryCheckboxActionPerformed(java.awt.event.ActionEvent evt
         }
         return valid;
     }
-    
+
     private static void setErrorMessage(
             final String errMsgKey, final WizardDescriptor wizardDescriptor) {
         wizardDescriptor.putProperty(WizardDescriptor.PROP_ERROR_MESSAGE, // NOI18N
                 NbBundle.getMessage(ProjectServerPanel.class, errMsgKey));
     }
-    
+
     private boolean isSharableProject() {
         return sharableProject;
     }
-    
+
     void store(WizardDescriptor d) {
         String serverInstanceId = getSelectedServer();
         d.putProperty(ProjectServerWizardPanel.SERVER_INSTANCE_ID, serverInstanceId);
@@ -590,7 +590,7 @@ private void serverLibraryCheckboxActionPerformed(java.awt.event.ActionEvent evt
         d.putProperty(ProjectServerWizardPanel.CDI, Boolean.valueOf(cdiCheckbox.isVisible() && cdiCheckbox.isSelected()));
         d.putProperty(ProjectServerWizardPanel.SOURCE_LEVEL, getSourceLevel(d, serverInstanceId, j2ee));
     }
-    
+
     private String getSourceLevel(WizardDescriptor d, String serverInstanceId, Profile j2ee) {
         String sourceLevel = JavaPlatform.getDefault().getSpecification().getVersion().toString();
         if (warningPanel != null && warningPlaceHolderPanel.isVisible()) {
@@ -599,7 +599,7 @@ private void serverLibraryCheckboxActionPerformed(java.awt.event.ActionEvent evt
                 sourceLevel = spec.getVersion().toString();
             }
         }
-        
+
         // serverInstanceId is null, when there is no installed server
         if (serverInstanceId != null) {
             try {
@@ -617,7 +617,7 @@ private void serverLibraryCheckboxActionPerformed(java.awt.event.ActionEvent evt
                 Exceptions.printStackTrace(ex);
             }
         }
-        
+
         if (warningPanel != null && warningPlaceHolderPanel.isVisible()) {
             d.putProperty(ProjectServerWizardPanel.JAVA_PLATFORM, warningPanel.getSuggestedJavaPlatformName());
             if (j2ee != null) {
@@ -633,10 +633,10 @@ private void serverLibraryCheckboxActionPerformed(java.awt.event.ActionEvent evt
         } else {
             d.putProperty(ProjectServerWizardPanel.JAVA_PLATFORM, JavaPlatform.getDefault().getDisplayName());
         }
-        
+
         return sourceLevel;
     }
-    
+
     private String getServerLibraryName() {
         if (!serverLibraryCheckbox.isSelected() || !serverLibraryCheckbox.isEnabled()) {
             return null;
@@ -647,7 +647,7 @@ private void serverLibraryCheckboxActionPerformed(java.awt.event.ActionEvent evt
         return (name == null) ? "" : PropertyUtils.getUsablePropertyName(name); // NOI18N
     }
 
-    
+
     void read(WizardDescriptor d) {
         if (!isContextModified()) {
             jTextFieldContextPath.setText(createDefaultContext((String)d.getProperty(ProjectLocationWizardPanel.NAME)));
@@ -676,15 +676,15 @@ private void serverLibraryCheckboxActionPerformed(java.awt.event.ActionEvent evt
                 NbBundle.getMessage(ProjectServerPanel.class,"TXT_AppClientProjectName"), new Object[] {newProjectName}));
         }
     }
-    
+
     /** Create a valid default for context path from project name.
      */
     private static String createDefaultContext(String projectName) {
         return "/" + (projectName != null ? PropertyUtils.getUsablePropertyName(projectName) : "");
     }
-    
-    
-    
+
+
+
     // Variables declaration - do not modify//GEN-BEGIN:variables
     private javax.swing.JButton addServerButton;
     private javax.swing.JCheckBox cdiCheckbox;
@@ -724,6 +724,7 @@ private void serverLibraryCheckboxActionPerformed(java.awt.event.ActionEvent evt
         boolean gfv3ee6Found = false;
         boolean gfv5Found = false;
         boolean gfv5ee8Found = false;
+        boolean gfv510ee8Found = false;
         for (String serverInstanceID : Deployment.getDefault().getServerInstanceIDs()) {
             try {
                 ServerInstance si = Deployment.getDefault().getServerInstance(serverInstanceID);
@@ -741,12 +742,18 @@ private void serverLibraryCheckboxActionPerformed(java.awt.event.ActionEvent evt
                             // preselect the best server ;)
                             // FIXME replace with PriorityQueue mechanism
                             String shortName = si.getServerID();
-                            if ("gfv5ee8".equals(shortName)) { // NOI18N
+                            if ("gfv510ee8".equals(shortName)) {
+                                selectedItem = serverWrapper;
+                                gfv510ee8Found = true;
+                            } else if ("gfv5ee8".equals(shortName)) { // NOI18N
                                 selectedItem = serverWrapper;
                                 gfv5ee8Found = true;
                             } else if ("gfv3ee6".equals(shortName)) { // NOI18N
                                 selectedItem = serverWrapper;
                                 gfv3ee6Found = true;
+                            } else if ("gfv510".equals(shortName) && !gfv510ee8Found){
+                                selectedItem = serverWrapper;
+                                gfv510ee8Found = true;
                             } else if ("gfv5".equals(shortName) && !gfv5ee8Found) { // NOI18N
                                 selectedItem = serverWrapper;
                                 gfv5Found = true;
@@ -781,12 +788,12 @@ private void serverLibraryCheckboxActionPerformed(java.awt.event.ActionEvent evt
             j2eeSpecComboBox.setSelectedIndex(0);
         }
     }
-    
+
     private Profile getSelectedJ2eeProfile() {
         ProfileItem item = (ProfileItem) j2eeSpecComboBox.getSelectedItem();
         return item == null ? null : item.getProfile();
     }
-    
+
     private String getSelectedServer() {
         ServerInstanceWrapper serverInstanceWrapper = (ServerInstanceWrapper) serversModel.getSelectedItem();
         if (serverInstanceWrapper == null) {
@@ -794,7 +801,7 @@ private void serverLibraryCheckboxActionPerformed(java.awt.event.ActionEvent evt
         }
         return serverInstanceWrapper.getServerInstanceID();
     }
-    
+
     protected boolean isContextModified() {
          return contextModified;
     }
@@ -803,11 +810,11 @@ private void serverLibraryCheckboxActionPerformed(java.awt.event.ActionEvent evt
         int idx = jComboBoxEnterprise.getSelectedIndex();
         return (idx <= 0) ? null : earProjects.get(idx - 1);
     }
-    
+
     private void initEnterpriseApplications() {
         jComboBoxEnterprise.addItem(NbBundle.getMessage(ProjectServerPanel.class, "LBL_NWP1_AddToEnterprise_None")); // TODO: AB: add to bundle
         jComboBoxEnterprise.setSelectedIndex(0);
-        
+
         Project[] allProjects = OpenProjects.getDefault().getOpenProjects();
         earProjects = new ArrayList<Project>();
         for (int i = 0; i < allProjects.length; i++) {
@@ -829,7 +836,7 @@ private void serverLibraryCheckboxActionPerformed(java.awt.event.ActionEvent evt
             jComboBoxEnterprise.setEnabled(false);
         }
     }
-    
+
     private void setJ2eeVersionWarningPanel() {
         Profile j2ee = getSelectedJ2eeProfile();
         if (j2ee == null) {
@@ -899,7 +906,7 @@ private void serverLibraryCheckboxActionPerformed(java.awt.event.ActionEvent evt
             return toString().compareTo(o.toString());
         }
     }
-    
+
     private void updateJ2EEVersion(String configFileName) {
         FileObject fo = FileUtil.toFileObject(FileUtil.normalizeFile(projectLocation));
         if (fo != null) {
@@ -917,10 +924,10 @@ private void serverLibraryCheckboxActionPerformed(java.awt.event.ActionEvent evt
             }
         }
     }
-    
+
     private BigDecimal getEjbJarXmlVersion(FileObject ejbJarXml) throws IOException {
         if (ejbJarXml != null) {
-            org.netbeans.modules.j2ee.dd.api.ejb.EjbJar ejbJar = 
+            org.netbeans.modules.j2ee.dd.api.ejb.EjbJar ejbJar =
                     org.netbeans.modules.j2ee.dd.api.ejb.DDProvider.getDefault().getDDRoot(ejbJarXml);
             if (ejbJar != null) {
                 return ejbJar.getVersion();
@@ -936,7 +943,7 @@ private void serverLibraryCheckboxActionPerformed(java.awt.event.ActionEvent evt
             if (version == null) {
                 return;
             }
-            
+
             if(new BigDecimal(org.netbeans.modules.j2ee.dd.api.ejb.EjbJar.VERSION_2_1).equals(version)) {
                 j2eeSpecComboBox.setSelectedItem(new ProfileItem(Profile.J2EE_14));
             }
@@ -961,7 +968,7 @@ private void serverLibraryCheckboxActionPerformed(java.awt.event.ActionEvent evt
             if (version == null) {
                 return;
             }
-            
+
             if(new BigDecimal(org.netbeans.modules.j2ee.dd.api.client.AppClient.VERSION_1_4).equals(version)) {
                 j2eeSpecComboBox.setSelectedItem(new ProfileItem(Profile.J2EE_14));
             } else if(new BigDecimal(org.netbeans.modules.j2ee.dd.api.client.AppClient.VERSION_5_0).equals(version)) {
@@ -974,11 +981,11 @@ private void serverLibraryCheckboxActionPerformed(java.awt.event.ActionEvent evt
             Exceptions.printStackTrace(Exceptions.attachLocalizedMessage(e, message));
         }
     }
-    
+
     private void setJ2eeVersionWarning(WizardDescriptor d) {
         String errorMessage = null;
         ProfileItem selectedItem = (ProfileItem) j2eeSpecComboBox.getSelectedItem();
-        
+
         boolean oldXml = xmlVersion == null ? true :
             new BigDecimal(org.netbeans.modules.j2ee.dd.api.ejb.EjbJar.VERSION_2_1).compareTo(xmlVersion) > 0;
         if (selectedItem != null) {
@@ -990,10 +997,10 @@ private void serverLibraryCheckboxActionPerformed(java.awt.event.ActionEvent evt
         if (d != null) {
             d.putProperty(WizardDescriptor.PROP_ERROR_MESSAGE, errorMessage);
         }
-        
+
         setJ2eeVersionWarningPanel();
     }
-    
+
     private void initClientAppMainClass(String newProjectName) {
         newProjectName = getPackageName(newProjectName);
         if (!Utilities.isJavaIdentifier(newProjectName)) {
@@ -1009,7 +1016,7 @@ private void serverLibraryCheckboxActionPerformed(java.awt.event.ActionEvent evt
             ));
         }
     }
-    
+
     private  String getPackageName(String displayName) {
         StringBuffer builder = new StringBuffer();
         boolean firstLetter = true;
@@ -1025,19 +1032,19 @@ private void serverLibraryCheckboxActionPerformed(java.awt.event.ActionEvent evt
         }
         return builder.length() == 0 ? NbBundle.getMessage(ProjectServerPanel.class,"TXT_DefaultPackageName") : builder.toString();
     }
-    
+
     public void changedUpdate( DocumentEvent e ) {
         wizard.fireChangeEvent();
     }
-    
+
     public void insertUpdate( DocumentEvent e ) {
         wizard.fireChangeEvent();
     }
-    
+
     public void removeUpdate( DocumentEvent e ) {
         wizard.fireChangeEvent();
     }
-    
+
     public HelpCtx getHelpCtx() {
         return new HelpCtx(ProjectImportLocationPanel.generateHelpID(ProjectServerPanel.class, j2eeModuleType));
     }
diff --git a/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/ui/customizer/impl/CustomizerRunWeb.java b/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/ui/customizer/impl/CustomizerRunWeb.java
index 2a31a72..0234d52 100644
--- a/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/ui/customizer/impl/CustomizerRunWeb.java
+++ b/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/ui/customizer/impl/CustomizerRunWeb.java
@@ -109,12 +109,14 @@ public class CustomizerRunWeb extends BaseRunCustomizer {
         WEB_PROFILES.add(Profile.JAVA_EE_6_WEB);
         WEB_PROFILES.add(Profile.JAVA_EE_7_WEB);
         WEB_PROFILES.add(Profile.JAVA_EE_8_WEB);
+        WEB_PROFILES.add(Profile.JAKARTA_EE_8_WEB);
 
         FULL_PROFILES = new TreeSet<>(Profile.UI_COMPARATOR);
         FULL_PROFILES.add(Profile.JAVA_EE_5);
         FULL_PROFILES.add(Profile.JAVA_EE_6_FULL);
         FULL_PROFILES.add(Profile.JAVA_EE_7_FULL);
         FULL_PROFILES.add(Profile.JAVA_EE_8_FULL);
+        FULL_PROFILES.add(Profile.JAKARTA_EE_8_FULL);
     }
 
     @Messages({
@@ -199,7 +201,7 @@ public class CustomizerRunWeb extends BaseRunCustomizer {
 
         versionUpdater = createVersionUpdater(J2eeModule.Type.WAR);
     }
-    
+
     @Override
     public void applyChangesInAWT() {
         assert SwingUtilities.isEventDispatchThread();
diff --git a/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/ui/wizard/ServerSelectionHelper.java b/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/ui/wizard/ServerSelectionHelper.java
index 61e9901..fb01a7d 100644
--- a/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/ui/wizard/ServerSelectionHelper.java
+++ b/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/ui/wizard/ServerSelectionHelper.java
@@ -155,10 +155,12 @@ public class ServerSelectionHelper {
         // If <No Server> option was selected, show all supported profiles except Java EE 7 profiles
         if (ExecutionChecker.DEV_NULL.equals(serverInstance)) {
             if (J2eeModule.Type.WAR.equals(projectType)) {
+                profiles.add(Profile.JAKARTA_EE_8_WEB);
                 profiles.add(Profile.JAVA_EE_8_WEB);
                 profiles.add(Profile.JAVA_EE_7_WEB);
                 profiles.add(Profile.JAVA_EE_6_WEB);
             } else {
+                profiles.add(Profile.JAKARTA_EE_8_FULL);
                 profiles.add(Profile.JAVA_EE_8_FULL);
                 profiles.add(Profile.JAVA_EE_7_FULL);
                 profiles.add(Profile.JAVA_EE_6_FULL);
@@ -184,10 +186,12 @@ public class ServerSelectionHelper {
 
             // We want to have Java EE 6 Full profile for all project types except Web project
             if (J2eeModule.Type.WAR.equals(projectType)) {
+                profiles.remove(Profile.JAKARTA_EE_8_FULL);
                 profiles.remove(Profile.JAVA_EE_8_FULL);
                 profiles.remove(Profile.JAVA_EE_7_FULL);
                 profiles.remove(Profile.JAVA_EE_6_FULL);
             } else {
+                profiles.remove(Profile.JAKARTA_EE_8_WEB);
                 profiles.remove(Profile.JAVA_EE_8_WEB);
                 profiles.remove(Profile.JAVA_EE_7_WEB);
                 profiles.remove(Profile.JAVA_EE_6_WEB);
@@ -260,8 +264,8 @@ public class ServerSelectionHelper {
         ServerInstance instance = findServerInstance(instanceID);
 
         try {
-            if (instance != null && 
-                instance.getDisplayName() != null && 
+            if (instance != null &&
+                instance.getDisplayName() != null &&
                 instance.getJ2eePlatform().getSupportedTypes().contains(projectType)) {
 
                 return true;
diff --git a/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/ui/wizard/archetype/BaseJ2eeArchetypeProvider.java b/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/ui/wizard/archetype/BaseJ2eeArchetypeProvider.java
index e8f4975..6e0ceb0 100755
--- a/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/ui/wizard/archetype/BaseJ2eeArchetypeProvider.java
+++ b/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/ui/wizard/archetype/BaseJ2eeArchetypeProvider.java
@@ -24,6 +24,7 @@ import org.netbeans.api.annotations.common.CheckForNull;
 import org.netbeans.api.annotations.common.NonNull;
 import org.netbeans.api.j2ee.core.Profile;
 import org.netbeans.modules.maven.api.archetype.Archetype;
+import org.openide.util.NbBundle;
 
 /**
  *
@@ -55,7 +56,17 @@ abstract class BaseJ2eeArchetypeProvider {
     }
 
     protected void addJavaEE8Archetype(Profile j2eeProfile, String groupId, String version, String artifactId) {
-        map.put(j2eeProfile, createArchetype(groupId, version, artifactId));
+        map.put(j2eeProfile, createArchetype(
+                NbBundle.getMessage(BaseJ2eeArchetypeProvider.class,groupId),
+                NbBundle.getMessage(BaseJ2eeArchetypeProvider.class,version),
+                NbBundle.getMessage(BaseJ2eeArchetypeProvider.class,artifactId)));
+    }
+
+    protected void addJakartaEEArchetype(Profile j2eeProfile, String groupId, String version, String artifactId) {
+        map.put(j2eeProfile, createArchetype(
+                NbBundle.getMessage(BaseJ2eeArchetypeProvider.class,groupId),
+                NbBundle.getMessage(BaseJ2eeArchetypeProvider.class,version),
+                NbBundle.getMessage(BaseJ2eeArchetypeProvider.class,artifactId)));
     }
 
     protected void addSameMojoArchetypeForAllProfiles(String version, String artifactId) {
@@ -66,10 +77,20 @@ abstract class BaseJ2eeArchetypeProvider {
         map.put(Profile.JAVA_EE_6_WEB, archetype);
         map.put(Profile.JAVA_EE_7_FULL, archetype);
         map.put(Profile.JAVA_EE_7_WEB, archetype);
-        Archetype javaEE8Archetype = createArchetype("io.github.juneau001","1.3", "webapp-javaee8");
+        Archetype javaEE8Archetype = createArchetype(
+                NbBundle.getMessage(BaseJ2eeArchetypeProvider.class,"mvn.archetypeGroupId.JavaEE8"),
+                NbBundle.getMessage(BaseJ2eeArchetypeProvider.class,"mvn.archetypeVersion.JavaEE8"),
+                NbBundle.getMessage(BaseJ2eeArchetypeProvider.class,"mvn.archetypeArtifactId.JavaEE8")
+        );
+        Archetype jakartaEE8Archetype = createArchetype(
+                NbBundle.getMessage(BaseJ2eeArchetypeProvider.class,"mvn.archetypeGroupId.JakartaEE8"),
+                NbBundle.getMessage(BaseJ2eeArchetypeProvider.class,"mvn.archetypeVersion.JakartaEE8"),
+                NbBundle.getMessage(BaseJ2eeArchetypeProvider.class,"mvn.archetypeArtifactId.JakartaEE8"));
 
         map.put(Profile.JAVA_EE_8_FULL, javaEE8Archetype);
         map.put(Profile.JAVA_EE_8_WEB, javaEE8Archetype);
+        map.put(Profile.JAKARTA_EE_8_FULL, jakartaEE8Archetype);
+        map.put(Profile.JAKARTA_EE_8_WEB, jakartaEE8Archetype);
     }
 
     private Archetype createMojoArchetype(String version, String artifactId) {
diff --git a/enterprise/j2ee.core/src/org/netbeans/api/j2ee/core/Bundle.properties b/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/ui/wizard/archetype/Bundle.properties
similarity index 72%
copy from enterprise/j2ee.core/src/org/netbeans/api/j2ee/core/Bundle.properties
copy to enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/ui/wizard/archetype/Bundle.properties
index 3d9277d..dfc3d17 100644
--- a/enterprise/j2ee.core/src/org/netbeans/api/j2ee/core/Bundle.properties
+++ b/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/ui/wizard/archetype/Bundle.properties
@@ -1,4 +1,3 @@
-#
 # 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
@@ -15,14 +14,11 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-#
 
-J2EE13.displayName=J2EE 1.3
-J2EE14.displayName=J2EE 1.4
-JavaEE5.displayName=Java EE 5
-JavaEE6Full.displayName=Java EE 6
-JavaEE6Web.displayName=Java EE 6 Web
-JavaEE7Full.displayName=Java EE 7
-JavaEE7Web.displayName=Java EE 7 Web
-JavaEE8Full.displayName=Java EE 8
-JavaEE8Web.displayName=Java EE 8 Web
+# Maven Archetype Properties
+mvn.archetypeGroupId.JakartaEE8=de.rieckpil.archetypes
+mvn.archetypeVersion.JakartaEE8=1.0.0
+mvn.archetypeArtifactId.JakartaEE8=jakartaee8
+mvn.archetypeGroupId.JavaEE8=io.github.juneau001
+mvn.archetypeVersion.JavaEE8=1.3
+mvn.archetypeArtifactId.JavaEE8=webapp-javaee8
diff --git a/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/ui/wizard/archetype/J2eeArchetypeFactory.java b/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/ui/wizard/archetype/J2eeArchetypeFactory.java
index ec3acb8..fb06174 100755
--- a/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/ui/wizard/archetype/J2eeArchetypeFactory.java
+++ b/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/ui/wizard/archetype/J2eeArchetypeFactory.java
@@ -90,7 +90,8 @@ public final class J2eeArchetypeFactory {
     private static class AppClientArchetypes extends BaseJ2eeArchetypeProvider {
         @Override
         protected void setUpProjectArchetypes() {
-            addJavaEE8Archetype(Profile.JAVA_EE_8_FULL,"io.github.juneau001", "1.3", "webapp-javaee8"); //NOI18N
+            addJakartaEEArchetype(Profile.JAKARTA_EE_8_FULL,"mvn.archetypeGroupId.JakartaEE8","mvn.archetypeVersion.JakartaEE8","mvn.archetypeArtifactId.JakartaEE8");
+            addJavaEE8Archetype(Profile.JAVA_EE_8_FULL,"mvn.archetypeGroupId.JavaEE8", "mvn.archetypeVersion.JavaEE8", "mvn.archetypeArtifactId.JavaEE8"); //NOI18N
             addMojoArchetype(Profile.JAVA_EE_7_FULL, "1.1", "appclient-javaee7"); //NOI18N
             addMojoArchetype(Profile.JAVA_EE_6_FULL, "1.0", "appclient-javaee6"); //NOI18N
         //    addMojoArchetype(Profile.JAVA_EE_5, "1.0", "appclient-jee5"); //NOI18N
@@ -101,7 +102,8 @@ public final class J2eeArchetypeFactory {
     private static class EaArchetypes extends BaseJ2eeArchetypeProvider {
         @Override
         protected void setUpProjectArchetypes() {
-            addJavaEE8Archetype(Profile.JAVA_EE_8_FULL,"io.github.juneau001", "1.3", "webapp-javaee8"); //NOI18N
+            addJakartaEEArchetype(Profile.JAKARTA_EE_8_FULL,"mvn.archetypeGroupId.JakartaEE8","mvn.archetypeVersion.JakartaEE8","mvn.archetypeArtifactId.JakartaEE8");
+            addJavaEE8Archetype(Profile.JAVA_EE_8_FULL,"mvn.archetypeGroupId.JavaEE8", "mvn.archetypeVersion.JavaEE8", "mvn.archetypeArtifactId.JavaEE8"); //NOI18N
             addMojoArchetype(Profile.JAVA_EE_7_FULL, "1.1", "pom-root"); //NOI18N
             addMojoArchetype(Profile.JAVA_EE_6_FULL, "1.1", "pom-root"); //NOI18N
         }
@@ -110,7 +112,8 @@ public final class J2eeArchetypeFactory {
     private static class EarArchetypes extends BaseJ2eeArchetypeProvider {
         @Override
         protected void setUpProjectArchetypes() {
-            addJavaEE8Archetype(Profile.JAVA_EE_8_FULL,"io.github.juneau001", "1.3", "webapp-javaee8"); //NOI18N
+            addJakartaEEArchetype(Profile.JAKARTA_EE_8_FULL,"mvn.archetypeGroupId.JakartaEE8","mvn.archetypeVersion.JakartaEE8","mvn.archetypeArtifactId.JakartaEE8");
+            addJavaEE8Archetype(Profile.JAVA_EE_8_FULL,"mvn.archetypeGroupId.JavaEE8", "mvn.archetypeVersion.JavaEE8", "mvn.archetypeArtifactId.JavaEE8"); //NOI18N
             addMojoArchetype(Profile.JAVA_EE_7_FULL, "1.0", "ear-javaee7"); //NOI18N
             addMojoArchetype(Profile.JAVA_EE_6_FULL, "1.5", "ear-javaee6"); //NOI18N
             addMojoArchetype(Profile.JAVA_EE_5, "1.4", "ear-jee5"); //NOI18N
@@ -121,7 +124,8 @@ public final class J2eeArchetypeFactory {
     private static class EjbArchetypes extends BaseJ2eeArchetypeProvider {
         @Override
         protected void setUpProjectArchetypes() {
-            addJavaEE8Archetype(Profile.JAVA_EE_8_FULL,"io.github.juneau001", "1.3", "webapp-javaee8"); //NOI18N
+            addJakartaEEArchetype(Profile.JAKARTA_EE_8_FULL,"mvn.archetypeGroupId.JakartaEE8","mvn.archetypeVersion.JakartaEE8","mvn.archetypeArtifactId.JakartaEE8");
+            addJavaEE8Archetype(Profile.JAVA_EE_8_FULL,"mvn.archetypeGroupId.JavaEE8", "mvn.archetypeVersion.JavaEE8", "mvn.archetypeArtifactId.JavaEE8"); //NOI18N
             addMojoArchetype(Profile.JAVA_EE_7_FULL, "1.1", "ejb-javaee7"); //NOI18N
             addMojoArchetype(Profile.JAVA_EE_6_FULL, "1.5", "ejb-javaee6"); //NOI18N
             addMojoArchetype(Profile.JAVA_EE_5, "1.3", "ejb-jee5"); //NOI18N
@@ -132,7 +136,8 @@ public final class J2eeArchetypeFactory {
     private static class WebArchetypes extends BaseJ2eeArchetypeProvider {
         @Override
         protected void setUpProjectArchetypes() {
-            addJavaEE8Archetype(Profile.JAVA_EE_8_WEB,"io.github.juneau001", "1.3", "webapp-javaee8"); //NOI18N
+            addJakartaEEArchetype(Profile.JAKARTA_EE_8_WEB,"mvn.archetypeGroupId.JakartaEE8","mvn.archetypeVersion.JakartaEE8","mvn.archetypeArtifactId.JakartaEE8");
+            addJavaEE8Archetype(Profile.JAVA_EE_8_WEB,"mvn.archetypeGroupId.JavaEE8", "mvn.archetypeVersion.JavaEE8", "mvn.archetypeArtifactId.JavaEE8"); //NOI18N
             addMojoArchetype(Profile.JAVA_EE_7_WEB, "1.1", "webapp-javaee7"); //NOI18N
             addMojoArchetype(Profile.JAVA_EE_6_WEB, "1.5", "webapp-javaee6"); //NOI18N
           //  addMojoArchetype(Profile.JAVA_EE_5, "1.3", "webapp-jee5"); //NOI18N
@@ -142,7 +147,8 @@ public final class J2eeArchetypeFactory {
             // using Java EE 6 Full profile, then the same profile applies to Ejb, Web and Parent project creation - In that case
             // application is looking for Java EE 6 Full archetype to create the Web project with it, so we need to have it here
             // or otherwise Java EE project would not be created properly
-            addJavaEE8Archetype(Profile.JAVA_EE_8_FULL,"io.github.juneau001", "1.3", "webapp-javaee8"); //NOI18N
+            addJakartaEEArchetype(Profile.JAKARTA_EE_8_FULL,"mvn.archetypeGroupId.JakartaEE8","mvn.archetypeVersion.JakartaEE8","mvn.archetypeArtifactId.JakartaEE8");
+            addJavaEE8Archetype(Profile.JAVA_EE_8_FULL,"mvn.archetypeGroupId.JavaEE8", "mvn.archetypeVersion.JavaEE8", "mvn.archetypeArtifactId.JavaEE8"); //NOI18N
             addMojoArchetype(Profile.JAVA_EE_7_FULL, "1.1", "webapp-javaee7"); //NOI18N
             addMojoArchetype(Profile.JAVA_EE_6_FULL, "1.5", "webapp-javaee6"); //NOI18N
         }
diff --git a/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/web/WebModuleImpl.java b/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/web/WebModuleImpl.java
index ac5fd3f..7b89cf6 100644
--- a/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/web/WebModuleImpl.java
+++ b/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/web/WebModuleImpl.java
@@ -144,6 +144,9 @@ public class WebModuleImpl extends BaseEEModuleImpl implements WebModuleImplemen
             if (Profile.JAVA_EE_8_FULL.equals(pomProfile)) {
                 return Profile.JAVA_EE_8_WEB;
             }
+            if (Profile.JAKARTA_EE_8_FULL.equals(pomProfile)) {
+                return Profile.JAKARTA_EE_8_WEB;
+            }
             return pomProfile;
         }
 
@@ -212,6 +215,8 @@ public class WebModuleImpl extends BaseEEModuleImpl implements WebModuleImplemen
         List<DependencyDesc> javaEE7Full = new ArrayList<>();
         List<DependencyDesc> javaEE8Web = new ArrayList<>();
         List<DependencyDesc> javaEE8Full = new ArrayList<>();
+        List<DependencyDesc> jakartaEE8Web = new ArrayList<>();
+        List<DependencyDesc> jakartaEE8Full = new ArrayList<>();
 
         // Java EE specification
         javaEE5.add(new DependencyDesc("javaee", "javaee-api", "5.0"));
@@ -222,6 +227,8 @@ public class WebModuleImpl extends BaseEEModuleImpl implements WebModuleImplemen
         javaEE7Web.add(new DependencyDesc("javax", "javaee-web-api", "7.0"));
         javaEE8Full.add(new DependencyDesc("javax", "javaee-api", "8.0"));
         javaEE8Web.add(new DependencyDesc("javax", "javaee-web-api", "8.0"));
+        jakartaEE8Web.add(new DependencyDesc("jakarta.platform","jakarta.jakartaee-api","8.0.0"));
+        jakartaEE8Full.add(new DependencyDesc("jakarta.platform","jakarta.jakartaee-web-api","8.0.0"));
 
         // GlassFish implementations
         javaEE5.add(new DependencyDesc("org.glassfish.main.extras", "glassfish-embedded-all", "2"));
@@ -232,7 +239,9 @@ public class WebModuleImpl extends BaseEEModuleImpl implements WebModuleImplemen
         javaEE7Web.add(new DependencyDesc("org.glassfish.main.extras", "glassfish-embedded-web", "4"));
         javaEE8Full.add(new DependencyDesc("org.glassfish.main.extras", "glassfish-embedded-all", "5.1.0"));
         javaEE8Web.add(new DependencyDesc("org.glassfish.main.extras", "glassfish-embedded-web", "5.1.0"));
-
+        jakartaEE8Full.add(new DependencyDesc("org.glassfish.main.extras", "glassfish-embedded-all", "5.1.0"));
+        jakartaEE8Web.add(new DependencyDesc("org.glassfish.main.extras", "glassfish-embedded-web", "5.1.0"));
+        
         // WebLogic implementations
         javaEE5.add(new DependencyDesc("weblogic", "weblogic", "10"));
         javaEE6Full.add(new DependencyDesc("weblogic", "weblogic", "12"));
@@ -251,6 +260,8 @@ public class WebModuleImpl extends BaseEEModuleImpl implements WebModuleImplemen
         javaEEMap.put(Profile.JAVA_EE_7_FULL, javaEE7Full);
         javaEEMap.put(Profile.JAVA_EE_8_WEB, javaEE8Web);
         javaEEMap.put(Profile.JAVA_EE_8_FULL, javaEE8Full);
+        javaEEMap.put(Profile.JAKARTA_EE_8_WEB, jakartaEE8Web);
+        javaEEMap.put(Profile.JAKARTA_EE_8_FULL, jakartaEE8Full);
     }
 
     private static class DependencyDesc {
diff --git a/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/web/WebRecoPrivTemplates.java b/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/web/WebRecoPrivTemplates.java
index e67ccc6..d2707e1 100644
--- a/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/web/WebRecoPrivTemplates.java
+++ b/enterprise/maven.j2ee/src/org/netbeans/modules/maven/j2ee/web/WebRecoPrivTemplates.java
@@ -32,7 +32,7 @@ import org.netbeans.spi.project.ui.RecommendedTemplates;
 
 /**
  * Maven Recommended and Privileged templates implementation for web applications
- * 
+ *
  * @author Martin Janicek
  */
 @org.netbeans.api.annotations.common.SuppressWarnings("EI_EXPOSE_REP")
@@ -46,14 +46,14 @@ import org.netbeans.spi.project.ui.RecommendedTemplates;
     }
 )
 public class WebRecoPrivTemplates implements RecommendedTemplates, PrivilegedTemplates {
-    
+
     private Project project;
 
     public WebRecoPrivTemplates(Project project) {
         this.project = project;
     }
-    
-    
+
+
     private static final String[] WEB_TYPES = new String[] {
         "html5",                // NOI18N
         "servlet-types",        // NOI18N
@@ -97,7 +97,7 @@ public class WebRecoPrivTemplates implements RecommendedTemplates, PrivilegedTem
         "ejb-deployment-descriptor", // NOI18N
     };
 
-    
+
     private static final String[] WEB_PRIVILEGED_NAMES = new String[] {
         "Templates/JSP_Servlet/JSP.jsp",            // NOI18N
         "Templates/JSP_Servlet/Html.html",          // NOI18N
@@ -135,7 +135,7 @@ public class WebRecoPrivTemplates implements RecommendedTemplates, PrivilegedTem
     private static final String[] WEB_PRIVILEGED_NAMES_EE7_WEB = new String[] {
         "Templates/J2EE/TimerSession"   // NOI18N
     };
-    
+
     @Override
     public String[] getRecommendedTypes() {
         WebModule web = WebModule.getWebModule(project.getProjectDirectory());
@@ -161,7 +161,7 @@ public class WebRecoPrivTemplates implements RecommendedTemplates, PrivilegedTem
         }
         return WEB_TYPES;
     }
-    
+
     @Override
     public String[] getPrivilegedTemplates() {
         WebModule web = WebModule.getWebModule(project.getProjectDirectory());
@@ -193,7 +193,8 @@ public class WebRecoPrivTemplates implements RecommendedTemplates, PrivilegedTem
     private boolean isServerSupportingEJB31() {
         if (ProjectUtil.getSupportedProfiles(project).contains(Profile.JAVA_EE_6_FULL) ||
             ProjectUtil.getSupportedProfiles(project).contains(Profile.JAVA_EE_7_FULL) ||
-            ProjectUtil.getSupportedProfiles(project).contains(Profile.JAVA_EE_8_FULL)) {
+            ProjectUtil.getSupportedProfiles(project).contains(Profile.JAVA_EE_8_FULL) ||
+            ProjectUtil.getSupportedProfiles(project).contains(Profile.JAKARTA_EE_8_FULL)) {
 
             return true;
         }
diff --git a/enterprise/maven.j2ee/test/unit/src/org/netbeans/modules/maven/j2ee/JavaEEMavenTestBase.java b/enterprise/maven.j2ee/test/unit/src/org/netbeans/modules/maven/j2ee/JavaEEMavenTestBase.java
index 2e1d485..eb6e030 100644
--- a/enterprise/maven.j2ee/test/unit/src/org/netbeans/modules/maven/j2ee/JavaEEMavenTestBase.java
+++ b/enterprise/maven.j2ee/test/unit/src/org/netbeans/modules/maven/j2ee/JavaEEMavenTestBase.java
@@ -34,56 +34,57 @@ import org.openide.filesystems.test.TestFileUtils;
 /**
  * <p>
  * Base class for Java EE maven tests. Encapsulate basic stuff needed in every test case such as creating new project
- * in a proper folder, setting logger and so on. Allows to easily create projects of different types (Ejb, War, EA, 
+ * in a proper folder, setting logger and so on. Allows to easily create projects of different types (Ejb, War, EA,
  * Package) and offers various methods for creating/updating pom.xml, nb-configuration.xml etc.
  * </p>
- * 
+ *
  * <p>
  * By default Web project is created for each subclass test. For creating different projects just use for example
  * <code>project = createMavenEjbProject(getWorkDir());</code> and so
  * </p>
- * 
+ *
  * @author Martin Janicek
  */
 public abstract class JavaEEMavenTestBase extends NbTestCase {
-    
+
     public  final String WEB_INF = "WEB-INF"; //NOI18N
     public  final String WEB_XML = "web.xml"; //NOI18N
-    
+
     public  final String WEBLOGIC = "WebLogic"; //NOI18N
     public  final String GLASSFISH = "gfv5ee8"; //NOI18N
+    public  final String ECLIPSEGLASSFISH = "gfv510ee8"; //NOI18N
     public  final String TOMCAT = "Tomcat"; //NOI18N
     public  final String JBOSS = "JBoss"; //NOI18N
-    
+
     private  final StringBuilder sb = new StringBuilder();
     protected Project project;
-    
-    
+
+
     protected JavaEEMavenTestBase(String name) {
         super(name);
     }
-    
+
     @Override
     protected Level logLevel() {
         return Level.FINE;
     }
-    
+
     @Override
     protected String logRoot() {
         return "org.netbeans.modules.maven.j2ee"; //NOI18N
     }
-    
+
     @Override
     protected void setUp() throws Exception {
         clearWorkDir();
-        
+
         project = createMavenWebProject();
     }
-    
+
     /**
      * <p>Creates default Maven Web project structure which could be used for tests
      * In file system it seems like this:</p>
-     * 
+     *
      * <pre>
      * |-- pom.xml
      * |
@@ -93,9 +94,9 @@ public abstract class JavaEEMavenTestBase extends NbTestCase {
      *         |-- resources
      *         `-- webapp
      * </pre>
-     * 
+     *
      * For creation of additional files like nb-configuration.xml see MavenTestSupport methods.
-     * 
+     *
      * @param projectDir root directory of the project
      * @return created project with structure described above
      */
@@ -106,7 +107,7 @@ public abstract class JavaEEMavenTestBase extends NbTestCase {
             return null;
         }
     }
-    
+
     protected Project createMavenWebProject(String pom) {
         try {
             return createMavenWebProject(FileUtil.toFileObject(getWorkDir()), pom);
@@ -114,11 +115,11 @@ public abstract class JavaEEMavenTestBase extends NbTestCase {
             return null;
         }
     }
-    
+
     protected Project createMavenWebProject(FileObject projectDir) {
         return createMavenWebProject(projectDir, null);
     }
-    
+
     protected Project createMavenWebProject(FileObject projectDir, String pom) {
         try {
             FileObject src = FileUtil.createFolder(projectDir, "src"); //NOI18N
@@ -132,11 +133,11 @@ public abstract class JavaEEMavenTestBase extends NbTestCase {
             return null;
         }
     }
-    
+
     /**
      * <p>Creates default Maven EJB project structure which could be used for tests
      * In file system it seems like this:</p>
-     * 
+     *
      * <pre>
      * |-- pom.xml
      * |
@@ -145,9 +146,9 @@ public abstract class JavaEEMavenTestBase extends NbTestCase {
      *         |-- java
      *         `-- resources
      * </pre>
-     * 
+     *
      * For creation of additional files like nb-configuration.xml see MavenTestSupport methods.
-     * 
+     *
      * @param projectDir root directory of the project
      * @return created project with structure described above
      */
@@ -158,7 +159,7 @@ public abstract class JavaEEMavenTestBase extends NbTestCase {
             return null;
         }
     }
-    
+
     protected Project createMavenEjbProject(FileObject projectDir) {
         try {
             FileObject src = FileUtil.createFolder(projectDir, "src"); //NOI18N
@@ -168,17 +169,17 @@ public abstract class JavaEEMavenTestBase extends NbTestCase {
 
             PomBuilder pomBuilder = new PomBuilder();
             pomBuilder.appendPomContent(NbMavenProject.TYPE_EJB);
-            
+
             return createProject(projectDir, pomBuilder.buildPom());
         } catch (IOException ex) {
             return null;
         }
     }
-    
+
     /**
      * <p>Creates default Maven Ear project structure which could be used for tests
      * In file system it seems like this:</p>
-     * 
+     *
      * <pre>
      * |-- pom.xml
      * |
@@ -186,9 +187,9 @@ public abstract class JavaEEMavenTestBase extends NbTestCase {
      *     `-- main
      *         `-- application
      * </pre>
-     * 
+     *
      * For creation of additional files like nb-configuration.xml see MavenTestSupport methods.
-     * 
+     *
      * @param projectDir root directory of the project
      * @return created project with structure described above
      */
@@ -199,13 +200,13 @@ public abstract class JavaEEMavenTestBase extends NbTestCase {
             return null;
         }
     }
-    
+
     protected Project createMavenEarProject(FileObject projectDir) {
         try {
             FileObject src = FileUtil.createFolder(projectDir, "src"); //NOI18N
             FileObject main = FileUtil.createFolder(src, "main"); //NOI18N
             FileObject application = FileUtil.createFolder(main, "application"); //NOI18N
-            
+
             PomBuilder pomBuilder = new PomBuilder();
             pomBuilder.appendPomContent(NbMavenProject.TYPE_EAR);
 
@@ -214,11 +215,11 @@ public abstract class JavaEEMavenTestBase extends NbTestCase {
             return null;
         }
     }
-    
+
     /**
      * <p>Creates default Maven Ear project structure which could be used for tests
      * In file system it seems like this:</p>
-     * 
+     *
      * <pre>
      * |-- pom.xml
      * |
@@ -226,18 +227,18 @@ public abstract class JavaEEMavenTestBase extends NbTestCase {
      * |-- projectName-ejb
      * `-- projectName-web
      * </pre>
-     * 
-     * Each of these subdirectories contains default files/folders as well - see 
+     *
+     * Each of these subdirectories contains default files/folders as well - see
      * {@link #createMavenEarProject(File projectDir)}, {@link #createMavenEjbProject(File projectDir)},
      * {@link #createMavenWebProject(File projectDir)}
-     * 
+     *
      * @param projectDir root directory of the project
      * @return created project with structure described above
      */
     protected Project createMavenEAProject(File projectDir) {
         return createMavenEAProject(FileUtil.toFileObject(projectDir));
     }
-    
+
     protected Project createMavenEAProject(FileObject projectDir) {
         try {
             String name = projectDir.getName();
@@ -254,11 +255,11 @@ public abstract class JavaEEMavenTestBase extends NbTestCase {
             return null;
         }
     }
-    
+
     /**
      * <p>Creates default Maven OSGI project structure which could be used for tests
      * In file system it seems like this:</p>
-     * 
+     *
      * <pre>
      * |-- pom.xml
      * |
@@ -268,9 +269,9 @@ public abstract class JavaEEMavenTestBase extends NbTestCase {
      *         |-- java
      *         `-- resources
      * </pre>
-     * 
+     *
      * For creation of additional files like nb-configuration.xml see MavenTestSupport methods.
-     * 
+     *
      * @param projectDir root directory of the project
      * @return created project with structure described above
      */
@@ -281,7 +282,7 @@ public abstract class JavaEEMavenTestBase extends NbTestCase {
             return null;
         }
     }
-    
+
     protected Project createMavenOSGIProject(FileObject projectDir) {
         try {
             FileObject src = FileUtil.createFolder(projectDir, "src"); //NOI18N
@@ -292,55 +293,55 @@ public abstract class JavaEEMavenTestBase extends NbTestCase {
 
             PomBuilder pomBuilder = new PomBuilder();
             pomBuilder.appendPomContent(NbMavenProject.TYPE_OSGI);
-            
+
             return createProject(projectDir, pomBuilder.buildPom());
         } catch (IOException ex) {
             return null;
         }
     }
-    
+
     private Project createProject(FileObject projectDir) throws IOException {
         return createProject(projectDir, null);
     }
-    
+
     private Project createProject(FileObject projectDir, String pom) throws IOException {
         if (pom != null) {
             createPom(projectDir, pom);
         } else {
             createPom(projectDir);
         }
-        
+
         Project createdProject = ProjectManager.getDefault().findProject(projectDir);
 
         return createdProject;
     }
-    
+
     protected FileObject createPom(Project project) throws IOException {
         return TestFileUtils.writeFile(project.getProjectDirectory(), "pom.xml", createDefaultPom()); //NOI18N
     }
- 
+
     protected FileObject createPom(Project project, String pomContent) throws IOException {
         return TestFileUtils.writeFile(project.getProjectDirectory(), "pom.xml", pomContent); //NOI18N
     }
-    
+
     protected FileObject createPom(FileObject workDir) throws IOException {
         return TestFileUtils.writeFile(workDir, "pom.xml", createDefaultPom()); //NOI18N
     }
-    
+
     protected FileObject createPom(FileObject workDir, String pomContent) throws IOException {
         return TestFileUtils.writeFile(workDir, "pom.xml", pomContent); //NOI18N
     }
-    
+
     protected String createSimplePom(String modelVersion, String groupID, String artifactID, String packaging, String version) {
         PomBuilder builder = new PomBuilder();
-        
+
         builder.appendPomContent(modelVersion, groupID, artifactID, packaging, version);
         return builder.buildPom();
     }
-    
+
     private String createDefaultPom() {
         PomBuilder builder = new PomBuilder();
-        
+
         builder.appendDefaultTestValues();
         return builder.buildPom();
     }
@@ -348,19 +349,19 @@ public abstract class JavaEEMavenTestBase extends NbTestCase {
     protected FileObject createWebXml(FileObject projectDir) throws IOException {
         return DDHelper.createWebXml(Profile.JAVA_EE_6_WEB, getWebInf(projectDir));
     }
-    
+
     private FileObject getWebInf(FileObject projectDir) throws IOException {
         return FileUtil.createFolder(projectDir, "src/main/webapp/WEB-INF"); //NOI18N
     }
-    
+
     protected FileObject createNbActions(Project project) throws IOException {
         return TestFileUtils.writeFile(project.getProjectDirectory(), "nbactions.xml", createNbActionContent()); //NOI18N
     }
-    
+
     // TODO should be parametrizeable
     private String createNbActionContent() {
         return "<actions>" +
-                    "<action>" + 
+                    "<action>" +
                         "<actionName>run</actionName>" +
                         "<goals>" +
                             "<goal>package</goal>" +
@@ -368,45 +369,45 @@ public abstract class JavaEEMavenTestBase extends NbTestCase {
                     "</action>" +
                 "</actions>"; //NOI18N
     }
-    
+
     protected FileObject createNbConfiguration(Project project) throws IOException {
         return TestFileUtils.writeFile(project.getProjectDirectory(), "nb-configuration.xml", createNbConfigContent()); //NOI18N
     }
-    
+
     private String createNbConfigContent() {
         return createNbConfigContent(null);
     }
-    
+
     private String createNbConfigContent(String compileOnSave) {
         sb.delete(0, sb.length());
         sb.append("<project-shared-configuration>"); //NOI18N
         sb.append("    <properties xmlns=\"http://www.netbeans.org/ns/maven-properties-data/1\">"); //NOI18N
-        
+
         if (compileOnSave != null) {
             sb.append("<netbeans.compile.on.save>"); //NOI18N
             sb.append(compileOnSave);
             sb.append("</netbeans.compile.on.save>"); //NOI18N
         }
-        
+
         sb.append("    </properties>"); //NOI18N
         sb.append("</project-shared-configuration>"); //NOI18N
-        
+
         return sb.toString();
     }
-    
+
     protected boolean isWebDDpresent(FileObject projectDir) {
         FileObject src = projectDir.getFileObject("src"); //NOI18N
         FileObject main = src.getFileObject("main"); //NOI18N
         FileObject webapp = main.getFileObject("webapp"); //NOI18N
         FileObject webInf = webapp.getFileObject(WEB_INF);
-        
+
         if (webInf == null) {
             return false;
         }
-        
+
         return webInf.getFileObject(WEB_XML) != null ? true : false;
     }
-    
+
     protected boolean isWebDDpresent(Project project) {
         return isWebDDpresent(project.getProjectDirectory());
     }
diff --git a/enterprise/payara.jakartaee/src/org/netbeans/modules/payara/jakartaee/Hk2JavaEEPlatformImpl.java b/enterprise/payara.jakartaee/src/org/netbeans/modules/payara/jakartaee/Hk2JavaEEPlatformImpl.java
index 3e1c9bd..ca91909 100644
--- a/enterprise/payara.jakartaee/src/org/netbeans/modules/payara/jakartaee/Hk2JavaEEPlatformImpl.java
+++ b/enterprise/payara.jakartaee/src/org/netbeans/modules/payara/jakartaee/Hk2JavaEEPlatformImpl.java
@@ -64,13 +64,13 @@ import org.openide.util.Lookup;
 import org.openide.util.RequestProcessor;
 import org.openide.util.Utilities;
 import org.openide.util.lookup.Lookups;
-    
+
 /**
  *
  * @author Ludo, Tomas Kraus
  */
 public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
-    
+
     /** Deployment manager. */
     private final Hk2DeploymentManager dm;
 
@@ -149,8 +149,8 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
         }
         return platforms;
     }
-            
-    
+
+
     /**
      * Map Payara tooling SDK JavaEE profiles to NetBeans JavaEE profiles.
      * <p/>
@@ -191,6 +191,10 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
                                break;
                 case v1_8:     profiles[index++] = Profile.JAVA_EE_8_FULL;
                                break;
+                case v8_0_0_web: profiles[index++] = Profile.JAKARTA_EE_8_WEB;
+                               break;
+                case v8_0_0:     profiles[index++] = Profile.JAKARTA_EE_8_FULL;
+                               break;
             }
         } else {
             profiles = new Profile[0];
@@ -280,7 +284,7 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
     ////////////////////////////////////////////////////////////////////////////
     // Constructors                                                           //
     ////////////////////////////////////////////////////////////////////////////
-    
+
     /**
      * Creates an instance of Payara JavaEE platform.
      * <p/>
@@ -360,7 +364,7 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
     // Persistence provider strings
     private static final String PERSISTENCE_PROV_ECLIPSELINK = "org.eclipse.persistence.jpa.PersistenceProvider"; //NOI18N
 
-    // WEB SERVICES PROPERTIES 
+    // WEB SERVICES PROPERTIES
     // TODO - shall be removed and usages replaced by values from j2eeserver or websvc apis after api redesign
     private static final String TOOL_WSCOMPILE = "wscompile";
     private static final String TOOL_JSR109 = "jsr109";
@@ -385,9 +389,9 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
     private static final String GF_ACC_XML = "glassfish-acc.xml";
 
     /**
-     * 
-     * @param toolName 
-     * @return 
+     *
+     * @param toolName
+     * @return
      */
     @Override
     public boolean isToolSupported(String toolName) {
@@ -402,7 +406,7 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
                 "org.apache.openjpa.persistence.PersistenceProviderImpl".equals(toolName)) { //NOI18N
             return true;
         }
-        
+
         if("defaultPersistenceProviderJavaEE5".equals(toolName)) {  //NOI18N
             return true;
         }
@@ -416,7 +420,7 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
         }
 
         File wsLib = null;
-        
+
         if (gfRootStr != null) {
             wsLib = ServerUtilities.getJarName(gfRootStr, "webservices(|-osgi).jar");
         }
@@ -457,14 +461,14 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
                 return true;
             }
         }
-        
-        return false;     
+
+        return false;
     }
-    
+
     /**
-     * 
-     * @param toolName 
-     * @return 
+     *
+     * @param toolName
+     * @return
      */
     @Override
     public File[] getToolClasspathEntries(String toolName) {
@@ -526,7 +530,7 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
         } else {
             Logger.getLogger("payara-jakartaee").log(Level.INFO, "dm has no root???", new Exception());
         }
-        
+
         return new File[0];
     }
 
@@ -539,7 +543,7 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
     public Set<Profile> getSupportedProfiles() {
         return profilesSetFromArray(profiles);
     }
-    
+
     /**
      * Get supported JavaEE profiles.
      * <p/>
@@ -560,10 +564,10 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
         return moduleTypesSetFromArray(types);
     }
 
-    
+
     /**
-     * 
-     * @return 
+     *
+     * @return
      */
     @Override
     public java.io.File[] getPlatformRoots() {
@@ -588,26 +592,26 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
     public File getMiddlewareHome() {
         return getExistingFolder(dm.getProperties().getInstallRoot());
     }
-    
+
     /**
-     * 
-     * @return 
+     *
+     * @return
      */
     @Override
     public LibraryImplementation[] getLibraries() {
         addFcl();
         return libraries.clone();
     }
-    
+
     /**
-     * 
-     * @return 
+     *
+     * @return
      */
     @Override
     public java.awt.Image getIcon() {
         return ImageUtilities.loadImage("org/netbeans/modules/j2ee/hk2/resources/server.gif"); // NOI18N
     }
-    
+
     /**
      * Get Payara JavaEE platform display name.
      * <p/>
@@ -617,7 +621,7 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
     public String getDisplayName() {
         return displayName;
     }
-    
+
     /**
      * Get supported JavaSE platforms.
      * <p/>
@@ -627,7 +631,7 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
     public Set getSupportedJavaPlatformVersions() {
         return platformsSetFromArray(platforms);
     }
-    
+
     /**
      * Get default Payara JavaSE platform.
      * <p/>
@@ -639,9 +643,9 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
     public JavaPlatform getJavaPlatform() {
         return null;
     }
-    
+
     /**
-     * 
+     *
      */
     public void notifyLibrariesChanged() {
         initLibraries();
@@ -649,7 +653,7 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
 
     private static final RequestProcessor libInitThread =
             new RequestProcessor("init libs -- Hk2JavaEEPlatformImpl");
-    
+
      private void initLibraries() {
         libInitThread.post(new Runnable() {
 
@@ -731,7 +735,7 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
         sb.append(accConfigFile);
         return sb.toString();
     }
-    
+
     @Override
     public String getToolProperty(String toolName, String propertyName) {
         if (J2eePlatform.TOOL_APP_CLIENT_RUNTIME.equals(toolName)) {
@@ -798,7 +802,7 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
     }
 
     private class JaxRsStackSupportImpl implements JaxRsStackSupportImplementation {
-        
+
         // Bug# 233840 - Fixing to avoid AssertionError and provide library
         // for GF4. But JAR names remain hardcoded. This shall be rewritten
         // to use Hk2LibraryProvider!
@@ -871,24 +875,24 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
                 return addJars( project , urls );
             }*/
         }
-        
+
         @Override
         public void removeJaxRsLibraries(final Project project) {
             final Library library = libraryProvider.getJerseyLibrary();
             final FileObject sourceRoot = getSourceRoot(project);
             if ( sourceRoot != null){
-                final String[] classPathTypes = new String[]{ ClassPath.COMPILE , 
+                final String[] classPathTypes = new String[]{ ClassPath.COMPILE ,
                         JavaClassPathConstants.COMPILE_ONLY };
                 for (String type : classPathTypes) {
                     try {
                         ProjectClassPathModifier.removeLibraries( new Library[]{
                                 library} ,sourceRoot, type);
-                    }    
+                    }
                     catch (UnsupportedOperationException | IOException ex) {
                         Logger.getLogger(JaxRsStackSupportImpl.class.getName()).
                                 log (Level.INFO, null , ex );
                     }
-                }     
+                }
             }
             /*List<URL> urls = getJerseyLibraryURLs();
             if ( urls.sdkSize() >0 ){
@@ -901,9 +905,9 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
                 String[] classPathTypes = new String[]{ ClassPath.COMPILE , ClassPath.EXECUTE };
                 for (String type : classPathTypes) {
                     try {
-                        ProjectClassPathModifier.removeRoots(urls.toArray( 
+                        ProjectClassPathModifier.removeRoots(urls.toArray(
                             new URL[ urls.sdkSize()]), sourceRoot, type);
-                    }    
+                    }
                     catch(UnsupportedOperationException ex) {
                         Logger.getLogger( JaxRsStackSupportImpl.class.getName() ).
                                 log (Level.INFO, null , ex );
@@ -912,14 +916,14 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
                         Logger.getLogger( JaxRsStackSupportImpl.class.getName() ).
                                 log(Level.INFO, null , e );
                     }
-                }     
+                }
             }*/
         }
-        
+
         @Override
         public void configureCustomJersey( Project project ){
         }
-        
+
         /* (non-Javadoc)
          * @see org.netbeans.modules.javaee.specs.support.spi.JaxRsStackSupportImplementation#isBundled(java.lang.String)
          */
@@ -947,13 +951,13 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
             }
             return sourceGroups[0].getRootFolder();
         }
-        
+
         private boolean hasJee6Profile(){
             final Set<Profile> profiles = getSupportedProfiles();
-            return profiles.contains(Profile.JAVA_EE_6_FULL) || 
+            return profiles.contains(Profile.JAVA_EE_6_FULL) ||
                 profiles.contains(Profile.JAVA_EE_6_WEB) ;
         }
-        
+
         private void addURL(final Collection<URL> urls, final File file ){
             if ( file == null || !file.exists()) {
                 return;
@@ -964,7 +968,7 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
                 // ignore the file
             }
         }
-        
+
         private boolean addJars(final Project project, Collection<URL> jars ){
             final List<URL> urls = new ArrayList<>();
             for (URL url : jars) {
@@ -986,15 +990,15 @@ public class Hk2JavaEEPlatformImpl extends J2eePlatformImpl2 {
                 else {
                     classPathType = ClassPath.COMPILE;
                 }
-                ProjectClassPathModifier.addRoots(urls.toArray( new URL[ urls.size()]), 
+                ProjectClassPathModifier.addRoots(urls.toArray( new URL[ urls.size()]),
                         sourceRoot, classPathType );
-            } 
+            }
             catch (UnsupportedOperationException | IOException ex) {
                 return false;
             }
             return true;
         }
-        
+
         /**
          * Get Payara version from instance stored in deployment manager.
          * <p/>
diff --git a/enterprise/payara.jakartaee/src/org/netbeans/modules/payara/jakartaee/Hk2JaxWsStack.java b/enterprise/payara.jakartaee/src/org/netbeans/modules/payara/jakartaee/Hk2JaxWsStack.java
index 29af133..2188141 100644
--- a/enterprise/payara.jakartaee/src/org/netbeans/modules/payara/jakartaee/Hk2JaxWsStack.java
+++ b/enterprise/payara.jakartaee/src/org/netbeans/modules/payara/jakartaee/Hk2JaxWsStack.java
@@ -52,27 +52,29 @@ public class Hk2JaxWsStack implements WSStackImplementation<JaxWs> {
                           "javax.ejb.jar", //NOI18N
                           "javax.activation.jar"}; //NOI18N
     private static final String PF_MODULES_DIR_NAME = "modules"; // NOI18N
-    
+
     private String pfRootStr;
     private JaxWs jaxWs;
     private Hk2JavaEEPlatformImpl platform;
-    
+
     public Hk2JaxWsStack(String pfRootStr, Hk2JavaEEPlatformImpl platform ) {
         this.pfRootStr = pfRootStr;
         jaxWs = new JaxWs(getUriDescriptor());
         this.platform = platform;
     }
 
-    
+
     @Override
     public JaxWs get() {
         return jaxWs;
     }
-    
+
     @Override
     public WSStackVersion getVersion() {
         Set<Profile> supportedProfiles = platform.getSupportedProfiles();
-        if (supportedProfiles.contains(Profile.JAVA_EE_8_FULL)
+        if (supportedProfiles.contains(Profile.JAKARTA_EE_8_FULL)
+                || supportedProfiles.contains(Profile.JAKARTA_EE_8_WEB)
+                || supportedProfiles.contains(Profile.JAVA_EE_8_FULL)
                 || supportedProfiles.contains(Profile.JAVA_EE_8_WEB)
                 || supportedProfiles.contains(Profile.JAVA_EE_7_FULL)
                 || supportedProfiles.contains(Profile.JAVA_EE_7_WEB)
@@ -100,7 +102,7 @@ public class Hk2JaxWsStack implements WSStackImplementation<JaxWs> {
             return null;
         }
     }
-    
+
     @Override
     public boolean isFeatureSupported(Feature feature) {
         if (feature == JaxWs.Feature.WSIT && isMetroInstalled()) {
@@ -109,15 +111,15 @@ public class Hk2JaxWsStack implements WSStackImplementation<JaxWs> {
         if (feature == JaxWs.Feature.JSR109 && isMetroInstalled()) {
             return true;
         }
-        return feature == JaxWs.Feature.TESTER_PAGE;   
+        return feature == JaxWs.Feature.TESTER_PAGE;
     }
-    
+
     private JaxWs.UriDescriptor getUriDescriptor() {
         return new JaxWs.UriDescriptor() {
 
             @Override
-            public String getServiceUri(String applicationRoot, String serviceName, 
-                    String portName, boolean isEjb) 
+            public String getServiceUri(String applicationRoot, String serviceName,
+                    String portName, boolean isEjb)
             {
                 if (isEjb) {
                     return serviceName+"/"+portName; //NOI18N
@@ -135,25 +137,25 @@ public class Hk2JaxWsStack implements WSStackImplementation<JaxWs> {
             }
 
             @Override
-            public String getDescriptorUri(String applicationRoot, 
-                    String serviceName, String portName, boolean isEjb) 
+            public String getDescriptorUri(String applicationRoot,
+                    String serviceName, String portName, boolean isEjb)
             {
-                return getServiceUri(applicationRoot, serviceName, portName, 
+                return getServiceUri(applicationRoot, serviceName, portName,
                         isEjb)+"?wsdl"; //NOI18N
             }
 
             @Override
-            public String getTesterPageUri(String host, String port, 
-                    String applicationRoot, String serviceName, String portName, 
-                        boolean isEjb) 
+            public String getTesterPageUri(String host, String port,
+                    String applicationRoot, String serviceName, String portName,
+                        boolean isEjb)
             {
-                return "http://"+host+":"+port+"/"+getServiceUri(applicationRoot, 
+                return "http://"+host+":"+port+"/"+getServiceUri(applicationRoot,
                         serviceName, portName, isEjb)+"?Tester"; //NOI18N
             }
-            
+
         };
     }
-    
+
     protected class JaxWsTool implements WSToolImplementation {
         JaxWs.Tool tool;
         JaxWsTool(JaxWs.Tool tool) {
@@ -182,9 +184,9 @@ public class Hk2JaxWsStack implements WSStackImplementation<JaxWs> {
             }
             return cPath.toArray(new URL[cPath.size()]);
         }
-      
+
     }
-    
+
     protected boolean isMetroInstalled() {
         File f = getWsJarName(pfRootStr, METRO_LIBRARIES[0]);
         return f!=null && f.exists();
@@ -205,10 +207,10 @@ public class Hk2JaxWsStack implements WSStackImplementation<JaxWs> {
 
     }
 
-    public static File getWsJarName(String glassfishInstallRoot, 
-            String jarNamePattern) 
+    public static File getWsJarName(String glassfishInstallRoot,
+            String jarNamePattern)
     {
-        File modulesDir = new File(glassfishInstallRoot + File.separatorChar + 
+        File modulesDir = new File(glassfishInstallRoot + File.separatorChar +
                 PF_MODULES_DIR_NAME);
         int subindex = jarNamePattern.lastIndexOf("/");
         if(subindex != -1) {
diff --git a/enterprise/payara.tooling/nbproject/org-netbeans-modules-payara-tooling.sig b/enterprise/payara.tooling/nbproject/org-netbeans-modules-payara-tooling.sig
index 80637ac..9121a5c 100644
--- a/enterprise/payara.tooling/nbproject/org-netbeans-modules-payara-tooling.sig
+++ b/enterprise/payara.tooling/nbproject/org-netbeans-modules-payara-tooling.sig
@@ -1753,6 +1753,8 @@ fld public final static org.netbeans.modules.payara.tooling.server.config.JavaEE
 fld public final static org.netbeans.modules.payara.tooling.server.config.JavaEEProfile v1_7_web
 fld public final static org.netbeans.modules.payara.tooling.server.config.JavaEEProfile v1_8
 fld public final static org.netbeans.modules.payara.tooling.server.config.JavaEEProfile v1_8_web
+fld public final static org.netbeans.modules.payara.tooling.server.config.JavaEEProfile v8_0_0
+fld public final static org.netbeans.modules.payara.tooling.server.config.JavaEEProfile v8_0_0_web
 innr public final static !enum Type
 innr public final static !enum Version
 meth public java.lang.String toString()
@@ -2497,4 +2499,3 @@ meth public void startPrefixMapping(java.lang.String,java.lang.String) throws or
 meth public void unparsedEntityDecl(java.lang.String,java.lang.String,java.lang.String,java.lang.String) throws org.xml.sax.SAXException
 meth public void warning(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException
 supr java.lang.Object
-
diff --git a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/config/JavaEEProfile.java b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/config/JavaEEProfile.java
index 4d67c49..743e637 100644
--- a/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/config/JavaEEProfile.java
+++ b/enterprise/payara.tooling/src/org/netbeans/modules/payara/tooling/server/config/JavaEEProfile.java
@@ -55,12 +55,18 @@ public enum JavaEEProfile {
 
     /** JavaEE 1.7 full profile. */
     v1_7(Version.v1_7, Type.FULL, "1.7"),
-    
+
     /** JavaEE 1.8 web profile. */
     v1_8_web(Version.v1_8, Type.WEB, "1.8-web"),
 
     /** JavaEE 1.8 full profile. */
-    v1_8(Version.v1_8, Type.FULL, "1.8");
+    v1_8(Version.v1_8, Type.FULL, "1.8"),
+
+    /** JakartaEE 8 web profile. */
+    v8_0_0_web(Version.v8_0_0, Type.WEB, "8.0.0-web"),
+
+    /** JakartaEE 8 full profile. */
+    v8_0_0(Version.v8_0_0, Type.FULL, "8.0.0");
 
     ////////////////////////////////////////////////////////////////////////////
     // Inner enums                                                            //
@@ -112,7 +118,10 @@ public enum JavaEEProfile {
         /** JavaEE 1.7. */
         v1_7("1.7"),
         /** JavaEE 1.8. */
-        v1_8("1.8");
+        v1_8("1.8"),
+        /** Jakarta EE 8 */
+        v8_0_0("8.0.0");
+
 
         /** JavaEE profile type name. */
         private final String name;
@@ -137,18 +146,18 @@ public enum JavaEEProfile {
             return this.name;
         }
     }
-    
+
     ////////////////////////////////////////////////////////////////////////////
     // Class attributes                                                       //
     ////////////////////////////////////////////////////////////////////////////
 
     /** Payara JavaEE profile enumeration length. */
     public static final int length = JavaEEProfile.values().length;
-    
+
     /** JavaEE profile type element separator character. */
     public static final char TYPE_SEPARATOR = '-';
 
-    /** 
+    /**
      * Stored <code>String</code> values for backward <code>String</code>
      * conversion.
      */
@@ -202,7 +211,7 @@ public enum JavaEEProfile {
                         ServerConfigException.INVALID_EE_PLATFORM_TYPE);
         }
         return names;
-    } 
+    }
 
     /**
      * Returns a <code>JavaEEProfile</code> with a value represented by the
@@ -211,7 +220,7 @@ public enum JavaEEProfile {
      * matches any <code>String</code> returned by <code>toString</code> method.
      * Otherwise <code>null</code> value is returned.
      * <p>
-     * @param name Value containing <code>JavaEEProfile</code> 
+     * @param name Value containing <code>JavaEEProfile</code>
      *                    <code>toString</code> representation.
      * @return <code>JavaEEProfile</code> value represented
      *         by <code>String</code> or <code>null</code> if value
diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/JSFFrameworkProvider.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/JSFFrameworkProvider.java
index a13382b..443828a 100644
--- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/JSFFrameworkProvider.java
+++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/JSFFrameworkProvider.java
@@ -637,7 +637,7 @@ public class JSFFrameworkProvider extends WebFrameworkProvider {
                             if (jsfVersion != null && !jsfVersion.isAtLeast(JSFVersion.JSF_2_0) && !isMyFaces) {
                                 ViewHandler viewHandler = model.getFactory().createViewHandler();
                                 viewHandler.setFullyQualifiedClassType(HANDLER);
-                                application.addViewHandler(viewHandler);                                
+                                application.addViewHandler(viewHandler);
                             }
 //                            // A component library may require a render kit
 //                            if (isJSF20Plus && panel.getJsfComponentDescriptor() != null) {
@@ -741,7 +741,7 @@ public class JSFFrameworkProvider extends WebFrameworkProvider {
             String shortName;
             try {
                 shortName = Deployment.getDefault().getServerInstance(serverInstanceID).getServerID();
-                if ("gfv5ee8".equals(shortName) || "gfv5".equals(shortName) || "gfv3ee6".equals(shortName) || "gfv3".equals(shortName)) {
+                if ("gfv510ee8".equals(shortName) || "gfv5ee8".equals(shortName) || "gfv5".equals(shortName) || "gfv3ee6".equals(shortName) || "gfv3".equals(shortName)) {
                     return true;
                 }
             } catch (InstanceRemovedException ex) {
diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/FacesConfigIterator.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/FacesConfigIterator.java
index e2c26de..a11941d 100644
--- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/FacesConfigIterator.java
+++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/FacesConfigIterator.java
@@ -189,7 +189,9 @@ public class FacesConfigIterator implements TemplateWizard.Iterator {
             J2eePlatform j2eePlatform = ProjectUtil.getPlatform(project);
             if (j2eePlatform != null) {
                 Set<Profile> serverProfiles = j2eePlatform.getSupportedProfiles();
-                if (serverProfiles.contains(Profile.JAVA_EE_8_WEB) || serverProfiles.contains(Profile.JAVA_EE_8_FULL)) {
+                if (serverProfiles.contains(Profile.JAKARTA_EE_8_WEB) || serverProfiles.contains(Profile.JAKARTA_EE_8_FULL)) {
+                    return JSFCatalog.RES_FACES_CONFIG_2_3;
+                } else if (serverProfiles.contains(Profile.JAVA_EE_8_WEB) || serverProfiles.contains(Profile.JAVA_EE_8_FULL)) {
                     return JSFCatalog.RES_FACES_CONFIG_2_3;
                 } else if (serverProfiles.contains(Profile.JAVA_EE_7_WEB) || serverProfiles.contains(Profile.JAVA_EE_7_FULL)) {
                     return JSFCatalog.RES_FACES_CONFIG_2_2;
@@ -362,7 +364,7 @@ public class FacesConfigIterator implements TemplateWizard.Iterator {
             }
             return true;
         }
-        
+
     }
 
 }
diff --git a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/JSFConfigurationPanelVisual.java b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/JSFConfigurationPanelVisual.java
index ca9082d..b22f133 100644
--- a/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/JSFConfigurationPanelVisual.java
+++ b/enterprise/web.jsf/src/org/netbeans/modules/web/jsf/wizards/JSFConfigurationPanelVisual.java
@@ -151,7 +151,7 @@ public class JSFConfigurationPanelVisual extends javax.swing.JPanel implements H
     /** Cached all JSF libraries */
     private static volatile boolean jsfLibrariesCacheDirty = true;
     private static final List<Library> JSF_LIBRARIES_CACHE = new CopyOnWriteArrayList<>();
-    
+
     /** Map used for faster seek of JSF registered libraries. */
     private static final Map<Boolean, String> JSF_SEEKING_MAP = new LinkedHashMap<>(2);
 
diff --git a/enterprise/web.kit/test/qa-functional/src/org/netbeans/test/web/MavenWebProjectValidation.java b/enterprise/web.kit/test/qa-functional/src/org/netbeans/test/web/MavenWebProjectValidation.java
index 4824291..843650f 100644
--- a/enterprise/web.kit/test/qa-functional/src/org/netbeans/test/web/MavenWebProjectValidation.java
+++ b/enterprise/web.kit/test/qa-functional/src/org/netbeans/test/web/MavenWebProjectValidation.java
@@ -98,6 +98,8 @@ public class MavenWebProjectValidation extends WebProjectValidation {
             serverStep.cboJavaEEVersion().selectItem("1.7-web");
         } else if (JAVA_EE_8.equals(getEEVersion())) {
             serverStep.cboJavaEEVersion().selectItem("1.8-web");
+        } else if (JAKARTA_EE_8.equals(getEEVersion())) {
+            serverStep.cboJavaEEVersion().selectItem("1.8.0-web");
         }
         serverStep.finish();
         // need to increase time to wait for project node
diff --git a/enterprise/web.kit/test/qa-functional/src/org/netbeans/test/web/WebProjectValidation.java b/enterprise/web.kit/test/qa-functional/src/org/netbeans/test/web/WebProjectValidation.java
index f0c576e..ae077a8 100644
--- a/enterprise/web.kit/test/qa-functional/src/org/netbeans/test/web/WebProjectValidation.java
+++ b/enterprise/web.kit/test/qa-functional/src/org/netbeans/test/web/WebProjectValidation.java
@@ -90,6 +90,7 @@ public class WebProjectValidation extends J2eeTestCase {
     public static final String JAVA_EE_6 = "Java EE 6";
     public static final String JAVA_EE_7 = "Java EE 7";
     public static final String JAVA_EE_8 = "Java EE 8";
+    public static final String JAKARTA_EE_8 = "Jakarta EE 8";
     // location of sample project
     protected static String PROJECT_LOCATION;
     // name of sample project
@@ -797,7 +798,7 @@ public class WebProjectValidation extends J2eeTestCase {
     public void assertContains(String text, String value) {
         assertTrue("Assertation failed, cannot find:\n" + value + "\nin the following text:\n" + text, text.contains(value));
     }
-    
+
     /**
      * Opens URL connection and waits for given text. It throws
      * TimeoutExpiredException if timeout expires.
diff --git a/enterprise/web.project/src/org/netbeans/modules/web/project/ProjectWebModule.java b/enterprise/web.project/src/org/netbeans/modules/web/project/ProjectWebModule.java
index b2c039e..237dae9 100644
--- a/enterprise/web.project/src/org/netbeans/modules/web/project/ProjectWebModule.java
+++ b/enterprise/web.project/src/org/netbeans/modules/web/project/ProjectWebModule.java
@@ -72,21 +72,21 @@ import org.openide.filesystems.FileEvent;
  * @author  Pavel Buzek
  * @author ads
  */
-public final class ProjectWebModule extends J2eeModuleProvider 
-        implements J2eeModuleImplementation2, ModuleChangeReporter, 
+public final class ProjectWebModule extends J2eeModuleProvider
+        implements J2eeModuleImplementation2, ModuleChangeReporter,
         EjbChangeDescriptor, PropertyChangeListener,
-        Lookup.Provider 
+        Lookup.Provider
 {
-      
+
     public static final String FOLDER_WEB_INF = "WEB-INF";//NOI18N
 //    public static final String FOLDER_CLASSES = "classes";//NOI18N
 //    public static final String FOLDER_LIB     = "lib";//NOI18N
     public static final String FILE_DD        = "web.xml";//NOI18N
-    
+
     public static final String LOOKUP_ITEM    = "lookup.item";//NOI18N
 
     private final ResourceChangeReporter rcr = ResourceChangeReporterFactory.createResourceChangeReporter(new WebResourceChangeReporter());
-    
+
     private WebProject project;
     private UpdateHelper helper;
     private ClassPathProviderImpl cpProvider;
@@ -95,13 +95,13 @@ public final class ProjectWebModule extends J2eeModuleProvider
     private InstanceContent myContent;
 
     private long notificationTimeout = 0; // used to suppress repeating the same messages
-    
+
     private MetadataModel<WebAppMetadata> webAppMetadataModel;
     private MetadataModel<WebAppMetadata> webAppAnnMetadataModel;
     private MetadataModel<WebservicesMetadata> webservicesMetadataModel;
-  
+
     private PropertyChangeSupport propertyChangeSupport;
-    
+
     private J2eeModule j2eeModule;
 
     ProjectWebModule (WebProject project, UpdateHelper helper, ClassPathProviderImpl cpProvider) {
@@ -112,11 +112,11 @@ public final class ProjectWebModule extends J2eeModuleProvider
         myLookup = new AbstractLookup( myContent );
         //project.evaluator().addPropertyChangeListener(this);
     }
-    
+
     public Lookup getLookup(){
         return myLookup;
     }
-    
+
     public void addCookie( Object cookie ){
         if ( cookie == null ){
             return;
@@ -125,7 +125,7 @@ public final class ProjectWebModule extends J2eeModuleProvider
         myContent.add( cookie );
         getPropertyChangeSupport().firePropertyChange(LOOKUP_ITEM, old, cookie);
     }
-    
+
     public void removeCookie( Object cookie ){
         if ( cookie == null ){
             return;
@@ -133,7 +133,7 @@ public final class ProjectWebModule extends J2eeModuleProvider
         myContent.remove( cookie);
         getPropertyChangeSupport().firePropertyChange(LOOKUP_ITEM, cookie, null);
     }
-    
+
     public FileObject getDeploymentDescriptor() {
         return getDeploymentDescriptor(false);
     }
@@ -144,7 +144,7 @@ public final class ProjectWebModule extends J2eeModuleProvider
             return null;
         }
         FileObject dd = webInfFo.getFileObject (FILE_DD);
-        if (dd == null && !silent 
+        if (dd == null && !silent
                 && (Profile.J2EE_13.equals(getJ2eeProfile()) ||
                     Profile.J2EE_14.equals(getJ2eeProfile()))) {
             showErrorMessage(NbBundle.getMessage(ProjectWebModule.class,"MSG_WebXmlNotFound", //NOI18N
@@ -161,7 +161,7 @@ public final class ProjectWebModule extends J2eeModuleProvider
             return null;
         }
     }
-    
+
     public void setContextPath (String path) {
         try {
             getConfigSupport().setWebContextRoot(path);
@@ -169,20 +169,20 @@ public final class ProjectWebModule extends J2eeModuleProvider
             Exceptions.printStackTrace(e);
         }
     }
-    
+
     public String getContextPath (String serverInstId) {
         fakeServerInstId = serverInstId;
         String result = getContextPath();
         fakeServerInstId = null;
         return result;
     }
-    
+
     public void setContextPath (String serverInstId, String path) {
         fakeServerInstId = serverInstId;
         setContextPath(path);
         fakeServerInstId = null;
     }
-    
+
     private void showErrorMessage(final String message) {
         synchronized (this) {
             if(new Date().getTime() > notificationTimeout && isProjectOpened()) {
@@ -196,7 +196,7 @@ public final class ProjectWebModule extends J2eeModuleProvider
         // #240818
         DialogDisplayer.getDefault().notifyLater(new NotifyDescriptor.Message(message, NotifyDescriptor.ERROR_MESSAGE));
     }
-    
+
     public FileObject getDocumentBase () {
         return getDocumentBase(false);
     }
@@ -227,7 +227,7 @@ public final class ProjectWebModule extends J2eeModuleProvider
     public FileObject[] getJavaSources() {
         return project.getSourceRoots().getRoots();
     }
-    
+
 //    public ClassPath getJavaSources () {
 //        ClassPathProvider cpp = (ClassPathProvider) project.getLookup ().lookup (ClassPathProvider.class);
 //        if (cpp != null) {
@@ -235,11 +235,11 @@ public final class ProjectWebModule extends J2eeModuleProvider
 //        }
 //        return null;
 //    }
-    
+
     public FileObject getWebInf () {
         return getWebInf(false);
     }
-    
+
     public FileObject getWebInf (boolean silent) {
         String value = helper.getAntProjectHelper().getStandardPropertyEvaluator()
                 .getProperty(WebProjectProperties.WEBINF_DIR);
@@ -294,31 +294,31 @@ public final class ProjectWebModule extends J2eeModuleProvider
         }
         return webInf;
     }
-    
+
     public FileObject getConfDir() {
         return getFileObject(WebProjectProperties.CONF_DIR);
     }
-    
+
     public File getConfDirAsFile() {
         return getFile(WebProjectProperties.CONF_DIR);
     }
-    
+
     public FileObject getPersistenceXmlDir() {
         return getFileObject(WebProjectProperties.PERSISTENCE_XML_DIR);
     }
-    
+
     public File getPersistenceXmlDirAsFile() {
         return getFile(WebProjectProperties.PERSISTENCE_XML_DIR);
     }
-    
+
     public ClassPathProvider getClassPathProvider () {
         return (ClassPathProvider) project.getLookup ().lookup (ClassPathProvider.class);
     }
-    
+
     public FileObject getArchive () {
         return getFileObject ("dist.war"); //NOI18N
     }
-    
+
     private FileObject getFileObject(String propname) {
         String prop = helper.getAntProjectHelper().getStandardPropertyEvaluator().getProperty(propname);
         if (prop != null) {
@@ -327,7 +327,7 @@ public final class ProjectWebModule extends J2eeModuleProvider
             return null;
         }
     }
-    
+
     private File getFile(String propname) {
         String prop = helper.getAntProjectHelper().getStandardPropertyEvaluator().getProperty(propname);
         if (prop != null) {
@@ -336,14 +336,14 @@ public final class ProjectWebModule extends J2eeModuleProvider
             return null;
         }
     }
-    
+
     public synchronized J2eeModule getJ2eeModule () {
         if (j2eeModule == null) {
             j2eeModule = J2eeModuleFactory.createJ2eeModule(this);
         }
         return j2eeModule;
     }
-    
+
     public org.netbeans.modules.j2ee.deployment.devmodules.api.ModuleChangeReporter getModuleChangeReporter () {
         return this;
     }
@@ -363,16 +363,16 @@ public final class ProjectWebModule extends J2eeModuleProvider
         return Boolean.parseBoolean(project.evaluator().getProperty(WebProjectProperties.J2EE_COMPILE_ON_SAVE)) &&
             !Boolean.parseBoolean(project.evaluator().getProperty(WebProjectProperties.J2EE_DEPLOY_ON_SAVE));
     }
-    
-    
+
+
     public File getDeploymentConfigurationFile(String name) {
         assert name != null : "File name of the deployement configuration file can't be null"; //NOI18N
-        
+
         String path = getConfigSupport().getContentRelativePath(name);
         if (path == null) {
             path = name;
         }
-        
+
         if (path.startsWith("WEB-INF/")) { //NOI18N
             path = path.substring(8); //removing "WEB-INF/"
 
@@ -389,13 +389,13 @@ public final class ProjectWebModule extends J2eeModuleProvider
                 return new File(getConfDirAsFile(), name);
             }
             return new File(FileUtil.toFile(documentBase), path);
-        }        
+        }
     }
 
     public FileObject getModuleFolder () {
         return getDocumentBase ();
     }
-    
+
     public String getServerID () {
         String inst = getServerInstanceID ();
         if (inst != null) {
@@ -412,11 +412,11 @@ public final class ProjectWebModule extends J2eeModuleProvider
             return fakeServerInstId;
         return helper.getAntProjectHelper().getStandardPropertyEvaluator ().getProperty (WebProjectProperties.J2EE_SERVER_INSTANCE);
     }
-    
+
     public void setServerInstanceID(String severInstanceID) {
         WebProjectProperties.setServerInstance(project, helper, severInstanceID);
     }
-    
+
     public Iterator<J2eeModule.RootedEntry> getArchiveContents () throws java.io.IOException {
         FileObject content = getContentDirectory();
         content.refresh();
@@ -434,7 +434,7 @@ public final class ProjectWebModule extends J2eeModuleProvider
     public File getContentDirectoryAsFile() {
         return getFile ("build.web.dir"); //NOI18N
     }
-    
+
     public <T> MetadataModel<T> getMetadataModel(Class<T> type) {
         if (type == WebAppMetadata.class) {
             @SuppressWarnings("unchecked") // NOI18N
@@ -447,7 +447,7 @@ public final class ProjectWebModule extends J2eeModuleProvider
         }
         return null;
     }
-    
+
     public synchronized MetadataModel<WebAppMetadata> getMetadataModel() {
         if (webAppMetadataModel == null) {
             FileObject ddFO = getDeploymentDescriptor();
@@ -473,13 +473,13 @@ public final class ProjectWebModule extends J2eeModuleProvider
         }
         return webAppMetadataModel;
     }
-    
+
     private synchronized void resetMetadataModel() {
         webAppMetadataModel = null;
     }
-    
+
     /**
-     * The server plugin needs all models to be either merged on annotation-based. 
+     * The server plugin needs all models to be either merged on annotation-based.
      * Currently only the web model does a bit of merging, other models don't. So
      * for web we actually need two models (one for the server plugins and another
      * for everyone else). Temporary solution until merging is implemented
@@ -499,7 +499,7 @@ public final class ProjectWebModule extends J2eeModuleProvider
         }
         return webAppAnnMetadataModel;
     }
-    
+
     public synchronized MetadataModel<WebservicesMetadata> getWebservicesMetadataModel() {
         if (webservicesMetadataModel == null) {
             FileObject ddFO = getDD();
@@ -514,7 +514,7 @@ public final class ProjectWebModule extends J2eeModuleProvider
         }
         return webservicesMetadataModel;
     }
-   
+
     public void uncacheDescriptors() {
         // this.getConfigSupport().resetStorage();
         // reset timeout when closing the project
@@ -523,7 +523,7 @@ public final class ProjectWebModule extends J2eeModuleProvider
         }
     }
 
-    // TODO MetadataModel: rewrite when MetadataModel is ready    
+    // TODO MetadataModel: rewrite when MetadataModel is ready
 //    private Webservices getWebservices() {
 //        if (Util.isJavaEE5orHigher(project)) {
 //            WebServicesSupport wss = WebServicesSupport.getWebServicesSupport(project.getProjectDirectory());
@@ -545,7 +545,7 @@ public final class ProjectWebModule extends J2eeModuleProvider
 //        }
 //        return null;
 //    }
-    
+
     public org.netbeans.modules.j2ee.deployment.common.api.EjbChangeDescriptor getEjbChanges (long timestamp) {
         return this;
     }
@@ -558,7 +558,9 @@ public final class ProjectWebModule extends J2eeModuleProvider
     public String getModuleVersion () {
         // return a version based on the Java EE version
         Profile platformVersion = getJ2eeProfile();
-        if (Profile.JAVA_EE_8_FULL.equals(platformVersion) || Profile.JAVA_EE_8_WEB.equals(platformVersion)) {
+        if (Profile.JAKARTA_EE_8_FULL.equals(platformVersion) || Profile.JAKARTA_EE_8_WEB.equals(platformVersion)) {
+            return WebApp.VERSION_4_0;
+        } else if (Profile.JAVA_EE_8_FULL.equals(platformVersion) || Profile.JAVA_EE_8_WEB.equals(platformVersion)) {
             return WebApp.VERSION_4_0;
         } else if (Profile.JAVA_EE_7_FULL.equals(platformVersion) || Profile.JAVA_EE_7_WEB.equals(platformVersion)) {
             return WebApp.VERSION_3_1;
@@ -573,7 +575,7 @@ public final class ProjectWebModule extends J2eeModuleProvider
             return WebApp.VERSION_3_1;
         }
     }
-    
+
     public void propertyChange(PropertyChangeEvent evt) {
         if (evt.getPropertyName().equals(org.netbeans.modules.j2ee.dd.api.web.WebApp.PROPERTY_VERSION)) {
             String oldVersion = (String) evt.getOldValue();
@@ -588,7 +590,7 @@ public final class ProjectWebModule extends J2eeModuleProvider
             String oldValue = (String) evt.getOldValue();
             String newValue = (String) evt.getNewValue();
             getPropertyChangeSupport().firePropertyChange(
-                    J2eeModule.PROP_RESOURCE_DIRECTORY, 
+                    J2eeModule.PROP_RESOURCE_DIRECTORY,
                     oldValue == null ? null : new File(oldValue),
                     newValue == null ? null : new File(newValue));
         }  else if (WebProjectProperties.WEB_DOCBASE_DIR.equals(evt.getPropertyName())) {
@@ -603,7 +605,7 @@ public final class ProjectWebModule extends J2eeModuleProvider
                     (String)evt.getNewValue());
         }
     }
-        
+
     public String getUrl () {
          EditableProperties ep =  helper.getProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH);
          String warName = ep.getProperty(WebProjectProperties.WAR_NAME);
@@ -629,7 +631,7 @@ public final class ProjectWebModule extends J2eeModuleProvider
     public Profile getJ2eeProfile () {
         return Profile.fromPropertiesString(helper.getAntProjectHelper().getStandardPropertyEvaluator ().getProperty(WebProjectProperties.J2EE_PLATFORM));
     }
-    
+
     public FileObject getDD() {
        FileObject webInfFo = getWebInf();
        if (webInfFo==null) {
@@ -638,34 +640,34 @@ public final class ProjectWebModule extends J2eeModuleProvider
        }
        return getWebInf().getFileObject(WebServicesConstants.WEBSERVICES_DD, "xml"); // NOI18N
    }
-    
+
     @Override
     public FileObject[] getSourceRoots() {
         Sources sources = ProjectUtils.getSources(project);
         SourceGroup[] groups = sources.getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA);
-        
+
         List<FileObject> roots = new LinkedList<FileObject>();
         FileObject documentBase = getDocumentBase();
         if (documentBase != null)
             roots.add(documentBase);
-        
+
         for (int i = 0; i < groups.length; i++) {
             roots.add(groups[i].getRootFolder());
         }
-        
+
         FileObject[] rootArray = new FileObject[roots.size()];
         return roots.toArray(rootArray);
     }
-    
+
     private boolean isProjectOpened() {
-        // XXX workaround: OpenProjects.getDefault() can be null 
+        // XXX workaround: OpenProjects.getDefault() can be null
         // when called from ProjectOpenedHook.projectOpened() upon IDE startup
         if (OpenProjects.getDefault() == null)
             return true;
-        
+
         Project[] projects = OpenProjects.getDefault().getOpenProjects();
         for (int i = 0; i < projects.length; i++) {
-            if (projects[i].equals(project)) 
+            if (projects[i].equals(project))
                 return true;
         }
         return false;
@@ -703,14 +705,14 @@ public final class ProjectWebModule extends J2eeModuleProvider
         //}
         getPropertyChangeSupport().addPropertyChangeListener(listener);
     }
-    
+
     public synchronized void removePropertyChangeListener(PropertyChangeListener listener) {
         if (propertyChangeSupport == null) {
             return;
         }
         propertyChangeSupport.removePropertyChangeListener(listener);
     }
-    
+
     private synchronized PropertyChangeSupport getPropertyChangeSupport() {
         if (propertyChangeSupport == null) {
             propertyChangeSupport = new PropertyChangeSupport(this);
@@ -739,17 +741,17 @@ public final class ProjectWebModule extends J2eeModuleProvider
     private static class IT implements Iterator<J2eeModule.RootedEntry> {
         ArrayList<FileObject> ch;
         FileObject root;
-        
+
         private IT (FileObject f) {
             this.ch = new ArrayList<FileObject>();
             ch.add (f);
             this.root = f;
         }
-        
+
         public boolean hasNext () {
             return ! ch.isEmpty();
         }
-        
+
         public J2eeModule.RootedEntry next () {
             FileObject f = ch.get(0);
             ch.remove(0);
@@ -762,26 +764,26 @@ public final class ProjectWebModule extends J2eeModuleProvider
             }
             return new FSRootRE (root, f);
         }
-        
+
         public void remove () {
             throw new UnsupportedOperationException ();
         }
-        
+
     }
 
     private static final class FSRootRE implements J2eeModule.RootedEntry {
         FileObject f;
         FileObject root;
-        
+
         FSRootRE (FileObject root, FileObject f) {
             this.f = f;
             this.root = root;
         }
-        
+
         public FileObject getFileObject () {
             return f;
         }
-        
+
         public String getRelativePath () {
             return FileUtil.getRelativePath (root, f);
         }
diff --git a/enterprise/web.project/src/org/netbeans/modules/web/project/WebProject.java b/enterprise/web.project/src/org/netbeans/modules/web/project/WebProject.java
index 2cb8eeb..38d8726 100644
--- a/enterprise/web.project/src/org/netbeans/modules/web/project/WebProject.java
+++ b/enterprise/web.project/src/org/netbeans/modules/web/project/WebProject.java
@@ -2427,7 +2427,8 @@ public final class WebProject implements Project {
             Profile profile = Profile.fromPropertiesString(project.evaluator().getProperty(WebProjectProperties.J2EE_PLATFORM));
             if (Profile.JAVA_EE_6_FULL.equals(profile) || Profile.JAVA_EE_6_WEB.equals(profile) ||
                     Profile.JAVA_EE_7_FULL.equals(profile) || Profile.JAVA_EE_7_WEB.equals(profile) ||
-                    Profile.JAVA_EE_8_FULL.equals(profile) || Profile.JAVA_EE_8_WEB.equals(profile)){
+                    Profile.JAVA_EE_8_FULL.equals(profile) || Profile.JAVA_EE_8_WEB.equals(profile) ||
+                    Profile.JAKARTA_EE_8_FULL.equals(profile) || Profile.JAKARTA_EE_8_WEB.equals(profile)){
                 lookups.add(ee6);
             }
             if ("true".equals(project.evaluator().getProperty(WebProjectProperties.DISPLAY_BROWSER))) {
diff --git a/enterprise/web.project/src/org/netbeans/modules/web/project/jaxws/WebProjectJAXWSClientSupport.java b/enterprise/web.project/src/org/netbeans/modules/web/project/jaxws/WebProjectJAXWSClientSupport.java
index 3901564..6b0f83a 100644
--- a/enterprise/web.project/src/org/netbeans/modules/web/project/jaxws/WebProjectJAXWSClientSupport.java
+++ b/enterprise/web.project/src/org/netbeans/modules/web/project/jaxws/WebProjectJAXWSClientSupport.java
@@ -43,11 +43,11 @@ import org.openide.filesystems.FileObject;
  */
 public class WebProjectJAXWSClientSupport extends ProjectJAXWSClientSupport /*implements JAXWSClientSupportImpl*/ {
     WebProject project;
-    
+
     /** Creates a new instance of WebProjectJAXWSClientSupport */
     public WebProjectJAXWSClientSupport(WebProject project,AntProjectHelper helper) {
         super(project,helper);
-        this.project=project;    
+        this.project=project;
     }
 
     public FileObject getWsdlFolder(boolean create) throws IOException {
@@ -97,7 +97,7 @@ public class WebProjectJAXWSClientSupport extends ProjectJAXWSClientSupport /*im
             }
         }
     }
-    
+
     /** return root folder for xml artifacts
      */
     @Override
@@ -122,6 +122,10 @@ public class WebProjectJAXWSClientSupport extends ProjectJAXWSClientSupport /*im
                 return JAVA_EE_VERSION_18;
             } else if (Profile.JAVA_EE_8_FULL.equals(webModule.getJ2eeProfile())) {
                 return JAVA_EE_VERSION_18;
+            } else if (Profile.JAKARTA_EE_8_WEB.equals(webModule.getJ2eeProfile())) {
+                return JAKARTA_EE_VERSION_8;
+            } else if (Profile.JAKARTA_EE_8_FULL.equals(webModule.getJ2eeProfile())) {
+                return JAKARTA_EE_VERSION_8;
             } else if (Profile.JAVA_EE_5.equals(webModule.getJ2eeProfile())) {
                 return JAVA_EE_VERSION_15;
             }
diff --git a/enterprise/web.project/src/org/netbeans/modules/web/project/jaxws/WebProjectJAXWSSupport.java b/enterprise/web.project/src/org/netbeans/modules/web/project/jaxws/WebProjectJAXWSSupport.java
index 156461c..1fa3c89 100644
--- a/enterprise/web.project/src/org/netbeans/modules/web/project/jaxws/WebProjectJAXWSSupport.java
+++ b/enterprise/web.project/src/org/netbeans/modules/web/project/jaxws/WebProjectJAXWSSupport.java
@@ -73,13 +73,13 @@ public class WebProjectJAXWSSupport extends ProjectJAXWSSupport /*implements JAX
     //servlet name and servlet listener for non-JSR 109 web services
     private final static String servletClassName = "com.sun.xml.ws.transport.http.servlet.WSServlet"; //NOI18N
     private final static String servletListener = "com.sun.xml.ws.transport.http.servlet.WSServletContextListener"; //NOI18N
-    
+
     /** Creates a new instance of JAXWSSupport */
     public WebProjectJAXWSSupport(WebProject project, AntProjectHelper antProjectHelper) {
         super(project,antProjectHelper);
         this.project = project;
     }
-    
+
     @Override
     public FileObject getWsdlFolder(boolean create) throws java.io.IOException {
         WebModule webModule = WebModule.getWebModule(project.getProjectDirectory());
@@ -95,7 +95,7 @@ public class WebProjectJAXWSSupport extends ProjectJAXWSSupport /*implements JAX
         }
         return null;
     }
-    
+
     /** Get wsdlLocation information
      * Useful for web service from wsdl
      * @param name service "display" name
@@ -114,7 +114,7 @@ public class WebProjectJAXWSSupport extends ProjectJAXWSSupport /*implements JAX
         String prefix = "WEB-INF/wsdl/"; //NOI18N
         return prefix+serviceName+"/"+localWsdl; //NOI18N
     }
-    
+
     /**
      * This is to support non-JSR 109 containers. In this case, a regular jaxws web service
      * is created and the deployment descriptor is updated with the jaxws-ri servlet and
@@ -123,7 +123,7 @@ public class WebProjectJAXWSSupport extends ProjectJAXWSSupport /*implements JAX
     private void addServiceEntriesToDD(String serviceName) {
         //add servlet entry to web.xml
         String servletName = serviceName;
-        
+
         WebApp webApp = getWebApp();
         if(webApp != null){
             Servlet servlet;
@@ -133,7 +133,7 @@ public class WebProjectJAXWSSupport extends ProjectJAXWSSupport /*implements JAX
                 servlet.setLoadOnStartup(new java.math.BigInteger("1"));
                 webApp.addBean("ServletMapping", new String[]{"ServletName","UrlPattern"},
                         new Object[]{servletName, "/" + serviceName}, "ServletName");
-                
+
                 if(!webAppHasListener(webApp, servletListener)){
                     webApp.addBean("Listener", new String[]{"ListenerClass"},
                             new Object[]{servletListener}, "ListenerClass");
@@ -149,7 +149,7 @@ public class WebProjectJAXWSSupport extends ProjectJAXWSSupport /*implements JAX
             }
         }
     }
-    
+
     @Override
     protected void addServletElement(Project project, String wsName, String serviceImpl) throws IOException {
         WebApp webApp = getWebApp();
@@ -184,7 +184,7 @@ public class WebProjectJAXWSSupport extends ProjectJAXWSSupport /*implements JAX
                 }
             }
         }
-    }    
+    }
     /**
      * Remove the web.xml entries for the non-JSR 109 web service.
      *
@@ -225,7 +225,7 @@ public class WebProjectJAXWSSupport extends ProjectJAXWSSupport /*implements JAX
             }
         }
     }
-    
+
     /**
      * Remove the web.xml servlets for the non-JSR 109 web service.
      *
@@ -254,7 +254,7 @@ public class WebProjectJAXWSSupport extends ProjectJAXWSSupport /*implements JAX
         }
         return changed;
     }
-    
+
     private boolean webAppHasListener(WebApp webApp, String listenerClass){
         Listener[] listeners = webApp.getListener();
         for(int i = 0; i < listeners.length; i++){
@@ -276,7 +276,7 @@ public class WebProjectJAXWSSupport extends ProjectJAXWSSupport /*implements JAX
         }
         return null;
     }
-    
+
     private WebApp getWebApp() {
         try {
             FileObject deploymentDescriptor = getDeploymentDescriptor();
@@ -288,14 +288,14 @@ public class WebProjectJAXWSSupport extends ProjectJAXWSSupport /*implements JAX
         }
         return null;
     }
-    
+
     private boolean isProjectOpened() {
         // XXX workaround: OpenProjects.getDefault() can be null
         // when called from ProjectOpenedHook.projectOpened() upon IDE startup
         if (OpenProjects.getDefault() == null) {
             return true;
         }
-        
+
         Project[] projects = OpenProjects.getDefault().getOpenProjects();
         for (int i = 0; i < projects.length; i++) {
             if (projects[i].equals(project)) {
@@ -304,7 +304,7 @@ public class WebProjectJAXWSSupport extends ProjectJAXWSSupport /*implements JAX
         }
         return false;
     }
-    
+
     private FileObject getDeploymentDescriptor() throws IOException {
         WebModule webModule = WebModule.getWebModule(project.getProjectDirectory());
         if (webModule != null) {
@@ -323,10 +323,10 @@ public class WebProjectJAXWSSupport extends ProjectJAXWSSupport /*implements JAX
             return null;
         }
     }
-    
+
     @Override
     protected void addJaxwsArtifacts(Project project, String wsName, String serviceImpl) throws Exception {
-        
+
         // check if the wsimport class is already present - this means we don't need to add the library
         SourceGroup[] sgs = SourceGroups.getJavaSourceGroups(project);
         if (sgs.length > 0) {
@@ -352,10 +352,10 @@ public class WebProjectJAXWSSupport extends ProjectJAXWSSupport /*implements JAX
                 }
             }
         }
-        
+
         //Add the servlet and listener entry in web.xml
         addServiceEntriesToDD(wsName);
-        
+
         //create the sun-jaxws deployment descriptor
         FileObject ddFolder = getDeploymentDescriptorFolder();
         if(ddFolder != null){
@@ -363,7 +363,7 @@ public class WebProjectJAXWSSupport extends ProjectJAXWSSupport /*implements JAX
             if(sunjaxwsFile == null){
                 WSUtils.generateSunJaxwsFile(ddFolder);
             }
-            
+
             sunjaxwsFile = ddFolder.getFileObject("sun-jaxws.xml");
             Endpoints endpoints = EndpointsProvider.getDefault().getEndpoints(sunjaxwsFile);
             Endpoint endpoint = endpoints.newEndpoint();
@@ -394,14 +394,14 @@ public class WebProjectJAXWSSupport extends ProjectJAXWSSupport /*implements JAX
             DialogDisplayer.getDefault().notify(desc);
         }
     }
-    
+
     /** return root folder for xml artifacts
      */
     @Override
     protected FileObject getXmlArtifactsRoot() {
         return project.getWebModule().getConfDir();
     }
-    
+
     /**
      * Notification when Service (created from java) is removed from jax-ws.xml
      * (JAXWSSupport needs to react when @WebService annotation is removed
@@ -423,11 +423,11 @@ public class WebProjectJAXWSSupport extends ProjectJAXWSSupport /*implements JAX
                 removeJsr109Entries(serviceName);
             }catch(IOException e){
                 Exceptions.printStackTrace(e);
-            }            
+            }
         }
-        
+
     }
-    
+
     /**
      * Removes the servlet entry from web.xml and
      * the endpoint entry from the sun-jaxws.xml file
@@ -484,16 +484,16 @@ public class WebProjectJAXWSSupport extends ProjectJAXWSSupport /*implements JAX
             NotifyDescriptor desc = new NotifyDescriptor.Message(mes, NotifyDescriptor.Message.ERROR_MESSAGE);
             DialogDisplayer.getDefault().notify(desc);
         }
-        
+
         //TODO if no more web services, remove the jaxws21 library
     }
-    
+
     /**
      * Removes the servlet entry from web.xml and
      * the endpoint entry from the sun-jaxws.xml file
      */
     public void removeJsr109Entries(String serviceName) throws IOException {
-        WebApp webApp = getWebApp();       
+        WebApp webApp = getWebApp();
         if (webApp != null) {
             JaxWsModel jaxWsModel = (JaxWsModel)project.getLookup().lookup(JaxWsModel.class);
             if (jaxWsModel != null) {
@@ -511,7 +511,7 @@ public class WebProjectJAXWSSupport extends ProjectJAXWSSupport /*implements JAX
             }
         }
     }
- 
+
     /**
      * Remove the web.xml servlets for the non-JSR 109 web service.
      *
@@ -544,9 +544,9 @@ public class WebProjectJAXWSSupport extends ProjectJAXWSSupport /*implements JAX
         }
         return changed;
     }
- 
+
     @Override
-    public String addService(String name, String serviceImpl, String wsdlUrl, String serviceName, 
+    public String addService(String name, String serviceImpl, String wsdlUrl, String serviceName,
             String portName, String packageName, boolean isJsr109, boolean useProvider) {
         // create jax-ws.xml if necessary
         FileObject fo = WSUtils.findJaxWsFileObject(project);
@@ -607,11 +607,15 @@ public class WebProjectJAXWSSupport extends ProjectJAXWSSupport /*implements JAX
                 return JAVA_EE_VERSION_18;
             } else if (Profile.JAVA_EE_8_FULL.equals(webModule.getJ2eeProfile())) {
                 return JAVA_EE_VERSION_18;
+            } else if (Profile.JAKARTA_EE_8_WEB.equals(webModule.getJ2eeProfile())) {
+                return JAKARTA_EE_VERSION_8;
+            } else if (Profile.JAKARTA_EE_8_FULL.equals(webModule.getJ2eeProfile())) {
+                return JAKARTA_EE_VERSION_8;
             } else if (Profile.JAVA_EE_5.equals(webModule.getJ2eeProfile())) {
                 return JAVA_EE_VERSION_15;
             }
         }
         return JAVA_EE_VERSION_NONE;
     }
-    
+
 }
diff --git a/enterprise/web.project/src/org/netbeans/modules/web/project/ui/customizer/WebProjectProperties.java b/enterprise/web.project/src/org/netbeans/modules/web/project/ui/customizer/WebProjectProperties.java
index a40d48d..d594e63 100644
--- a/enterprise/web.project/src/org/netbeans/modules/web/project/ui/customizer/WebProjectProperties.java
+++ b/enterprise/web.project/src/org/netbeans/modules/web/project/ui/customizer/WebProjectProperties.java
@@ -102,17 +102,17 @@ import org.openide.util.Task;
 
 /** Helper class. Defines constants for properties. Knows the proper
  *  place where to store the properties.
- * 
+ *
  * @author Petr Hrebejk, Radko Najman
  */
 final public class WebProjectProperties {
-    
+
     // Special properties of the project
     public static final String WEB_PROJECT_NAME = "web.project.name"; //NOI18N
     public static final String JAVA_PLATFORM = "platform.active"; //NOI18N
     public static final String J2EE_PLATFORM = "j2ee.platform"; //NOI18N
-    
-    // Properties stored in the PROJECT.PROPERTIES    
+
+    // Properties stored in the PROJECT.PROPERTIES
     /** root of external web module sources (full path), ".." if the sources are within project folder */
     public static final String SOURCE_ROOT = "source.root"; //NOI18N
     public static final String SOURCE_ENCODING="source.encoding"; // NOI18N
@@ -163,7 +163,7 @@ final public class WebProjectProperties {
 
     public static final String BUILD_TEST_RESULTS_DIR = "build.test.results.dir"; // NOI18N
     public static final String DEBUG_TEST_CLASSPATH = "debug.test.classpath"; // NOI18N
-    
+
     public static final String JAVADOC_PRIVATE="javadoc.private"; //NOI18N
     public static final String JAVADOC_NO_TREE="javadoc.notree"; //NOI18N
     public static final String JAVADOC_USE="javadoc.use"; //NOI18N
@@ -177,19 +177,19 @@ final public class WebProjectProperties {
     public static final String JAVADOC_ADDITIONALPARAM="javadoc.additionalparam"; // NOI18N
 
     public static final String COMPILE_JSPS = "compile.jsps"; //NOI18N
-    
+
     public static final String TAG_WEB_MODULE_LIBRARIES = "web-module-libraries"; // NOI18N
     public static final String TAG_WEB_MODULE__ADDITIONAL_LIBRARIES = "web-module-additional-libraries"; //NOI18N
-    
+
     // Properties stored in the PRIVATE.PROPERTIES
     public static final String APPLICATION_ARGS = "application.args"; // NOI18N
     public static final String JAVADOC_PREVIEW="javadoc.preview"; // NOI18N
 
     public static final String WS_DEBUG_CLASSPATHS = "ws.debug.classpaths";     //NOI18N
     public static final String WS_WEB_DOCBASE_DIRS = "ws.web.docbase.dirs"; //NOI18N
-    
+
     public static final String DEPLOY_ANT_PROPS_FILE = "deploy.ant.properties.file"; //NOI18N
-    
+
     public static final String ANT_DEPLOY_BUILD_SCRIPT = "nbproject/ant-deploy.xml"; // NOI18N
     public static final String SELECTED_BROWSER = "selected.browser"; //NOI18N
 
@@ -203,12 +203,12 @@ final public class WebProjectProperties {
 
     //list of frameworks to add to the application
     private List newExtenders;
-    
+
     //list of changed frameworks
     private List<WebModuleExtender> existingExtenders;
 
     // MODELS FOR VISUAL CONTROLS
-    
+
     // CustomizerSources
     DefaultTableModel SOURCE_ROOTS_MODEL;
     DefaultTableModel TEST_ROOTS_MODEL;
@@ -230,7 +230,7 @@ final public class WebProjectProperties {
     DefaultListModel JAVAC_PROCESSORPATH_MODEL;
 
     // CustomizerCompile
-    ButtonModel JAVAC_DEPRECATION_MODEL; 
+    ButtonModel JAVAC_DEPRECATION_MODEL;
     ButtonModel JAVAC_DEBUG_MODEL;
     ButtonModel NO_DEPENDENCIES_MODEL;
     Document JAVAC_COMPILER_ARG_MODEL;
@@ -240,9 +240,9 @@ final public class WebProjectProperties {
     DefaultListModel ANNOTATION_PROCESSORS_MODEL;
     JToggleButton.ToggleButtonModel COMPILE_ON_SAVE_MODEL;
     JToggleButton.ToggleButtonModel COPY_STATIC_RESOURCE_ON_SAVE_MODEL;
-    
+
     // CustomizerWar
-    Document WAR_NAME_MODEL; 
+    Document WAR_NAME_MODEL;
     Document BUILD_CLASSES_EXCLUDES_MODEL;
     ButtonModel WAR_COMPRESS_MODEL;
     WarIncludesTableModel WAR_CONTENT_ADDITIONAL_MODEL;
@@ -251,13 +251,13 @@ final public class WebProjectProperties {
     ButtonModel JAVADOC_PRIVATE_MODEL;
     ButtonModel JAVADOC_NO_TREE_MODEL;
     ButtonModel JAVADOC_USE_MODEL;
-    ButtonModel JAVADOC_NO_NAVBAR_MODEL; 
-    ButtonModel JAVADOC_NO_INDEX_MODEL; 
-    ButtonModel JAVADOC_SPLIT_INDEX_MODEL; 
-    ButtonModel JAVADOC_AUTHOR_MODEL; 
+    ButtonModel JAVADOC_NO_NAVBAR_MODEL;
+    ButtonModel JAVADOC_NO_INDEX_MODEL;
+    ButtonModel JAVADOC_SPLIT_INDEX_MODEL;
+    ButtonModel JAVADOC_AUTHOR_MODEL;
     ButtonModel JAVADOC_VERSION_MODEL;
     Document JAVADOC_WINDOW_TITLE_MODEL;
-    ButtonModel JAVADOC_PREVIEW_MODEL; 
+    ButtonModel JAVADOC_PREVIEW_MODEL;
     Document JAVADOC_ADDITIONALPARAM_MODEL;
 
     // CustomizerRun
@@ -265,14 +265,14 @@ final public class WebProjectProperties {
     Document CONTEXT_PATH_MODEL;
     Document LAUNCH_URL_RELATIVE_MODEL;
     ButtonModel DISPLAY_BROWSER_MODEL;
-    JToggleButton.ToggleButtonModel DEPLOY_ON_SAVE_MODEL; 
-    ComboBoxModel J2EE_SERVER_INSTANCE_MODEL; 
+    JToggleButton.ToggleButtonModel DEPLOY_ON_SAVE_MODEL;
+    ComboBoxModel J2EE_SERVER_INSTANCE_MODEL;
     BrowserUISupport.BrowserComboBoxModel BROWSERS_MODEL;
     Document RUNMAIN_JVM_MODEL;
-    
+
     //customizer license headers
     LicensePanelSupport LICENSE_SUPPORT;
-    
+
     // for ui logging added frameworks
     private List<String> addedFrameworkNames;
     private List<WebFrameworkProvider> currentFrameworks;
@@ -283,22 +283,22 @@ final public class WebProjectProperties {
     private UpdateHelper updateHelper;
     private PropertyEvaluator evaluator;
 
-    private StoreGroup privateGroup; 
+    private StoreGroup privateGroup;
     private StoreGroup projectGroup;
-    
+
     private Map<String,String> additionalProperties;
 
     private static boolean needsUpdate = false;
-    
+
     private static String serverId;
     private static String cp;
 
     public static final String JAVA_SOURCE_BASED= "java.source.based";
 
     private String includes, excludes;
-    
+
     private static String logServInstID = null;
-    
+
     Task loadingFrameworksTask = null;
 
     //Hotfix of the issue #70058 (copied from J2seProjectProperties)
@@ -306,46 +306,46 @@ final public class WebProjectProperties {
     private static final Integer BOOLEAN_KIND_TF = 0;
     private static final Integer BOOLEAN_KIND_YN = 1;
     private static final Integer BOOLEAN_KIND_ED = 2;
-    
+
     private final List<ActionListener> optionListeners = new CopyOnWriteArrayList<ActionListener>();
 
     WebProjectProperties(WebProject project, UpdateHelper updateHelper, PropertyEvaluator evaluator, ReferenceHelper refHelper) {
         this.project = project;
         this.updateHelper = updateHelper;
-        
+
         //this is called from updatehelper when user confirms the project update
         project.getUpdateImplementation().setProjectUpdateListener(new UpdateProjectImpl.ProjectUpdateListener() {
             public void projectUpdated() {
                 needsUpdate = true;
             }
         });
-        
+
         this.evaluator = evaluator;
         this.refHelper = refHelper;
-        
-        this.cs = new ClassPathSupport( evaluator, refHelper, 
-                updateHelper.getAntProjectHelper(), updateHelper, 
+
+        this.cs = new ClassPathSupport( evaluator, refHelper,
+                updateHelper.getAntProjectHelper(), updateHelper,
                 new ClassPathSupportCallbackImpl(updateHelper.getAntProjectHelper()));
-                
+
         privateGroup = new StoreGroup();
         projectGroup = new StoreGroup();
-        
+
         additionalProperties = new HashMap<String,String>();
 
-        init(); // Load known properties        
+        init(); // Load known properties
     }
-    
+
     WebProject getProject() {
         return project;
     }
 
-    /** Initializes the visual models 
+    /** Initializes the visual models
      */
     private void init() {
-        
+
         CLASS_PATH_LIST_RENDERER = ClassPathListCellRenderer.createClassPathListRenderer(evaluator, project.getProjectDirectory());
         CLASS_PATH_TABLE_ITEM_RENDERER = ClassPathListCellRenderer.createClassPathTableRenderer(evaluator, project.getProjectDirectory());
-        
+
         // CustomizerSources
         SOURCE_ROOTS_MODEL = SourceRootsUi.createModel( project.getSourceRoots() );
         TEST_ROOTS_MODEL = SourceRootsUi.createModel( project.getTestSourceRoots() );
@@ -361,7 +361,7 @@ final public class WebProjectProperties {
         WEBINF_DIR_MODEL = projectGroup.createStringDocument( evaluator, WEBINF_DIR );
 
         // CustomizerLibraries
-        EditableProperties projectProperties = updateHelper.getProperties( AntProjectHelper.PROJECT_PROPERTIES_PATH );                
+        EditableProperties projectProperties = updateHelper.getProperties( AntProjectHelper.PROJECT_PROPERTIES_PATH );
         EditableProperties privateProperties = updateHelper.getProperties( AntProjectHelper.PRIVATE_PROPERTIES_PATH );
 
         JAVAC_CLASSPATH_MODEL = ClassPathTableModel.createTableModel( cs.itemsIterator( (String)projectProperties.get( ProjectProperties.JAVAC_CLASSPATH ), ClassPathSupportCallbackImpl.TAG_WEB_MODULE_LIBRARIES) );
@@ -383,16 +383,18 @@ final public class WebProjectProperties {
             minimalSourceLevel = new SpecificationVersion("1.7");
         } else if (Profile.JAVA_EE_8_FULL.equals(profile)) {
             minimalSourceLevel = new SpecificationVersion("1.8");
+        } else if (Profile.JAKARTA_EE_8_FULL.equals(profile)) {
+            minimalSourceLevel = new SpecificationVersion("1.8.0");
         }
         JAVAC_SOURCE_MODEL = PlatformUiSupport.createSourceLevelComboBoxModel (PLATFORM_MODEL, evaluator.getProperty(JAVAC_SOURCE), evaluator.getProperty(JAVAC_TARGET), minimalSourceLevel);
         JAVAC_SOURCE_RENDERER = PlatformUiSupport.createSourceLevelListCellRenderer ();
-        SHARED_LIBRARIES_MODEL = new PlainDocument(); 
+        SHARED_LIBRARIES_MODEL = new PlainDocument();
         try {
             SHARED_LIBRARIES_MODEL.insertString(0, project.getAntProjectHelper().getLibrariesLocation(), null);
         } catch (BadLocationException ex) {
             Exceptions.printStackTrace(ex);
         }
-        
+
         // CustomizerCompile
         JAVAC_DEPRECATION_MODEL = projectGroup.createToggleButtonModel( evaluator, JAVAC_DEPRECATION );
         JAVAC_DEBUG_MODEL = privateGroup.createToggleButtonModel( evaluator, JAVAC_DEBUG );
@@ -406,7 +408,7 @@ final public class WebProjectProperties {
                 (annotationProcessors.length() > 0 ? Arrays.asList(annotationProcessors.split(",")) : Collections.emptyList()).iterator()); //NOI18N
         JAVAC_COMPILER_ARG_MODEL = projectGroup.createStringDocument( evaluator, JAVAC_COMPILER_ARG );
         COMPILE_JSP_MODEL = projectGroup.createToggleButtonModel( evaluator, COMPILE_JSPS );
-        
+
         // CustomizerWar
         WAR_NAME_MODEL = projectGroup.createStringDocument( evaluator, WAR_NAME );
         BUILD_CLASSES_EXCLUDES_MODEL = projectGroup.createStringDocument( evaluator, BUILD_CLASSES_EXCLUDES );
@@ -418,14 +420,14 @@ final public class WebProjectProperties {
         JAVADOC_NO_TREE_MODEL = projectGroup.createInverseToggleButtonModel( evaluator, JAVADOC_NO_TREE );
         JAVADOC_USE_MODEL = projectGroup.createToggleButtonModel( evaluator, JAVADOC_USE );
         JAVADOC_NO_NAVBAR_MODEL = projectGroup.createInverseToggleButtonModel( evaluator, JAVADOC_NO_NAVBAR );
-        JAVADOC_NO_INDEX_MODEL = projectGroup.createInverseToggleButtonModel( evaluator, JAVADOC_NO_INDEX ); 
+        JAVADOC_NO_INDEX_MODEL = projectGroup.createInverseToggleButtonModel( evaluator, JAVADOC_NO_INDEX );
         JAVADOC_SPLIT_INDEX_MODEL = projectGroup.createToggleButtonModel( evaluator, JAVADOC_SPLIT_INDEX );
         JAVADOC_AUTHOR_MODEL = projectGroup.createToggleButtonModel( evaluator, JAVADOC_AUTHOR );
         JAVADOC_VERSION_MODEL = projectGroup.createToggleButtonModel( evaluator, JAVADOC_VERSION );
         JAVADOC_WINDOW_TITLE_MODEL = projectGroup.createStringDocument( evaluator, JAVADOC_WINDOW_TITLE );
         JAVADOC_PREVIEW_MODEL = privateGroup.createToggleButtonModel( evaluator, JAVADOC_PREVIEW );
         JAVADOC_ADDITIONALPARAM_MODEL = projectGroup.createStringDocument( evaluator, JAVADOC_ADDITIONALPARAM );
-        
+
         // CustomizerRun
         J2EE_PLATFORM_MODEL = projectGroup.createStringDocument(evaluator, J2EE_PLATFORM);
         LAUNCH_URL_RELATIVE_MODEL = projectGroup.createStringDocument(evaluator, LAUNCH_URL_RELATIVE);
@@ -458,7 +460,7 @@ final public class WebProjectProperties {
                 }
             }
         });
-        
+
         J2EE_SERVER_INSTANCE_MODEL = J2eePlatformUiSupport.createPlatformComboBoxModel(
                 privateProperties.getProperty( J2EE_SERVER_INSTANCE ),
                 Profile.fromPropertiesString(projectProperties.getProperty(J2EE_PLATFORM)),
@@ -517,7 +519,7 @@ final public class WebProjectProperties {
         try {
             saveLibrariesLocation();
             LICENSE_SUPPORT.saveLicenseFile();
-            // Store properties 
+            // Store properties
             ProjectManager.mutex().writeAccess(new Mutex.ExceptionAction<Void>() {
                 public Void run() throws IOException {
                     storeProperties();
@@ -535,7 +537,7 @@ final public class WebProjectProperties {
             if (COMPILE_JSP_MODEL.isSelected()) {
                 WebProject.makeSureProjectHasJspCompilationLibraries(refHelper);
             }
-            
+
             Profile j2eeProfile = project.getAPIWebModule().getJ2eeProfile();
             FileObject webInf = project.getAPIWebModule().getWebInf();
             FileObject ddFo = project.getAPIWebModule().getDeploymentDescriptor();
@@ -551,7 +553,7 @@ final public class WebProjectProperties {
                 Utils.logUI(NbBundle.getBundle(WebProjectProperties.class),"UI_WEB_PROJECT_FRAMEWORK_ADDED", // NOI18N
                         addedFrameworkNames.toArray());
             }
-            
+
             // usage logging of target server and currently active frameworks
             String serverName = ""; // NOI18N
             try {
@@ -562,7 +564,7 @@ final public class WebProjectProperties {
             catch(InstanceRemovedException ier) {
                 // ignore
             }
-            
+
             if (loadingFrameworksTask != null && loadingFrameworksTask.isFinished()) {
                 StringBuffer sb = new StringBuffer(50);
                 if (currentFrameworks != null && currentFrameworks.size() > 0) {
@@ -583,7 +585,7 @@ final public class WebProjectProperties {
                 }
                 Utils.logUsage(WebProjectProperties.class, "USG_PROJECT_CONFIG_WEB", new Object[] { serverName, sb }); // NOI18N
             }
-            
+
             //prevent deadlock reported in the issue #54643
             //cp and serverId values are read in setNewContextPathValue() method which is called from storeProperties() before this code
             //it is easier to preset them instead of reading them here again
@@ -593,19 +595,19 @@ final public class WebProjectProperties {
                 if (!cp.equals(oldCP))
                     wm.setContextPath(serverId, cp);
             }
-            
+
             //Delete COS mark
             if (!COMPILE_ON_SAVE_MODEL.isSelected()) {
                 DeployOnSaveUtils.performCleanup(project, evaluator, updateHelper, "build.classes.dir", false); // NOI18N
             }
-        } 
+        }
         catch (MutexException e) {
             Exceptions.printStackTrace((IOException) e.getException());
         }
         catch ( IOException ex ) {
             Exceptions.printStackTrace(ex);
         }
-        
+
     }
 
     private boolean shouldCreateWebXml() {
@@ -647,13 +649,13 @@ final public class WebProjectProperties {
             Exceptions.printStackTrace(x);
         }
     }
-    
+
     private void storeProperties() throws IOException {
         // Store special properties
-        
-        // Modify the project dependencies properly        
+
+        // Modify the project dependencies properly
         destroyRemovedDependencies();
-       
+
         // Store source roots
         storeRoots( project.getSourceRoots(), SOURCE_ROOTS_MODEL );
         storeRoots( project.getTestSourceRoots(), TEST_ROOTS_MODEL );
@@ -672,28 +674,28 @@ final public class WebProjectProperties {
                     if(propertyName != null) {
                         String libname = propertyName.substring("${libs.".length());
                         if(libname.indexOf(".classpath}") != -1) libname = libname.substring(0, libname.indexOf(".classpath}"));
-                                
+
                         if("servlet24".equals(libname) || "jsp20".equals(libname)) { //NOI18N
                             cpItemsToRemove.add(cpti);
                         }
                     }
                 }
-            } 
-            
+            }
+
             //remove selected libraries
             Iterator<ClassPathSupport.Item> remove = cpItemsToRemove.iterator();
             while(remove.hasNext()) {
                 ClassPathSupport.Item cpti = remove.next();
                 cptm.getDefaultListModel().removeElement(cpti);
             }
-            
+
             //commented out, one more check follows
             //needsUpdate = false;
         }
-        
+
         // Encode all paths (this may change the project properties)
         List<ClassPathSupport.Item> javaClasspathList = ClassPathUiSupport.getList(JAVAC_CLASSPATH_MODEL.getDefaultListModel());
-        String[] javac_cp = cs.encodeToStrings(javaClasspathList, ClassPathSupportCallbackImpl.TAG_WEB_MODULE_LIBRARIES  );        
+        String[] javac_cp = cs.encodeToStrings(javaClasspathList, ClassPathSupportCallbackImpl.TAG_WEB_MODULE_LIBRARIES  );
         String[] javac_test_cp = cs.encodeToStrings( ClassPathUiSupport.getList( JAVAC_TEST_CLASSPATH_MODEL ), null );
         String[] run_test_cp = cs.encodeToStrings( ClassPathUiSupport.getList( RUN_TEST_CLASSPATH_MODEL ), null );
         String[] war_includes = cs.encodeToStrings( ClassPathUiSupport.getList( WAR_CONTENT_ADDITIONAL_MODEL.getDefaultListModel() ), ClassPathSupportCallbackImpl.TAG_WEB_MODULE__ADDITIONAL_LIBRARIES  );
@@ -701,16 +703,16 @@ final public class WebProjectProperties {
         String[] javac_pp = cs.encodeToStrings( ClassPathUiSupport.getList( JAVAC_PROCESSORPATH_MODEL ) );
 
         // Store standard properties
-        EditableProperties projectProperties = updateHelper.getProperties( AntProjectHelper.PROJECT_PROPERTIES_PATH );        
+        EditableProperties projectProperties = updateHelper.getProperties( AntProjectHelper.PROJECT_PROPERTIES_PATH );
         EditableProperties privateProperties = updateHelper.getProperties( AntProjectHelper.PRIVATE_PROPERTIES_PATH );
-        
+
         // Assure inegrity which can't shound not be assured in UI
         if ( !JAVADOC_NO_INDEX_MODEL.isSelected() ) {
             JAVADOC_SPLIT_INDEX_MODEL.setSelected( false ); // Can't split non existing index
         }
-                                
+
         // Standard store of the properties
-        projectGroup.store( projectProperties );        
+        projectGroup.store( projectProperties );
         privateGroup.store( privateProperties );
 
         LICENSE_SUPPORT.updateProperties(projectProperties);
@@ -731,19 +733,19 @@ final public class WebProjectProperties {
             projectProperties.setProperty(DEBUG_TEST_CLASSPATH, new String[] {
                 "${run.test.classpath}", // NOI18N
             });
-            
+
             needsUpdate = false;
         }
-        
+
         // Save all paths
         projectProperties.setProperty( ProjectProperties.JAVAC_CLASSPATH, javac_cp );
         projectProperties.setProperty( ProjectProperties.JAVAC_PROCESSORPATH, javac_pp );
         projectProperties.setProperty( ProjectProperties.JAVAC_TEST_CLASSPATH, javac_test_cp );
         projectProperties.setProperty( ProjectProperties.RUN_TEST_CLASSPATH, run_test_cp );
         projectProperties.setProperty( ProjectProperties.ENDORSED_CLASSPATH, endorsed_cp );
-        
+
         projectProperties.setProperty( WAR_CONTENT_ADDITIONAL, war_includes );
-        
+
         //Handle platform selection and javac.source javac.target properties
         PlatformUiSupport.storePlatform (projectProperties, updateHelper, WebProjectType.PROJECT_CONFIGURATION_NAMESPACE, PLATFORM_MODEL.getSelectedItem(), JAVAC_SOURCE_MODEL.getSelectedItem());
 
@@ -781,7 +783,7 @@ final public class WebProjectProperties {
 
         projectProperties.put(ProjectProperties.INCLUDES, includes);
         projectProperties.put(ProjectProperties.EXCLUDES, excludes);
-        
+
         StringBuilder sb = new StringBuilder();
         for (Enumeration elements = ANNOTATION_PROCESSORS_MODEL.elements(); elements.hasMoreElements();) {
             sb.append(elements.nextElement());
@@ -799,7 +801,7 @@ final public class WebProjectProperties {
         // Store the property changes into the project
         updateHelper.putProperties( AntProjectHelper.PROJECT_PROPERTIES_PATH, projectProperties );
         updateHelper.putProperties( AntProjectHelper.PRIVATE_PROPERTIES_PATH, privateProperties );
-        
+
         // compile on save listeners
         if (DEPLOY_ON_SAVE_MODEL.isEnabled() && DEPLOY_ON_SAVE_MODEL.isSelected()) {
             LOGGER.log(Level.FINE, "Starting listening on cos for {0}", project.getWebModule());
@@ -808,7 +810,7 @@ final public class WebProjectProperties {
             LOGGER.log(Level.FINE, "Stopping listening on cos for {0}", project.getWebModule());
             Deployment.getDefault().disableCompileOnSaveSupport(project.getWebModule());
         }
-        
+
         String value = (String)additionalProperties.get(SOURCE_ENCODING);
         if (value != null) {
             try {
@@ -833,21 +835,21 @@ final public class WebProjectProperties {
         }
 	return true;
     }
-    
+
     /** XXX to be deleted when introduced in AntPropertyHeleper API
-     */    
+     */
     static boolean isAntProperty (String string) {
         return string != null && string.startsWith( "${" ) && string.endsWith( "}" ); //NOI18N
     }
-        
-    /** Finds out what are new and removed project dependencies and 
+
+    /** Finds out what are new and removed project dependencies and
      * applyes the info to the project
      */
     private void destroyRemovedDependencies() {
-            
+
         // Create a set of old and new artifacts.
         Set<ClassPathSupport.Item> oldArtifacts = new HashSet<ClassPathSupport.Item>();
-        EditableProperties projectProperties = updateHelper.getProperties( AntProjectHelper.PROJECT_PROPERTIES_PATH );        
+        EditableProperties projectProperties = updateHelper.getProperties( AntProjectHelper.PROJECT_PROPERTIES_PATH );
         oldArtifacts.addAll( cs.itemsList( (String)projectProperties.get( ProjectProperties.JAVAC_CLASSPATH ), ClassPathSupportCallbackImpl.TAG_WEB_MODULE_LIBRARIES ) );
         oldArtifacts.addAll( cs.itemsList( projectProperties.get( ProjectProperties.JAVAC_PROCESSORPATH ) ) );
         oldArtifacts.addAll( cs.itemsList( (String)projectProperties.get( ProjectProperties.JAVAC_TEST_CLASSPATH ), null ) );
@@ -860,13 +862,13 @@ final public class WebProjectProperties {
         newArtifacts.addAll( ClassPathUiSupport.getList( JAVAC_TEST_CLASSPATH_MODEL ) );
         newArtifacts.addAll( ClassPathUiSupport.getList( RUN_TEST_CLASSPATH_MODEL ) );
         newArtifacts.addAll( ClassPathUiSupport.getList( WAR_CONTENT_ADDITIONAL_MODEL.getDefaultListModel() ) );
-                
+
         // Create set of removed artifacts and remove them
         Set<ClassPathSupport.Item> removed = new HashSet<ClassPathSupport.Item>( oldArtifacts );
         removed.removeAll( newArtifacts );
         Set<ClassPathSupport.Item> added = new HashSet<ClassPathSupport.Item>(newArtifacts);
         added.removeAll(oldArtifacts);
-        
+
         // 1. first remove all project references. The method will modify
         // project property files, so it must be done separately
         for( ClassPathSupport.Item item : removed) {
@@ -878,11 +880,11 @@ final public class WebProjectProperties {
                 }
             }
         }
-        
+
         // 2. now read project.properties and modify rest
         EditableProperties ep = updateHelper.getProperties( AntProjectHelper.PROJECT_PROPERTIES_PATH );
         boolean changed = false;
-        
+
         for( ClassPathSupport.Item item : removed) {
             if (item.getType() == ClassPathSupport.Item.TYPE_LIBRARY) {
                 // remove helper property pointing to library jar if there is any
@@ -896,7 +898,7 @@ final public class WebProjectProperties {
             updateHelper.putProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH, ep);
         }
     }
-            
+
     private void storeRoots( SourceRoots roots, DefaultTableModel tableModel ) throws MalformedURLException {
         Vector data = tableModel.getDataVector();
         URL[] rootURLs = new URL[data.size()];
@@ -945,17 +947,17 @@ final public class WebProjectProperties {
             Exceptions.printStackTrace(ex);
         }
     }
-    
+
     /* This is used by CustomizerWSServiceHost */
     void putAdditionalProperty(String propertyName, String propertyValue) {
         additionalProperties.put(propertyName, propertyValue);
     }
-    
+
     private static void setNewContextPathValue(String contextPath, Project project, EditableProperties projectProps, EditableProperties privateProps) {
         if (contextPath == null)
             return;
 
-        cp = contextPath;    
+        cp = contextPath;
         serverId = privateProps.getProperty(J2EE_SERVER_INSTANCE);
     }
 
@@ -976,7 +978,7 @@ final public class WebProjectProperties {
     public ClassPathTableModel getJavaClassPathModel() {
         return JAVAC_CLASSPATH_MODEL;
     }
-    
+
     public void setNewExtenders(List extenders) {
         newExtenders = extenders;
     }
@@ -984,11 +986,11 @@ final public class WebProjectProperties {
     public void setExistingExtenders(List<WebModuleExtender> extenders) {
         existingExtenders = extenders;
     }
-    
+
     public void setNewFrameworksNames(List<String> names) {
         addedFrameworkNames = names;
     }
-    
+
     void loadIncludesExcludes(IncludeExcludeVisualizer v) {
         Set<File> roots = new HashSet<File>();
         for (DefaultTableModel model : new DefaultTableModel[] {SOURCE_ROOTS_MODEL, TEST_ROOTS_MODEL}) {
@@ -1135,7 +1137,7 @@ final public class WebProjectProperties {
         public void unregisterJ2eePlatformListener(J2eePlatform platform) {
             project.unregisterJ2eePlatformListener(platform);
         }
-        
+
     }
 
 }
diff --git a/enterprise/web.project/test/unit/src/org/netbeans/modules/web/project/WebProjectTest.java b/enterprise/web.project/test/unit/src/org/netbeans/modules/web/project/WebProjectTest.java
index 5ad7d35..692a665 100644
--- a/enterprise/web.project/test/unit/src/org/netbeans/modules/web/project/WebProjectTest.java
+++ b/enterprise/web.project/test/unit/src/org/netbeans/modules/web/project/WebProjectTest.java
@@ -40,13 +40,13 @@ import org.openide.util.test.MockLookup;
  * @author Martin Krauskopf, Radko Najman
  */
 public class WebProjectTest extends NbTestCase {
-    
+
     private String serverID;
-    
+
     public WebProjectTest(String testName) {
         super(testName);
     }
-    
+
     @Override
     protected void setUp() throws Exception {
         super.setUp();
@@ -66,7 +66,7 @@ public class WebProjectTest extends NbTestCase {
         MockLookup.setLookup(Lookup.EMPTY);
         super.tearDown();
     }
-    
+
 //    // see #99077, #70052
 //    // TODO investigate more
 //    @RandomlyFails
@@ -84,7 +84,7 @@ public class WebProjectTest extends NbTestCase {
 //        webProject = null;
 //        assertGC("project cannot be garbage collected", wr);
 //    }
-    
+
     public void testWebPropertiesEvaluator() throws Exception {
         File f = new File(getDataDir().getAbsolutePath(), "projects/WebApplication1");
         FileObject projdir = FileUtil.toFileObject(f);
@@ -107,6 +107,9 @@ public class WebProjectTest extends NbTestCase {
         JavaEEProjectSettings.setProfile(webProject, Profile.JAVA_EE_8_WEB);
         Profile obtainedProfileEE8 = JavaEEProjectSettings.getProfile(webProject);
         assertEquals(Profile.JAVA_EE_8_WEB, obtainedProfileEE8);
+        JavaEEProjectSettings.setProfile(webProject, Profile.JAKARTA_EE_8_WEB);
+        Profile obtainedProfileJakartaEE8 = JavaEEProjectSettings.getProfile(webProject);
+        assertEquals(Profile.JAKARTA_EE_8_WEB, obtainedProfileJakartaEE8);
     }
 
     /**
@@ -118,11 +121,11 @@ public class WebProjectTest extends NbTestCase {
         assertNotNull("has an OpenedHook", hook);
         ProjectOpenedTrampoline.DEFAULT.projectOpened(hook);
     }
-    
+
     public static void closeProject(final WebProject p) throws Exception {
         ProjectOpenedHook hook = p.getLookup().lookup(ProjectOpenedHook.class);
         assertNotNull("has an OpenedHook", hook);
         ProjectOpenedTrampoline.DEFAULT.projectClosed(hook);
     }
-    
+
 }
diff --git a/enterprise/websocket/src/org/netbeans/modules/websocket/editor/WebSocketMethodsTask.java b/enterprise/websocket/src/org/netbeans/modules/websocket/editor/WebSocketMethodsTask.java
index d3d7d10..8f1dbf9 100644
--- a/enterprise/websocket/src/org/netbeans/modules/websocket/editor/WebSocketMethodsTask.java
+++ b/enterprise/websocket/src/org/netbeans/modules/websocket/editor/WebSocketMethodsTask.java
@@ -78,7 +78,7 @@ import com.sun.source.util.SourcePositions;
 
 /**
  * @author ads
- * 
+ *
  */
 public class WebSocketMethodsTask implements CancellableTask<CompilationInfo> {
 
@@ -102,7 +102,7 @@ public class WebSocketMethodsTask implements CancellableTask<CompilationInfo> {
 
     /*
      * (non-Javadoc)
-     * 
+     *
      * @see org.netbeans.api.java.source.CancellableTask#cancel()
      */
     @Override
@@ -127,7 +127,8 @@ public class WebSocketMethodsTask implements CancellableTask<CompilationInfo> {
         if (!Profile.JAVA_EE_7_WEB.equals(profile)
                 && !Profile.JAVA_EE_7_FULL.equals(profile)
                 && !Profile.JAVA_EE_8_WEB.equals(profile)
-                && !Profile.JAVA_EE_8_FULL.equals(profile)) {
+                && !Profile.JAVA_EE_8_FULL.equals(profile)
+                && !Profile.JAKARTA_EE_8_FULL.equals(profile)) {
             return false;
         }
         return true;
diff --git a/enterprise/websocket/src/org/netbeans/modules/websocket/wizard/WebSocketPanel.java b/enterprise/websocket/src/org/netbeans/modules/websocket/wizard/WebSocketPanel.java
index a0bcd7f..a5c9385 100644
--- a/enterprise/websocket/src/org/netbeans/modules/websocket/wizard/WebSocketPanel.java
+++ b/enterprise/websocket/src/org/netbeans/modules/websocket/wizard/WebSocketPanel.java
@@ -35,7 +35,7 @@ import org.openide.util.NbBundle;
  *
  */
 class WebSocketPanel implements Panel<WizardDescriptor> {
-    
+
     static final String URI = "websocket.uri";      // NOI18N
 
     WebSocketPanel( WizardDescriptor wizard ) {
@@ -78,17 +78,19 @@ class WebSocketPanel implements Panel<WizardDescriptor> {
         WebModule webModule = WebModule.getWebModule(project.getProjectDirectory());
         if (webModule != null) {
             Profile profile = webModule.getJ2eeProfile();
-            if ( !Profile.JAVA_EE_7_FULL.equals(profile) && 
+            if ( !Profile.JAVA_EE_7_FULL.equals(profile) &&
                     !Profile.JAVA_EE_7_WEB.equals(profile) &&
                     !Profile.JAVA_EE_8_FULL.equals(profile) &&
-                            !Profile.JAVA_EE_8_WEB.equals(profile))
+                            !Profile.JAVA_EE_8_WEB.equals(profile) &&
+                                    !Profile.JAKARTA_EE_8_FULL.equals(profile) &&
+                                    !Profile.JAKARTA_EE_8_WEB.equals(profile))
             {
-                setErrorMessage(NbBundle.getMessage(WebSocketPanel.class, 
+                setErrorMessage(NbBundle.getMessage(WebSocketPanel.class,
                         "MSG_NoJEE7Profile"));          // NOI18N
                 return false;
             }
         }
-        
+
         String msg = getComponent().getError();
         setErrorMessage(msg);
         return msg==null;
@@ -117,11 +119,11 @@ class WebSocketPanel implements Panel<WizardDescriptor> {
     public void storeSettings( WizardDescriptor descriptor ) {
         getComponent().storeSettings(descriptor);
     }
-    
+
     private void setErrorMessage(String message) {
         myDescriptor.putProperty(WizardDescriptor.PROP_ERROR_MESSAGE, message);
     }
-    
+
     private WebSocketVisual myComponent;
     private WizardDescriptor myDescriptor;
 
diff --git a/enterprise/websvc.clientapi/nbproject/org-netbeans-modules-websvc-clientapi.sig b/enterprise/websvc.clientapi/nbproject/org-netbeans-modules-websvc-clientapi.sig
index 91f4d9e..d107150 100644
--- a/enterprise/websvc.clientapi/nbproject/org-netbeans-modules-websvc-clientapi.sig
+++ b/enterprise/websvc.clientapi/nbproject/org-netbeans-modules-websvc-clientapi.sig
@@ -215,6 +215,7 @@ fld protected final static java.lang.String JAVA_EE_VERSION_15 = "java-ee-versio
 fld protected final static java.lang.String JAVA_EE_VERSION_16 = "java-ee-version-16"
 fld protected final static java.lang.String JAVA_EE_VERSION_17 = "java-ee-version-17"
 fld protected final static java.lang.String JAVA_EE_VERSION_18 = "java-ee-version-18"
+fld protected final static java.lang.String JAKARTA_EE_VERSION_8="jakarta-ee-version-8"
 fld protected final static java.lang.String JAVA_EE_VERSION_NONE = "java-ee-version-none"
 intf org.netbeans.modules.websvc.spi.jaxws.client.JAXWSClientSupportImpl
 meth protected abstract void addJaxWs20Library() throws java.lang.Exception
@@ -234,4 +235,3 @@ meth public void removeServiceClient(java.lang.String)
 supr java.lang.Object
 hfds DEFAULT_WSIMPORT_OPTIONS,DEFAULT_WSIMPORT_VALUES,PACKAGE_OPTION,TARGET_OPTION,WSDL_LOCATION_OPTION,XENDORSED_OPTION,XNOCOMPILE_OPTION,clientArtifactsFolder,helper,project
 hcls WsImportFailedMessage
-
diff --git a/enterprise/websvc.clientapi/src/org/netbeans/modules/websvc/spi/jaxws/client/ProjectJAXWSClientSupport.java b/enterprise/websvc.clientapi/src/org/netbeans/modules/websvc/spi/jaxws/client/ProjectJAXWSClientSupport.java
index 1ba0162..7c9b682 100644
--- a/enterprise/websvc.clientapi/src/org/netbeans/modules/websvc/spi/jaxws/client/ProjectJAXWSClientSupport.java
+++ b/enterprise/websvc.clientapi/src/org/netbeans/modules/websvc/spi/jaxws/client/ProjectJAXWSClientSupport.java
@@ -69,7 +69,7 @@ import org.openide.windows.WindowManager;
  * @author mkuchtiak
  */
 public abstract class ProjectJAXWSClientSupport implements JAXWSClientSupportImpl {
-    
+
     private static final String[] DEFAULT_WSIMPORT_OPTIONS = {"extension", "verbose", "fork"};  //NOI18N
     private static final String[] DEFAULT_WSIMPORT_VALUES = {"true", "true", "false"};  //NOI18N
     private static final String XNOCOMPILE_OPTION = "xnocompile"; //NOI18N
@@ -82,28 +82,29 @@ public abstract class ProjectJAXWSClientSupport implements JAXWSClientSupportImp
     protected static final String JAVA_EE_VERSION_16="java-ee-version-16"; //NOI18N
     protected static final String JAVA_EE_VERSION_17="java-ee-version-17"; //NOI18N
     protected static final String JAVA_EE_VERSION_18="java-ee-version-18";
-    
+    protected static final String JAKARTA_EE_VERSION_8="jakarta-ee-version-8"; //NOI18N
+
     Project project;
     private AntProjectHelper helper;
     private FileObject clientArtifactsFolder;
-    
+
     /** Creates a new instance of WebProjectJAXWSClientSupport */
     public ProjectJAXWSClientSupport(Project project, AntProjectHelper helper ) {
         this.project=project;
         this.helper = helper;
     }
-    
+
     public void removeServiceClient(String serviceName) {
         JaxWsModel jaxWsModel = project.getLookup().lookup(JaxWsModel.class);
         if (jaxWsModel!=null && jaxWsModel.removeClient(serviceName)) {
             writeJaxWsModel(jaxWsModel);
         }
     }
-    
+
     public AntProjectHelper getAntProjectHelper() {
         return helper;
     }
-    
+
     public String getWsdlUrl(String serviceName) {
         JaxWsModel jaxWsModel = project.getLookup().lookup(JaxWsModel.class);
         if (jaxWsModel!=null) {
@@ -112,9 +113,9 @@ public abstract class ProjectJAXWSClientSupport implements JAXWSClientSupportImp
         }
         return null;
     }
-    
+
     public String addServiceClient(String clientName, String wsdlUrl, String packageName, boolean isJsr109) {
-        
+
         // create jax-ws.xml if necessary
         FileObject fo = WSUtils.findJaxWsFileObject(project);
         if (fo==null) {
@@ -124,12 +125,12 @@ public abstract class ProjectJAXWSClientSupport implements JAXWSClientSupportImp
                 ErrorManager.getDefault().notify(ex);
             }
         }
-        
+
         final JaxWsModel jaxWsModel = project.getLookup().lookup(JaxWsModel.class);
         String finalClientName=clientName;
         boolean clientAdded=false;
         if (jaxWsModel!=null) {
-            
+
             if(!isJsr109){
                 try{
                     addJaxWs20Library();
@@ -137,10 +138,10 @@ public abstract class ProjectJAXWSClientSupport implements JAXWSClientSupportImp
                     ErrorManager.getDefault().notify(e);
                 }
             }
-            
+
             Client client=null;
             finalClientName = findProperClientName(clientName, jaxWsModel);
-            FileObject xmlResourcesFo = getLocalWsdlFolderForClient(finalClientName,true);                      
+            FileObject xmlResourcesFo = getLocalWsdlFolderForClient(finalClientName,true);
             FileObject localWsdl=null;
             try {
                 localWsdl = WSUtils.retrieveResource(
@@ -162,7 +163,7 @@ public abstract class ProjectJAXWSClientSupport implements JAXWSClientSupportImp
                 NotifyDescriptor desc = new NotifyDescriptor.Message(mes, NotifyDescriptor.Message.ERROR_MESSAGE);
                 DialogDisplayer.getDefault().notify(desc);
             }
-            
+
             if (localWsdl!=null) {
                 try {
                     String localWsdlUrl = FileUtil.getRelativePath(xmlResourcesFo, localWsdl);
@@ -179,7 +180,7 @@ public abstract class ProjectJAXWSClientSupport implements JAXWSClientSupportImp
 
                 FileObject catalog = getCatalogFileObject();
                 if (catalog!=null) client.setCatalogFile(CATALOG_FILE);
-                
+
                 WsimportOptions wsimportOptions = client.getWsImportOptions();
                 WsimportOption wsimportOption = null;
                 if (wsimportOptions != null) {
@@ -263,7 +264,7 @@ public abstract class ProjectJAXWSClientSupport implements JAXWSClientSupportImp
                                 });
                             } else {
                                 Client client = jaxWsModel.findClientByName(clientName2);
-                                String packName = client.getPackageName();                               
+                                String packName = client.getPackageName();
                                 // this shuldn't normally happen
                                 // this applies only for case when package name cannot be resolved for namespace
                                 if (packName == null) {
@@ -275,7 +276,7 @@ public abstract class ProjectJAXWSClientSupport implements JAXWSClientSupportImp
                                             packName = javaName.substring(0,index );
                                         } else {
                                             packName = javaName;
-                                        }                                 
+                                        }
                                         client.setPackageName(packName);
                                         writeJaxWsModel(jaxWsModel);
                                     }
@@ -290,7 +291,7 @@ public abstract class ProjectJAXWSClientSupport implements JAXWSClientSupportImp
         }
         return null;
     }
-    
+
     private void runWsimport(String finalClientName){
         final FileObject buildImplFo = project.getProjectDirectory().getFileObject(GeneratedFilesHelper.BUILD_XML_PATH);
         final String finalName = finalClientName;
@@ -302,7 +303,7 @@ public abstract class ProjectJAXWSClientSupport implements JAXWSClientSupportImp
                 public void run() {
                     openOutputWindow();
                 }
-            });            
+            });
         }
 
         try {
@@ -318,14 +319,14 @@ public abstract class ProjectJAXWSClientSupport implements JAXWSClientSupportImp
             ErrorManager.getDefault().notify(e);
         }
     }
-    
+
     private void openOutputWindow() {
         TopComponent outputTc = WindowManager.getDefault().findTopComponent("output"); //NOI18N
         if (outputTc != null) {
             outputTc.open();
-        }       
+        }
     }
-    
+
     private String findProperClientName(String name, JaxWsModel jaxWsModel) {
         String firstName=name.length()==0?NbBundle.getMessage(ProjectJAXWSClientSupport.class,"LBL_defaultClientName"):name;
         if (jaxWsModel.findClientByName(firstName)==null) return firstName;
@@ -335,7 +336,7 @@ public abstract class ProjectJAXWSClientSupport implements JAXWSClientSupportImp
                 return finalName;
         }
     }
-    
+
     private void writeJaxWsModel(JaxWsModel jaxWsModel) {
         try {
             jaxWsModel.write();
@@ -343,7 +344,7 @@ public abstract class ProjectJAXWSClientSupport implements JAXWSClientSupportImp
             Logger.getLogger(this.getClass().getName()).log(Level.FINE, "failed to save jax-ws.xml", ex); //NOI18N
         }
     }
-    
+
     public List getServiceClients() {
         List<Client> jaxWsClients = new ArrayList<Client>();
         JaxWsModel jaxWsModel = project.getLookup().lookup(JaxWsModel.class);
@@ -353,21 +354,21 @@ public abstract class ProjectJAXWSClientSupport implements JAXWSClientSupportImp
         }
         return jaxWsClients;
     }
-    
+
     /**
      *  return root folder for wsdl artifacts
      */
     public FileObject getLocalWsdlFolderForClient(String clientName, boolean createFolder) {
         return getArtifactsFolder(clientName, createFolder, true);
     }
-    
+
     /**
      *  return folder for local wsdl bindings
      */
     public FileObject getBindingsFolderForClient(String clientName, boolean createFolder) {
         return getArtifactsFolder(clientName, createFolder, false);
     }
-    
+
     private FileObject getArtifactsFolder(String clientName, boolean createFolder, boolean forWsdl) {
         String folderName = forWsdl?"wsdl":"bindings"; //NOI18N
         FileObject root = getXmlArtifactsRoot();
@@ -389,40 +390,40 @@ public abstract class ProjectJAXWSClientSupport implements JAXWSClientSupportImp
         }
         return wsdlLocalFolder;
     }
-    
+
     /** return root folder for xml artifacts
      */
     protected FileObject getXmlArtifactsRoot() {
         return project.getProjectDirectory();
     }
-    
+
     private FileObject getCatalogFileObject() {
         return project.getProjectDirectory().getFileObject(CATALOG_FILE);
     }
-    
+
     public URL getCatalog() {
         FileObject catalog = getCatalogFileObject();
         return ((catalog==null) ? null : catalog.toURL());
     }
-    
+
     protected abstract void addJaxWs20Library() throws Exception;
-    
+
     public abstract FileObject getWsdlFolder(boolean create) throws IOException;
-    
+
     public String getServiceRefName(Node clientNode) {
         WsdlService service = clientNode.getLookup().lookup(WsdlService.class);
         String serviceName = service.getName();
         return "service/" + serviceName;
     }
-    
+
     private class WsImportFailedMessage extends NotifyDescriptor.Message {
         public WsImportFailedMessage(Throwable ex) {
             super(NbBundle.getMessage(ProjectJAXWSClientSupport.class,"TXT_CannotGenerateClient",ex.getLocalizedMessage()),
                     NotifyDescriptor.ERROR_MESSAGE);
         }
-        
+
     }
-    
+
     /** folder where xml client artifacts should be saved, e.g. WEB-INF/wsdl/client/SampleClient
      */
     protected FileObject getWsdlFolderForClient(String name) throws IOException {
@@ -440,7 +441,7 @@ public abstract class ProjectJAXWSClientSupport implements JAXWSClientSupportImp
         if (clientWsdlFolder==null) clientWsdlFolder = globalWsdlFolder.createFolder("client"); //NOI18N
         return clientWsdlFolder.createFolder(name);
     }
-    
+
     private static boolean isXnocompile(Project project){
         JAXWSVersionProvider jvp = project.getLookup().lookup(JAXWSVersionProvider.class);
         if (jvp != null) {
@@ -464,7 +465,7 @@ public abstract class ProjectJAXWSClientSupport implements JAXWSClientSupportImp
         // Defaultly return false
         return false;
     }
-    
+
     private static boolean isVersionSatisfied(String version, String requiredVersion) {
         int len1 = version.length();
         int len2 = requiredVersion.length();
@@ -483,5 +484,5 @@ public abstract class ProjectJAXWSClientSupport implements JAXWSClientSupportImp
     protected String getProjectJavaEEVersion() {
         return JAVA_EE_VERSION_NONE;
     }
-    
+
 }
diff --git a/enterprise/websvc.jaxwsapi/nbproject/org-netbeans-modules-websvc-jaxwsapi.sig b/enterprise/websvc.jaxwsapi/nbproject/org-netbeans-modules-websvc-jaxwsapi.sig
index 3e691b2..d64f735 100644
--- a/enterprise/websvc.jaxwsapi/nbproject/org-netbeans-modules-websvc-jaxwsapi.sig
+++ b/enterprise/websvc.jaxwsapi/nbproject/org-netbeans-modules-websvc-jaxwsapi.sig
@@ -143,6 +143,7 @@ fld protected final static java.lang.String JAVA_EE_VERSION_15 = "java-ee-versio
 fld protected final static java.lang.String JAVA_EE_VERSION_16 = "java-ee-version-16"
 fld protected final static java.lang.String JAVA_EE_VERSION_17 = "java-ee-version-17"
 fld protected final static java.lang.String JAVA_EE_VERSION_18 = "java-ee-version-18"
+fld protected final static java.lang.String JAKARTA_EE_VERSION_8="jakarta-ee-version-8"
 fld protected final static java.lang.String JAVA_EE_VERSION_NONE = "java-ee-version-none"
 intf org.netbeans.modules.websvc.jaxws.spi.JAXWSSupportImpl
 meth protected abstract void addJaxwsArtifacts(org.netbeans.api.project.Project,java.lang.String,java.lang.String) throws java.lang.Exception
@@ -346,4 +347,3 @@ meth public void startPrefixMapping(java.lang.String,java.lang.String) throws or
 meth public void unparsedEntityDecl(java.lang.String,java.lang.String,java.lang.String,java.lang.String) throws org.xml.sax.SAXException
 meth public void warning(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException
 supr java.lang.Object
-
diff --git a/enterprise/websvc.jaxwsapi/src/org/netbeans/modules/websvc/jaxws/spi/ProjectJAXWSSupport.java b/enterprise/websvc.jaxwsapi/src/org/netbeans/modules/websvc/jaxws/spi/ProjectJAXWSSupport.java
index 711a251..198868f 100644
--- a/enterprise/websvc.jaxwsapi/src/org/netbeans/modules/websvc/jaxws/spi/ProjectJAXWSSupport.java
+++ b/enterprise/websvc.jaxwsapi/src/org/netbeans/modules/websvc/jaxws/spi/ProjectJAXWSSupport.java
@@ -66,7 +66,7 @@ import org.xml.sax.SAXException;
  * Created on February 7, 2006, 11:09 AM
  */
 public abstract class ProjectJAXWSSupport implements JAXWSSupportImpl {
-    
+
     private static final String[] DEFAULT_WSIMPORT_OPTIONS = {"extension", "verbose", "fork"};  //NOI18N
     private static final String[] DEFAULT_WSIMPORT_VALUES = {"true", "true", "false"};  //NOI18N
     private static final String XNOCOMPILE_OPTION = "xnocompile";  //NOI18N
@@ -78,17 +78,18 @@ public abstract class ProjectJAXWSSupport implements JAXWSSupportImpl {
     protected static final String JAVA_EE_VERSION_16="java-ee-version-16"; //NOI18N
     protected static final String JAVA_EE_VERSION_17="java-ee-version-17"; //NOI18N
     protected static final String JAVA_EE_VERSION_18="java-ee-version-18"; //NOI18N
-    
+    protected static final String JAKARTA_EE_VERSION_8="jakarta-ee-version-8"; //NOI18N
+
     private Project project;
     private AntProjectHelper antProjectHelper;
     private FileObject serviceArtifactsFolder;
-    
+
     /** Creates a new instance of JAXWSSupport */
     public ProjectJAXWSSupport(Project project, AntProjectHelper antProjectHelper) {
         this.project = project;
         this.antProjectHelper = antProjectHelper;
     }
-    
+
     public void removeService(String serviceName) {
         assert serviceName != null;
         JaxWsModel jaxWsModel = project.getLookup().lookup(JaxWsModel.class);
@@ -109,14 +110,14 @@ public abstract class ProjectJAXWSSupport implements JAXWSSupportImpl {
      * Default implementation does nothing.
      */
     public void serviceFromJavaRemoved(String serviceName) {}
-    
+
     public boolean isFromWSDL(String serviceName) {
         JaxWsModel jaxWsModel = project.getLookup().lookup(JaxWsModel.class);
         Service service = jaxWsModel.findServiceByName(serviceName);
         if (service!=null && service.getWsdlUrl()!=null) return true;
         else return false;
     }
-    
+
     /**
      * Returns the name of the implementation class
      * given the service (ide) name
@@ -129,12 +130,12 @@ public abstract class ProjectJAXWSSupport implements JAXWSSupportImpl {
         }
         return null;
     }
-    
+
     public AntProjectHelper getAntProjectHelper() {
         return antProjectHelper;
     }
-    
-    public void addService(String serviceName, String serviceImpl, boolean isJsr109) {  
+
+    public void addService(String serviceName, String serviceImpl, boolean isJsr109) {
         if(!isJsr109 ){
             try {
                 addJaxwsArtifacts(project, serviceName, serviceImpl);
@@ -149,26 +150,26 @@ public abstract class ProjectJAXWSSupport implements JAXWSSupportImpl {
             }
         }
     }
-    
+
     protected abstract void addJaxwsArtifacts(Project project, String wsName,
             String serviceImpl) throws Exception;
-    
-    protected void addServletElement(Project project, String wsName, String serviceImpl) throws IOException {        
+
+    protected void addServletElement(Project project, String wsName, String serviceImpl) throws IOException {
     }
-    
+
     /*
      * Add web service to jax-ws.xml
      * intended for web services from wsdl
      * @return returns the unique IDE service name
      */
-    
+
     public String addService(String name, String serviceImpl, String wsdlUrl, String serviceName,
             String portName, String packageName, boolean isJsr109, boolean useProvider) {
         JaxWsModel jaxWsModel = project.getLookup().lookup(JaxWsModel.class);
         if (jaxWsModel!=null) {
             String finalServiceName = WSUtils.findProperServiceName(name, jaxWsModel);
             boolean serviceAdded=false;
-            
+
             FileObject localWsdl=null;
             try {
                 // download resources to xml-resources
@@ -177,7 +178,7 @@ public abstract class ProjectJAXWSSupport implements JAXWSSupportImpl {
                         xmlResorcesFo,
                         new URI(wsdlUrl));
                 if (localWsdl!=null) {
-                    
+
                     WsdlWrapperHandler handler = null;
                     try {
                         handler = WsdlWrapperGenerator.parse(localWsdl.toURL().toExternalForm());
@@ -228,7 +229,7 @@ public abstract class ProjectJAXWSSupport implements JAXWSSupportImpl {
                     service.setLocalWsdlFile(localWsdlUrl);
                     FileObject catalog = getCatalogFileObject();
                     if (catalog!=null) service.setCatalogFile(CATALOG_FILE);
-                    
+
                     WsimportOptions wsimportOptions = service.getWsImportOptions();
                     if (wsimportOptions != null) {
                         int i=0;
@@ -257,11 +258,11 @@ public abstract class ProjectJAXWSSupport implements JAXWSSupportImpl {
                             wsimportOptions.addWsimportOption(wsimportOption);
                         }
                     }
-                    
+
                     writeJaxWsModel(jaxWsModel);
                     serviceAdded=true;
                 }
-                
+
             } catch (URISyntaxException ex) {
                 ErrorManager.getDefault().notify(ErrorManager.EXCEPTION,ex);
             } catch (UnknownHostException ex) {
@@ -269,7 +270,7 @@ public abstract class ProjectJAXWSSupport implements JAXWSSupportImpl {
             } catch (IOException ex) {
                 ErrorManager.getDefault().notify(ErrorManager.EXCEPTION,ex);
             }
-            
+
             if (serviceAdded) {
                 if(!isJsr109 ){
                     try{
@@ -290,7 +291,7 @@ public abstract class ProjectJAXWSSupport implements JAXWSSupportImpl {
                     ExecutorTask wsimportTask =
                             ActionUtils.runTarget(buildImplFo,
                                     new String[]{"wsimport-service-"+finalServiceName}, //NOI18N
-                                    props); 
+                                    props);
                     wsimportTask.waitFinished();
                 } catch (IOException ex) {
                     ErrorManager.getDefault().log(ex.getLocalizedMessage());
@@ -302,7 +303,7 @@ public abstract class ProjectJAXWSSupport implements JAXWSSupportImpl {
         }
         return null;
     }
-    
+
     /**
      * Returns the list of web services in the project
      */
@@ -351,7 +352,7 @@ public abstract class ProjectJAXWSSupport implements JAXWSSupportImpl {
             ErrorManager.getDefault().notify(ex);
         }
     }
-    
+
     /**
      *  return folder for local wsdl artifacts
      */
@@ -364,7 +365,7 @@ public abstract class ProjectJAXWSSupport implements JAXWSSupportImpl {
     public FileObject getBindingsFolderForService(String serviceName, boolean createFolder) {
         return getArtifactsFolder(serviceName, createFolder, false);
     }
-    
+
     private FileObject getArtifactsFolder(String serviceName, boolean createFolder, boolean forWsdl) {
         String folderName = forWsdl?"wsdl":"bindings"; //NOI18N
         FileObject root = getXmlArtifactsRoot();
@@ -390,17 +391,17 @@ public abstract class ProjectJAXWSSupport implements JAXWSSupportImpl {
         }
         return wsdlLocalFolder;
     }
-    
+
     /** return root folder for xml artifacts
      */
     protected FileObject getXmlArtifactsRoot() {
         return project.getProjectDirectory();
     }
-    
+
     private FileObject getCatalogFileObject() {
         return project.getProjectDirectory().getFileObject(CATALOG_FILE);
     }
-    
+
     public URL getCatalog() {
         try {
             FileObject catalog = getCatalogFileObject();
@@ -408,9 +409,9 @@ public abstract class ProjectJAXWSSupport implements JAXWSSupportImpl {
         } catch (FileStateInvalidException ex) {
             return null;
         }
-        
+
     }
-    
+
     private FileObject getWsdlFolderForService(String name) throws IOException {
         FileObject globalWsdlFolder = getWsdlFolder(true);
         FileObject oldWsdlFolder = globalWsdlFolder.getFileObject(name);
@@ -424,7 +425,7 @@ public abstract class ProjectJAXWSSupport implements JAXWSSupportImpl {
         }
         return globalWsdlFolder.createFolder(name);
     }
-    
+
     private static boolean isXnocompile(Project project){
         JAXWSVersionProvider jvp = project.getLookup().lookup(JAXWSVersionProvider.class);
         if (jvp != null) {
@@ -436,7 +437,7 @@ public abstract class ProjectJAXWSSupport implements JAXWSSupportImpl {
         // Defaultly return true
         return true;
     }
-    
+
     private static boolean isXendorsed(Project project){
         JAXWSVersionProvider jvp = project.getLookup().lookup(JAXWSVersionProvider.class);
         if (jvp != null) {
@@ -448,7 +449,7 @@ public abstract class ProjectJAXWSSupport implements JAXWSSupportImpl {
         // Defaultly return false
         return false;
     }
-    
+
     private static boolean isVersionSatisfied(String version, String requiredVersion) {
         int len1 = version.length();
         int len2 = requiredVersion.length();
@@ -463,9 +464,9 @@ public abstract class ProjectJAXWSSupport implements JAXWSSupportImpl {
         else if (len1 < len2) return false;
         return true;
     }
-    
+
     public abstract FileObject getWsdlFolder(boolean create) throws java.io.IOException;
-    
+
     /** Get wsdlLocation information
      * Useful for web service from wsdl
      * @param name service "display" name
diff --git a/enterprise/websvc.kit/test/qa-functional/src/org/netbeans/modules/ws/qaf/WebServicesTestBase.java b/enterprise/websvc.kit/test/qa-functional/src/org/netbeans/modules/ws/qaf/WebServicesTestBase.java
index c89deb6..a0fd9ab 100644
--- a/enterprise/websvc.kit/test/qa-functional/src/org/netbeans/modules/ws/qaf/WebServicesTestBase.java
+++ b/enterprise/websvc.kit/test/qa-functional/src/org/netbeans/modules/ws/qaf/WebServicesTestBase.java
@@ -186,7 +186,8 @@ public abstract class WebServicesTestBase extends J2eeTestCase {
         JAVAEE5,
         JAVAEE6,
         JAVAEE7,
-        JAVAEE8;
+        JAVAEE8,
+        JAKARTAEE8;
 
         @Override
         public String toString() {
@@ -206,6 +207,9 @@ public abstract class WebServicesTestBase extends J2eeTestCase {
                 case JAVAEE8:
                       //Java EE 8
                       return "Java EE 8";
+                case JAKARTAEE8:
+                      //Jakarta EE 8
+                     return "Jakarta EE 8";
             }
             throw new AssertionError("Unknown type: " + this); //NOI18N
         }
@@ -479,7 +483,9 @@ public abstract class WebServicesTestBase extends J2eeTestCase {
                 jcboVersion.selectItem(javaeeVersion.toString());
             } else {
                 // cannot use display name for Maven project
-                if (JavaEEVersion.JAVAEE8.equals(javaeeVersion)) {
+                if (JavaEEVersion.JAKARTAEE8.equals(javaeeVersion)) {
+                    jcboVersion.selectItem("1.8.0");
+                } else if( JavaEEVersion.JAVAEE8.equals(javaeeVersion)) {
                     jcboVersion.selectItem("1.8");
                 } else if (JavaEEVersion.JAVAEE7.equals(javaeeVersion)) {
                     jcboVersion.selectItem("1.7");
@@ -796,7 +802,7 @@ public abstract class WebServicesTestBase extends J2eeTestCase {
     /**
      * Opens Services tab, go to specified Maven repository, call Update Index
      * and immediately cancel this action.
-     * @param repositoryName 
+     * @param repositoryName
      */
     private static void runAndCancelUpdateIndex(String repositoryName) {
         RuntimeTabOperator servicesOper = RuntimeTabOperator.invoke();
@@ -815,7 +821,7 @@ public abstract class WebServicesTestBase extends J2eeTestCase {
             JemmyProperties.setCurrentTimeout("ComponentOperator.WaitComponentTimeout", oldTimeout);
         }
     }
-    
+
     protected File getProjectsRootDir() throws IOException {
         File f = getWorkDir();
         LOGGER.log(Level.FINE, "Working directory is set to: {0}", f);
diff --git a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/editor/AsyncConverter.java b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/editor/AsyncConverter.java
index 9522c08..16ee056 100644
--- a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/editor/AsyncConverter.java
+++ b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/editor/AsyncConverter.java
@@ -98,27 +98,29 @@ abstract class AsyncConverter {
         if (!Profile.JAVA_EE_7_WEB.equals(profile)
                 && !Profile.JAVA_EE_7_FULL.equals( profile)
                 && !Profile.JAVA_EE_8_WEB.equals(profile)
-                && !Profile.JAVA_EE_8_FULL.equals(profile))
+                && !Profile.JAVA_EE_8_FULL.equals(profile)
+                && !Profile.JAKARTA_EE_8_WEB.equals(profile)
+                && !Profile.JAKARTA_EE_8_FULL.equals(profile))
         {
             return false;
         }
         return true;
     }
-    
+
     boolean isApplicable(Element element){
         if ( element == null || element.getKind() != ElementKind.METHOD){
             return false;
         }
-        
+
         Element enclosingElement = element.getEnclosingElement();
         if ( enclosingElement== null || !(enclosingElement instanceof TypeElement)){
             return false;
         }
         return true;
     }
-    
+
     protected abstract Logger getLogger();
-    
+
     protected boolean isAsync(Element method){
         if ( method instanceof ExecutableElement ){
             ExecutableElement exec = (ExecutableElement)method;
@@ -133,7 +135,7 @@ abstract class AsyncConverter {
                                 contentEquals("javax.ws.rs.container.AsyncResponse");   // NOI18N
                     }
                 }
-                if( hasAsyncType && hasAnnotation(param, 
+                if( hasAsyncType && hasAnnotation(param,
                         "javax.ws.rs.container.Suspended")){ // NOI18N
                     return true;
                 }
@@ -141,12 +143,12 @@ abstract class AsyncConverter {
         }
         return false;
     }
-    
+
     protected boolean checkRestMethod( final String fqn , Element method,
             FileObject source) {
         final String methodName = method.getSimpleName().toString();
         /*
-         *  TODO : method name doesn't uniquely identify the method. 
+         *  TODO : method name doesn't uniquely identify the method.
          *  So implementation should be improved
          */
         Project project = FileOwnerQuery.getOwner(source);
@@ -164,11 +166,11 @@ abstract class AsyncConverter {
                         throws Exception
                 {
                     RestServices services = metadata.getRoot();
-                    RestServiceDescription[] descriptions = 
+                    RestServiceDescription[] descriptions =
                             services.getRestServiceDescription();
                     for (RestServiceDescription description : descriptions) {
                         if ( fqn.equals(description.getClassName())){
-                            List<RestMethodDescription> methods = 
+                            List<RestMethodDescription> methods =
                                     description.getMethods();
                             for (RestMethodDescription method : methods){
                                 if ( methodName.equals(method.getName())){
@@ -189,7 +191,7 @@ abstract class AsyncConverter {
         }
         return false;
     }
-    
+
     protected boolean hasAnnotation(Element element, String... annotationFqns){
         List<? extends AnnotationMirror> annotations = element.getAnnotationMirrors();
         for (AnnotationMirror annotation : annotations) {
@@ -206,7 +208,7 @@ abstract class AsyncConverter {
         }
         return false;
     }
-    
+
     protected void convertMethod( final ElementHandle<Element> handle,
             FileObject fileObject ) throws IOException
     {
@@ -308,7 +310,7 @@ abstract class AsyncConverter {
                 });
         task.commit();
     }
-    
+
     private String findFreeName( String name,Element enclosingElement,
             Element havingName)
     {
@@ -324,7 +326,7 @@ abstract class AsyncConverter {
         }
         return name;
     }
-    
+
     private String convertMethodName(String name){
         if ( name.length()<=1){
             return "do"+name;       // NOI18N
@@ -333,37 +335,37 @@ abstract class AsyncConverter {
             return "do"+Character.toUpperCase(name.charAt(0))+name.substring(1);
         }
     }
-    
+
     private boolean isEjb(Element element){
-        return hasAnnotation(element, "javax.ejb.Stateless", 
+        return hasAnnotation(element, "javax.ejb.Stateless",
                 "javax.ejb.Singleton");// NOI18N
     }
-    
+
     private ClassTree createAsyncMethod( TreeMaker maker,
-            String asyncName, String service, MethodTree method, String movedName , 
+            String asyncName, String service, MethodTree method, String movedName ,
             WorkingCopy copy, ClassTree classTree, boolean isEjb)
     {
         ModifiersTree modifiers = method.getModifiers();
         if ( isEjb ){
             AnnotationTree async = maker.Annotation(maker.QualIdent(
-                    "javax.ejb.Asynchronous"),          // NOI18N 
+                    "javax.ejb.Asynchronous"),          // NOI18N
                     Collections.<ExpressionTree>emptyList());
             modifiers  = maker.addModifiersAnnotation(modifiers, async);
         }
         List<? extends VariableTree> parameters = method.getParameters();
         String asyncReponseParam = getAsynParam("asyncResponse",parameters);//NOI18N
-        
+
         ModifiersTree paramModifier = maker.Modifiers(EnumSet.of(Modifier.FINAL));
         AnnotationTree annotation = maker.Annotation(
                 maker.QualIdent("javax.ws.rs.container.Suspended"),        // NOI18N
                 Collections.<ExpressionTree>emptyList());
-        paramModifier = maker.Modifiers(paramModifier, 
+        paramModifier = maker.Modifiers(paramModifier,
                 Collections.singletonList(annotation));
-        VariableTree asyncParam = maker.Variable(paramModifier, asyncReponseParam, 
+        VariableTree asyncParam = maker.Variable(paramModifier, asyncReponseParam,
                 maker.QualIdent("javax.ws.rs.container.AsyncResponse"), null);//NOI18N
         List<VariableTree> params = new ArrayList<VariableTree>(parameters.size()+1);
         params.add(asyncParam);
-        
+
         Tree returnType = method.getReturnType();
         boolean noReturn =returnType.toString().equals("void");     // NOI18N
 
@@ -379,9 +381,9 @@ abstract class AsyncConverter {
         body.append(movedName);
         body.append('(');
         for (VariableTree param : parameters) {
-            ModifiersTree modifier = maker.addModifiersModifier(param.getModifiers(), 
+            ModifiersTree modifier = maker.addModifiersModifier(param.getModifiers(),
                     Modifier.FINAL);
-            VariableTree newParam = maker.Variable(modifier, param.getName(), 
+            VariableTree newParam = maker.Variable(modifier, param.getName(),
                     param.getType(), param.getInitializer());
             params.add(newParam);
             TreePath pathParam = copy.getTrees().getPath(
@@ -404,8 +406,8 @@ abstract class AsyncConverter {
             body.append("}});");
         }
         body.append('}');
-        
-        MethodTree newMethod = maker.Method(modifiers, asyncName, 
+
+        MethodTree newMethod = maker.Method(modifiers, asyncName,
                 maker.Type("void"),             // NOI18N
                 Collections.<TypeParameterTree> emptyList(),
                 params,
@@ -413,7 +415,7 @@ abstract class AsyncConverter {
                 body.toString(),null);
         return maker.addClassMember(classTree, newMethod);
     }
-    
+
     private String getAsynParam(String paramName, List<? extends VariableTree> parameters ) {
         for (VariableTree variableTree : parameters) {
             if ( paramName.equals(variableTree.getName())){
@@ -428,15 +430,15 @@ abstract class AsyncConverter {
     {
         List<? extends VariableTree> parameters = method.getParameters();
         Tree returnType = method.getReturnType();
-        BlockTree body = method.getBody();  
-        
+        BlockTree body = method.getBody();
+
         ModifiersTree modifiers = maker.Modifiers(EnumSet.of(Modifier.PRIVATE));
-        MethodTree newMethod = maker.Method(modifiers, movedName, 
+        MethodTree newMethod = maker.Method(modifiers, movedName,
                 returnType,
                 Collections.<TypeParameterTree> emptyList(),
                 parameters,
                 Collections.<ExpressionTree> emptyList(),body,null);
-        
+
         ClassTree newClass = maker.addClassMember(classTree, newMethod);
         newClass = maker.removeClassMember(newClass, method);
         return newClass;
diff --git a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/wizard/InterceptorPanel.java b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/wizard/InterceptorPanel.java
index d1f6d6f..ba44d47 100644
--- a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/wizard/InterceptorPanel.java
+++ b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/wizard/InterceptorPanel.java
@@ -36,10 +36,10 @@ import org.netbeans.modules.web.api.webmodule.WebModule;
  *
  */
 public class InterceptorPanel implements Panel<WizardDescriptor> {
-    
+
     static final String WRITER = "writer.interceptor";  // NOI18N
     static final String READER = "reader.interceptor";  // NOI18N
-    
+
     InterceptorPanel( WizardDescriptor wizard ) {
         myDescriptor = wizard;
     }
@@ -80,17 +80,19 @@ public class InterceptorPanel implements Panel<WizardDescriptor> {
         WebModule webModule = WebModule.getWebModule(project.getProjectDirectory());
         if (webModule != null) {
             Profile profile = webModule.getJ2eeProfile();
-            if ( !Profile.JAVA_EE_7_FULL.equals(profile) && 
+            if ( !Profile.JAVA_EE_7_FULL.equals(profile) &&
                     !Profile.JAVA_EE_7_WEB.equals(profile) &&
-                    !Profile.JAVA_EE_8_FULL.equals(profile) && 
-                            !Profile.JAVA_EE_8_WEB.equals(profile))
+                    !Profile.JAVA_EE_8_FULL.equals(profile) &&
+                            !Profile.JAVA_EE_8_WEB.equals(profile) &&
+                            !Profile.JAKARTA_EE_8_FULL.equals(profile) &&
+                                    !Profile.JAKARTA_EE_8_WEB.equals(profile))
             {
-                setErrorMessage(NbBundle.getMessage(InterceptorPanel.class, 
+                setErrorMessage(NbBundle.getMessage(InterceptorPanel.class,
                         "MSG_NoJEE7Profile"));          // NOI18N
                 return false;
             }
         }
-        
+
         String msg = getComponent().getError();
         setErrorMessage(msg);
         return msg==null;
@@ -119,11 +121,11 @@ public class InterceptorPanel implements Panel<WizardDescriptor> {
     public void storeSettings( WizardDescriptor descriptor ) {
         getComponent().storeSettings(descriptor);
     }
-    
+
     private void setErrorMessage(String message) {
         myDescriptor.putProperty(WizardDescriptor.PROP_ERROR_MESSAGE, message);
     }
-    
+
     private InterceptorPanelVisual myComponent;
     private WizardDescriptor myDescriptor;
 
diff --git a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/wizard/JaxRsFilterPanel.java b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/wizard/JaxRsFilterPanel.java
index 17b191d..064b5d1 100644
--- a/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/wizard/JaxRsFilterPanel.java
+++ b/enterprise/websvc.rest/src/org/netbeans/modules/websvc/rest/wizard/JaxRsFilterPanel.java
@@ -39,13 +39,13 @@ import org.openide.util.NbBundle;
  *
  */
 class JaxRsFilterPanel implements Panel<WizardDescriptor> {
-    
+
     static final String CLIENT_FILTER = "client.filter";        // NOI18N
     static final String SERVER_FILTER = "server.filter";        // NOI18N
-    
+
     static final String REQUEST = "request.filter";             // NOI18N
     static final String RESPONSE = "response.filter";            // NOI18N
-    
+
     static final String PRE_MATCHING = "prematching.filter";    // NOI18N
     static final String PROVIDER = "provider.filter";           // NOI18N
 
@@ -89,17 +89,19 @@ class JaxRsFilterPanel implements Panel<WizardDescriptor> {
         WebModule webModule = WebModule.getWebModule(project.getProjectDirectory());
         if (webModule != null) {
             Profile profile = webModule.getJ2eeProfile();
-            if ( !Profile.JAVA_EE_8_FULL.equals(profile) && 
+            if ( !Profile.JAKARTA_EE_8_FULL.equals(profile) && 
+                    !Profile.JAKARTA_EE_8_WEB.equals(profile) &&
+                    !Profile.JAVA_EE_8_FULL.equals(profile) &&
                     !Profile.JAVA_EE_8_WEB.equals(profile) &&
                     !Profile.JAVA_EE_7_FULL.equals(profile) &&
                     !Profile.JAVA_EE_7_WEB.equals(profile))
             {
-                setErrorMessage(NbBundle.getMessage(JaxRsFilterPanel.class, 
+                setErrorMessage(NbBundle.getMessage(JaxRsFilterPanel.class,
                         "MSG_NoJEE7Profile"));          // NOI18N
                 return false;
             }
         }
-        
+
         String msg = getComponent().getError();
         setErrorMessage(msg);
         return msg==null;
@@ -128,11 +130,11 @@ class JaxRsFilterPanel implements Panel<WizardDescriptor> {
     public void storeSettings( WizardDescriptor descriptor ) {
         getComponent().storeSettings(descriptor);
     }
-    
+
     private void setErrorMessage(String message) {
         myDescriptor.putProperty(WizardDescriptor.PROP_ERROR_MESSAGE, message);
     }
-    
+
     private JaxRsFilterVisual myComponent;
     private WizardDescriptor myDescriptor;
 
diff --git a/enterprise/websvc.restapi/nbproject/org-netbeans-modules-websvc-restapi.sig b/enterprise/websvc.restapi/nbproject/org-netbeans-modules-websvc-restapi.sig
index b32f004..29130f0 100644
--- a/enterprise/websvc.restapi/nbproject/org-netbeans-modules-websvc-restapi.sig
+++ b/enterprise/websvc.restapi/nbproject/org-netbeans-modules-websvc-restapi.sig
@@ -328,6 +328,7 @@ meth public boolean isEE5()
 meth public boolean isEE6()
 meth public boolean isEE7()
 meth public boolean isEE8()
+meth public boolean isJakartaEE8()
 meth public boolean isEESpecWithJaxRS()
 meth public boolean isRestSupportOn()
 meth public boolean isServerGFV2()
@@ -364,4 +365,3 @@ meth public static org.netbeans.modules.websvc.rest.spi.RestSupport$RestConfig[]
 meth public void setAppClassName(java.lang.String)
 supr java.lang.Enum<org.netbeans.modules.websvc.rest.spi.RestSupport$RestConfig>
 hfds appClassName
-
diff --git a/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/spi/MiscUtilities.java b/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/spi/MiscUtilities.java
index c01fd0e..2dd4a7e 100644
--- a/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/spi/MiscUtilities.java
+++ b/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/spi/MiscUtilities.java
@@ -86,7 +86,7 @@ import org.openide.util.NbBundle;
  * moved to right places.
  */
 public class MiscUtilities {
-    
+
     public static FileObject findSourceRoot(Project project) {
         SourceGroup[] sourceGroups = ProjectUtils.getSources(project).getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA);
         if (sourceGroups != null && sourceGroups.length > 0) {
@@ -333,7 +333,7 @@ public class MiscUtilities {
     }
 
     /** Add servlet(3.0) element to web.xml, representing JAX-RS Application with CORS filter
-     * 
+     *
      * @param restSupport RestSupport instance
      * @param applicationClassName application class name
      * @param corsFilterName corse filter name
@@ -347,7 +347,7 @@ public class MiscUtilities {
             if (ddFO == null || webApp == null) {
                 return;
             }
-            
+
             boolean changed = false;
             Servlet applicationConfigServlet = getRestServletAdaptorByName(webApp,
                     applicationClassName);
@@ -359,7 +359,7 @@ public class MiscUtilities {
                     webApp.addServlet(applicationConfigServlet);
                     changed = true;
                 } catch (ClassNotFoundException ex) {}
-                
+
             }
             if (applicationConfigServlet != null) {
                 InitParam initParam = (InitParam) applicationConfigServlet.findBeanByName(
@@ -432,11 +432,11 @@ public class MiscUtilities {
 
         return null;
     }
-    
+
     /** Creates body for javax.ws.rs.core.Application subclass getClasses method
-     * 
+     *
      * @param restSupport
-     * @return 
+     * @return
      */
     public static String createBodyForGetClassesMethod(RestSupport restSupport) {
         StringBuilder builder = new StringBuilder();
@@ -455,14 +455,14 @@ public class MiscUtilities {
     }
 
     /** creates addResourceClasses method
-     * 
+     *
      * @param maker tree maker
      * @param classTree class tree
      * @param controller compilation controller
      * @param methodBody method body
      * @param addComment add comment or not
      * @return modified class tree
-     * @throws IOException 
+     * @throws IOException
      */
     public static ClassTree createAddResourceClasses(TreeMaker maker,
             ClassTree classTree, CompilationController controller,
@@ -497,7 +497,7 @@ public class MiscUtilities {
         }
         return maker.addClassMember(classTree, methodTree);
     }
-    
+
     /**
      * Is source level of a given project 1.7 or higher?
      *
@@ -513,9 +513,9 @@ public class MiscUtilities {
             return false;
         }
     }
-    
+
     /** Check if project is of Java EE 6 project type or higher
-     * 
+     *
      * @param project project instance
      * @return true or false
      */
@@ -523,12 +523,14 @@ public class MiscUtilities {
         WebModule webModule = WebModule.getWebModule(project.getProjectDirectory());
         if (webModule != null) {
             Profile profile = webModule.getJ2eeProfile();
-            if (Profile.JAVA_EE_6_WEB == profile || 
+            if (Profile.JAVA_EE_6_WEB == profile ||
                     Profile.JAVA_EE_6_FULL == profile ||
                         Profile.JAVA_EE_7_WEB == profile ||
                                 Profile.JAVA_EE_7_FULL == profile ||
                                     Profile.JAVA_EE_8_WEB == profile ||
-                                            Profile.JAVA_EE_8_FULL == profile )
+                                            Profile.JAVA_EE_8_FULL == profile ||
+                                                Profile.JAKARTA_EE_8_WEB == profile ||
+                                                    Profile.JAKARTA_EE_8_FULL == profile )
             {
                 return true;
             }
diff --git a/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/spi/RestSupport.java b/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/spi/RestSupport.java
index 71a9aa9..a57166c 100644
--- a/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/spi/RestSupport.java
+++ b/enterprise/websvc.restapi/src/org/netbeans/modules/websvc/rest/spi/RestSupport.java
@@ -88,7 +88,7 @@ public abstract class RestSupport {
     public static final String REST_SERVLET_ADAPTOR = "ServletAdaptor";//NOI18N
     public static final String JAX_RS_APPLICATION_CLASS = "javax.ws.rs.core.Application"; //NOI18N
     public static final String REST_SERVLET_ADAPTOR_CLASS = "com.sun.jersey.spi.container.servlet.ServletContainer"; //NOI18N
-    public static final String REST_SERVLET_ADAPTOR_CLASS_OLD = "com.sun.ws.rest.impl.container.servlet.ServletAdaptor";  //NOI18N 
+    public static final String REST_SERVLET_ADAPTOR_CLASS_OLD = "com.sun.ws.rest.impl.container.servlet.ServletAdaptor";  //NOI18N
     public static final String REST_SERVLET_ADAPTOR_CLASS_2_0 = "org.glassfish.jersey.servlet.ServletContainer"; //NOI18N
     public static final String REST_SPRING_SERVLET_ADAPTOR_CLASS = "com.sun.jersey.spi.spring.container.servlet.SpringServlet";    //NOI18N
     public static final String REST_SERVLET_ADAPTOR_MAPPING = "/resources/*";//NOI18N
@@ -130,7 +130,7 @@ public abstract class RestSupport {
     private volatile PropertyChangeListener restModelListener;
 
     private RequestProcessor RP = new RequestProcessor(RestSupport.class);
-    
+
     private AntProjectHelper helper;
     private RestServicesModel restServicesModel;
     private RestApplicationModel restApplicationModel;
@@ -157,7 +157,7 @@ public abstract class RestSupport {
             }
         });
     }
-   
+
     private void initListener() {
         if ( restModelListener == null ){
             restModelListener = new PropertyChangeListener() {
@@ -186,7 +186,7 @@ public abstract class RestSupport {
         if (isRestSupportOn()) {
             return;
         }
-        
+
         setProjectProperty(PROP_REST_CONFIG_TYPE, restConfig == RestConfig.DD ? CONFIG_TYPE_DD : CONFIG_TYPE_IDE);
 
         RP.post(new Runnable() {
@@ -207,16 +207,16 @@ public abstract class RestSupport {
         // JAX-RS APIs. The value should be false only in case of EE5 specification
         // and server without any Jersey on its classpath, eg. Tomcat or some
         // very very old GF (v2? or older)
-        
+
         // extend build script if necessary
         extendBuildScripts();
-        
+
         boolean hasJersey2 = hasJersey2(true);
         boolean hasJaxRsOnClasspath = hasJaxRsOnClasspath(false);
-        
+
         final boolean hasJaxRs = isEESpecWithJaxRS() || hasJaxRsOnClasspath ||
                 hasJersey1(true) || hasJersey2;
-        
+
         if (isEE5() && (hasJersey2 || !hasJaxRs)) {
             webXmlUpdater.addJersey2ResourceConfigToWebApp(restConfig);
         }
@@ -244,8 +244,8 @@ public abstract class RestSupport {
 
         ProjectManager.getDefault().saveProject(getProject());
     }
-    
-    
+
+
     protected void extendJerseyClasspath() {
         JaxRsStackSupport support = getJaxRsStackSupport();
         boolean jerseyAdded = false;
@@ -261,7 +261,7 @@ public abstract class RestSupport {
     protected abstract void extendBuildScripts() throws IOException;
 
     protected abstract void handleSpring() throws IOException;
-    
+
     public abstract String getApplicationPathFromDialog(List<RestApplication> restApplications);
 
     public synchronized RestServicesModel getRestServicesModel() {
@@ -323,10 +323,10 @@ public abstract class RestSupport {
         }
         return classPath;
     }
-    
-    public abstract FileObject generateTestClient(File testdir, String url) 
-        throws IOException; 
-    
+
+    public abstract FileObject generateTestClient(File testdir, String url)
+        throws IOException;
+
     public Project getProject() {
         return project;
     }
@@ -334,7 +334,7 @@ public abstract class RestSupport {
     public void setProjectProperty(String name, String value) {
         MiscPrivateUtilities.setProjectProperty(getProject(), getAntProjectHelper(), name, value, AntProjectHelper.PROJECT_PROPERTIES_PATH);
     }
-    
+
     public void setPrivateProjectProperty(String name, String value) {
         MiscPrivateUtilities.setProjectProperty(getProject(), getAntProjectHelper(), name, value, AntProjectHelper.PRIVATE_PROPERTIES_PATH );
     }
@@ -349,7 +349,7 @@ public abstract class RestSupport {
     public void removeProjectProperties(final String[] propertyNames) {
         if (getAntProjectHelper() == null) {
             return;
-        }   
+        }
         try {
         ProjectManager.mutex().writeAccess(new Mutex.ExceptionAction() {
             @Override
@@ -361,7 +361,7 @@ public abstract class RestSupport {
                     MiscPrivateUtilities.removeProperty(getAntProjectHelper(), propertyNames,
                             AntProjectHelper.PRIVATE_PROPERTIES_PATH );
                     ProjectManager.getDefault().saveProject(getProject());
-                } 
+                }
                 catch(IOException ioe) {
                     Logger.getLogger(this.getClass().getName()).log(Level.INFO, ioe.getLocalizedMessage(), ioe);
                 }
@@ -371,8 +371,8 @@ public abstract class RestSupport {
         }
         catch (MutexException e) {
             Logger.getLogger(this.getClass().getName()).log(Level.INFO, null, e);
-        } 
-        
+        }
+
     }
 
     public AntProjectHelper getAntProjectHelper() {
@@ -394,15 +394,15 @@ public abstract class RestSupport {
     public boolean hasJTASupport() {
         return MiscPrivateUtilities.hasResource(getProject(), "javax/transaction/UserTransaction.class");  // NOI18N
     }
-    
+
     /**
      * Check to see if there is Spring framework support.
-     * 
+     *
      */
     public boolean hasSpringSupport() {
         return MiscPrivateUtilities.hasResource(getProject(), "org/springframework/transaction/annotation/Transactional.class"); // NOI18N
     }
-    
+
     public String getServerType() {
         return getProjectProperty(J2EE_SERVER_TYPE);
     }
@@ -429,7 +429,7 @@ public abstract class RestSupport {
     }
 
     public abstract File getLocalTargetTestRest();
-    
+
     public String getBaseURL() {
         String applicationPath = getApplicationPath();
         if (applicationPath != null) {
@@ -440,9 +440,9 @@ public abstract class RestSupport {
         return MiscUtilities.getContextRootURL(getProject())+"||"+applicationPath;            //NOI18N
     }
 
-    
+
     public abstract void deploy() throws IOException;
-    
+
     public boolean isRestSupportOn() {
         if (getAntProjectHelper() == null) {
             return false;
@@ -497,11 +497,26 @@ public abstract class RestSupport {
                         Profile.JAVA_EE_7_FULL.equals(profile);
         boolean isJee8 = Profile.JAVA_EE_8_WEB.equals(profile) ||
                         Profile.JAVA_EE_8_FULL.equals(profile);
+        boolean isJakartaee8 = Profile.JAKARTA_EE_8_WEB.equals(profile) ||
+                        Profile.JAKARTA_EE_8_FULL.equals(profile);
         // Fix for BZ#216345: JAVA_EE_6_WEB profile doesn't contain JAX-RS API
         return (isJee6 && MiscPrivateUtilities.supportsTargetProfile(project, Profile.JAVA_EE_6_FULL)) || isJee7;
     }
 
     /**
+     * Is this JAKARTAEE8 profile project?
+     */
+    public boolean isJakartaEE8(){
+        WebModule webModule = WebModule.getWebModule(project.getProjectDirectory());
+        if ( webModule == null ){
+            return false;
+        }
+        Profile profile = webModule.getJ2eeProfile();
+        return Profile.JAKARTA_EE_8_WEB.equals(profile) ||
+                        Profile.JAKARTA_EE_8_FULL.equals(profile);
+    }
+
+    /**
      * Is this EE8 profile project?
      */
     public boolean isEE8(){
@@ -526,7 +541,7 @@ public abstract class RestSupport {
         return Profile.JAVA_EE_7_WEB.equals(profile) ||
                         Profile.JAVA_EE_7_FULL.equals(profile);
     }
-    
+
     /**
      * Is this EE6 profile project?
      */
@@ -677,18 +692,17 @@ public abstract class RestSupport {
         USER,
         // web.xml deployment descriptor registration
         DD;
-        
-        // application class-name (useful only for IDE config type) 
+
+        // application class-name (useful only for IDE config type)
         private String appClassName;
-        
+
         public void setAppClassName(String appClassName) {
             this.appClassName = appClassName;
         }
-        
+
         public String getAppClassName() {
             return appClassName;
         }
     }
 
 }
-
diff --git a/nbbuild/cluster.properties b/nbbuild/cluster.properties
index b492ee6..935236b 100644
--- a/nbbuild/cluster.properties
+++ b/nbbuild/cluster.properties
@@ -801,6 +801,7 @@ nb.cluster.enterprise=\
         j2ee.sun.ddui,\
         j2eeapis,\
         j2eeserver,\
+        jakartaee8.api,\
         javaee.api,\
         javaee.beanvalidation,\
         javaee.project,\


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists