Avoids parallel builds to avoid problems with clean
diff --git a/Jenkinsfile b/Jenkinsfile
index 688aa95..1186e4e 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -15,121 +15,119 @@
   }
   stages {
     stage('Build on various JDKs') {
-      parallel {
-        stage('JDK 11') {
-          agent {
-            docker {
-              label 'ubuntu'
-              image 'maven:3-jdk-11'
-              args "$dockerArgs"
-              reuseNode true
+      stage('JDK 11') {
+        agent {
+          docker {
+            label 'ubuntu'
+            image 'maven:3-jdk-11'
+            args "$dockerArgs"
+            reuseNode true
+          }
+        }
+        stages {
+          stage('Build') {
+            steps {
+              sh 'mvn -B clean package -DskipTests -DskipAssembly'
             }
           }
-          stages {
-            stage('Build') {
-              steps {
-                sh 'mvn -B clean package -DskipTests -DskipAssembly'
-              }
+          stage('Test') {
+            steps {
+              sh 'mvn -B test'
+              step([$class: 'JiraIssueUpdater', issueSelector: [$class: 'DefaultIssueSelector'], scm: scm])
             }
-            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)
-                }
+            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 "$dockerArgs"
-              reuseNode true
+      }
+      stage('JDK 9') {
+        agent {
+          docker {
+            label 'ubuntu'
+            image 'maven:3-jdk-9'
+            args "$dockerArgs"
+            reuseNode true
+          }
+        }
+        stages {
+          stage('Build') {
+            steps {
+              sh 'mvn -B clean package -DskipTests -DskipAssembly'
             }
           }
-          stages {
-            stage('Build') {
-              steps {
-                sh 'mvn -B clean package -DskipTests -DskipAssembly'
-              }
+          stage('Test') {
+            steps {
+              sh 'mvn -B test'
+              step([$class: 'JiraIssueUpdater', issueSelector: [$class: 'DefaultIssueSelector'], scm: scm])
             }
-            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)
-                }
+            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 "$dockerArgs"
-              reuseNode true
+      }
+      stage('JDK 8') {
+        agent {
+          docker {
+            label 'ubuntu'
+            image 'maven:3-jdk-8'
+            args "$dockerArgs"
+            reuseNode true
+          }
+        }
+        stages {
+          stage('Build') {
+            steps {
+              sh 'mvn -B clean package -DskipTests -DskipAssembly'
             }
           }
-          stages {
-            stage('Build') {
-              steps {
-                sh 'mvn -B clean package -DskipTests -DskipAssembly'
+          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('Test') {
-              steps {
-                sh 'mvn -B test'
-                step([$class: 'JiraIssueUpdater', issueSelector: [$class: 'DefaultIssueSelector'], scm: scm])
+          }
+          stage('Build Source & JavaDoc') {
+            when {
+              branch 'master'
+            }
+            steps {
+              dir("local-snapshots-dir/") {
+                deleteDir()
               }
-              post {
-                always {
-                  junit(testResults: '**/surefire-reports/*.xml', allowEmptyResults: true)
-                  junit(testResults: '**/failsafe-reports/*.xml', allowEmptyResults: true)
-                }
+              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'
               }
             }
-            stage('Build Source & JavaDoc') {
-              when {
-                branch 'master'
-              }
-              steps {
-                dir("local-snapshots-dir/") {
-                  deleteDir()
-                }
-                sh 'mvn -B source:jar javadoc:jar -DskipAssembbly'
-              }
+          }
+          stage('Code Quality') {
+            when {
+              branch 'master'
             }
-            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}'
-                }
+            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}'
               }
             }
           }