Adds one more stage to allow run parallel builds
diff --git a/Jenkinsfile b/Jenkinsfile
index a19b852..b09440d 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -11,120 +11,122 @@
     pollSCM 'H/15 * * * *'
   }
   stages {
-    parallel {
-      stage('JDK 11') {
-        agent {
-          docker {
-            label 'ubuntu'
-            image 'maven:3-jdk-11'
-            args '-v $HOME/.m2:/root/.m2 -e MAVEN_OPTS="-Xmx1024m" -e USER=$USER'
-            reuseNode true
-          }
-        }
-        stages {
-          stage('Build') {
-            steps {
-              sh 'mvn -B clean package -DskipTests -DskipAssembly'
+    stage('Build of various JDKs') {
+      parallel {
+        stage('JDK 11') {
+          agent {
+            docker {
+              label 'ubuntu'
+              image 'maven:3-jdk-11'
+              args '-v $HOME/.m2:/root/.m2 -e MAVEN_OPTS="-Xmx1024m" -e USER=$USER'
+              reuseNode true
             }
           }
-          stage('Test') {
-            steps {
-              sh 'mvn -B test'
-              step([$class: 'JiraIssueUpdater', issueSelector: [$class: 'DefaultIssueSelector'], scm: scm])
+          stages {
+            stage('Build') {
+              steps {
+                sh 'mvn -B clean package -DskipTests -DskipAssembly'
+              }
             }
-            post {
-              always {
-                junit(testResults: '**/surefire-reports/*.xml', allowEmptyResults: true)
-                junit(testResults: '**/failsafe-reports/*.xml', allowEmptyResults: true)
+            stage('Test') {
+              steps {
+                sh 'mvn -B test'
+                step([$class: 'JiraIssueUpdater', issueSelector: [$class: 'DefaultIssueSelector'], scm: scm])
+              }
+              post {
+                always {
+                  junit(testResults: '**/surefire-reports/*.xml', allowEmptyResults: true)
+                  junit(testResults: '**/failsafe-reports/*.xml', allowEmptyResults: true)
+                }
               }
             }
           }
         }
-      }
-      stage('JDK 9') {
-        agent {
-          docker {
-            label 'ubuntu'
-            image 'maven:3-jdk-9'
-            args '-v $HOME/.m2:/root/.m2 -e MAVEN_OPTS="-Xmx1024m" -e USER=$USER'
-            reuseNode true
-          }
-        }
-        stages {
-          stage('Build') {
-            steps {
-              sh 'mvn -B clean package -DskipTests -DskipAssembly'
+        stage('JDK 9') {
+          agent {
+            docker {
+              label 'ubuntu'
+              image 'maven:3-jdk-9'
+              args '-v $HOME/.m2:/root/.m2 -e MAVEN_OPTS="-Xmx1024m" -e USER=$USER'
+              reuseNode true
             }
           }
-          stage('Test') {
-            steps {
-              sh 'mvn -B test'
-              step([$class: 'JiraIssueUpdater', issueSelector: [$class: 'DefaultIssueSelector'], scm: scm])
+          stages {
+            stage('Build') {
+              steps {
+                sh 'mvn -B clean package -DskipTests -DskipAssembly'
+              }
             }
-            post {
-              always {
-                junit(testResults: '**/surefire-reports/*.xml', allowEmptyResults: true)
-                junit(testResults: '**/failsafe-reports/*.xml', allowEmptyResults: true)
+            stage('Test') {
+              steps {
+                sh 'mvn -B test'
+                step([$class: 'JiraIssueUpdater', issueSelector: [$class: 'DefaultIssueSelector'], scm: scm])
+              }
+              post {
+                always {
+                  junit(testResults: '**/surefire-reports/*.xml', allowEmptyResults: true)
+                  junit(testResults: '**/failsafe-reports/*.xml', allowEmptyResults: true)
+                }
               }
             }
           }
         }
-      }
-      stage('JDK 8') {
-        agent {
-          docker {
-            label 'ubuntu'
-            image 'maven:3-jdk-8'
-            args '-v $HOME/.m2:/root/.m2 -e MAVEN_OPTS="-Xmx1024m" -e USER=$USER'
-            reuseNode true
-          }
-        }
-        stages {
-          stage('Build') {
-            steps {
-              sh 'mvn -B clean package -DskipTests -DskipAssembly'
+        stage('JDK 8') {
+          agent {
+            docker {
+              label 'ubuntu'
+              image 'maven:3-jdk-8'
+              args '-v $HOME/.m2:/root/.m2 -e MAVEN_OPTS="-Xmx1024m" -e USER=$USER'
+              reuseNode true
             }
           }
-          stage('Test') {
-            steps {
-              sh 'mvn -B test'
-              step([$class: 'JiraIssueUpdater', issueSelector: [$class: 'DefaultIssueSelector'], scm: scm])
-            }
-            post {
-              always {
-                junit(testResults: '**/surefire-reports/*.xml', allowEmptyResults: true)
-                junit(testResults: '**/failsafe-reports/*.xml', allowEmptyResults: true)
+          stages {
+            stage('Build') {
+              steps {
+                sh 'mvn -B clean package -DskipTests -DskipAssembly'
               }
             }
-          }
-          stage('Build Source & JavaDoc') {
-            when {
-              branch 'master'
-            }
-            steps {
-              dir("local-snapshots-dir/") {
-                deleteDir()
+            stage('Test') {
+              steps {
+                sh 'mvn -B test'
+                step([$class: 'JiraIssueUpdater', issueSelector: [$class: 'DefaultIssueSelector'], scm: scm])
               }
-              sh 'mvn -B source:jar javadoc:jar -DskipAssembbly'
-            }
-          }
-          stage('Deploy Snapshot') {
-            when {
-              branch 'master'
-            }
-            steps {
-              withCredentials([file(credentialsId: 'struts-custom-settings_xml', variable: 'CUSTOM_SETTINGS')]) {
-                sh 'mvn -s \${CUSTOM_SETTINGS} deploy -skipAssembly'
+              post {
+                always {
+                  junit(testResults: '**/surefire-reports/*.xml', allowEmptyResults: true)
+                  junit(testResults: '**/failsafe-reports/*.xml', allowEmptyResults: true)
+                }
               }
             }
-          }
-          stage('Code Quality') {
-            when {
-              branch 'master'
+            stage('Build Source & JavaDoc') {
+              when {
+                branch 'master'
+              }
+              steps {
+                dir("local-snapshots-dir/") {
+                  deleteDir()
+                }
+                sh 'mvn -B source:jar javadoc:jar -DskipAssembbly'
+              }
             }
-            steps {
-              withCredentials([string(credentialsId: 'asf-struts-sonarcloud', variable: 'SONARCLOUD_TOKEN')]) {
-                sh 'mvn sonar:sonar -DskipAssembly -Dsonar.projectKey=apache_struts -Dsonar.organization=apache -Dsonar.host.url=https://sonarcloud.io -Dsonar.login=${SONARCLOUD_TOKEN}'
+            stage('Deploy Snapshot') {
+              when {
+                branch 'master'
+              }
+              steps {
+                withCredentials([file(credentialsId: 'struts-custom-settings_xml', variable: 'CUSTOM_SETTINGS')]) {
+                  sh 'mvn -s \${CUSTOM_SETTINGS} deploy -skipAssembly'
+                }
+              }
+            }
+            stage('Code Quality') {
+              when {
+                branch 'master'
+              }
+              steps {
+                withCredentials([string(credentialsId: 'asf-struts-sonarcloud', variable: 'SONARCLOUD_TOKEN')]) {
+                  sh 'mvn sonar:sonar -DskipAssembly -Dsonar.projectKey=apache_struts -Dsonar.organization=apache -Dsonar.host.url=https://sonarcloud.io -Dsonar.login=${SONARCLOUD_TOKEN}'
+                }
               }
             }
           }