You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sl...@apache.org on 2020/12/19 16:28:05 UTC

[maven-invoker-plugin] branch MINVOKER-258 created (now 1e5f880)

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

slachiewicz pushed a change to branch MINVOKER-258
in repository https://gitbox.apache.org/repos/asf/maven-invoker-plugin.git.


      at 1e5f880  [MINVOKER-258] Unified line encoding

This branch includes the following new commits:

     new 1e5f880  [MINVOKER-258] Unified line encoding

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[maven-invoker-plugin] 01/01: [MINVOKER-258] Unified line encoding

Posted by sl...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

slachiewicz pushed a commit to branch MINVOKER-258
in repository https://gitbox.apache.org/repos/asf/maven-invoker-plugin.git

commit 1e5f8802602470bd95fa453fb8268c41e0b682db
Author: Sylwester Lachiewicz <sl...@apache.org>
AuthorDate: Sat Dec 19 17:22:30 2020 +0100

    [MINVOKER-258] Unified line encoding
---
 .../org/apache/maven/it/plugins/dummy/MyMojo.java  |  156 +-
 src/it/MINVOKER-191/pom.xml                        |  158 +-
 .../src/it/project/verify.groovy                   |   84 +-
 .../src/it/project_2/verify.groovy                 |   40 +-
 .../MINVOKER-196_junit_report_file/verify.groovy   |  104 +-
 .../org/apache/maven/it/plugins/dummy/MyMojo.java  |  178 +-
 .../org/apache/maven/it/plugins/dummy/MyMojo.java  |  178 +-
 src/it/fail-noprojects_integration-test/pom.xml    |  122 +-
 src/it/fail-noprojects_run/pom.xml                 |  122 +-
 src/it/fail-noprojects_verify/pom.xml              |  124 +-
 src/it/invocation-cmdline-exclude/pom.xml          |  122 +-
 .../src/it/minvoker-140/pom.xml                    |  108 +-
 src/it/invocation-debug/pom.xml                    |  136 +-
 .../invocation-debug/src/it/minvoker-142/pom.xml   |  116 +-
 .../src/it/minvoker-142/verify.groovy              |   38 +-
 src/it/invocation-emptyproperty/pom.xml            |  136 +-
 .../src/it/minvoker-118/pom.xml                    |  116 +-
 src/it/invocation-environmentvariable/pom.xml      |  134 +-
 .../src/it/minvoker-145/pom.xml                    |  116 +-
 .../org/apache/maven/it/plugins/dummy/MyMojo.java  |  156 +-
 src/it/invocation-reactor-indirect/pom.xml         |  154 +-
 src/it/invoker-report/src/it/skip-jre/pom.xml      |   64 +-
 src/it/invoker-report/src/it/skip-maven/pom.xml    |   64 +-
 src/it/invoker-report/src/it/skip-os/pom.xml       |   64 +-
 .../local-repo-url/src/it/project/postbuild.groovy |   84 +-
 src/it/local-repo-url/verify.groovy                |   38 +-
 src/it/script-verify-xml/pom.xml                   |  122 +-
 .../script-verify-xml/src/it/minvoker-138/pom.xml  |   64 +-
 src/it/settings-merge_jdk9+/pom.xml                |  130 +-
 src/it/settings-merge_jdk9+/src/it/project/pom.xml |  168 +-
 .../src/it/project/postbuild.groovy                |   54 +-
 src/it/settings-merge_jdk9+/src/it/settings.xml    |   84 +-
 src/it/settings-override/pom.xml                   |  126 +-
 .../src/it/project/invoker.properties              |   34 +-
 src/it/settings-override/src/it/project/pom.xml    |  116 +-
 .../src/it/project/postbuild.groovy                |   42 +-
 .../settings-override/src/it/settings-override.xml |   68 +-
 src/it/settings-override/src/it/settings.xml       |   68 +-
 src/it/spaces-should-work_non-windows/pom.xml      |  136 +-
 .../src/it/minvoker-test/pom.xml                   |  108 +-
 .../src/it/minvoker-test/verify.groovy             |   52 +-
 src/it/spaces-should-work_windows/pom.xml          |  128 +-
 .../src/it/minvoker-test/pom.xml                   |  108 +-
 .../src/it/minvoker-test/verify.groovy             |   52 +-
 src/it/special-characters-should-work/pom.xml      |  136 +-
 .../src/it/minvoker-test/pom.xml                   |  108 +-
 .../src/it/minvoker-test/verify.groovy             |   38 +-
 .../repo/org/apache/maven/its/dep/1.0/dep-1.0.pom  |   16 +-
 .../repo/org/apache/maven/its/dep/2.0/dep-2.0.pom  |   16 +-
 .../minvoker-70-1.0-20081020.164906-1.pom          |   24 +-
 .../parent-a-0.1-20081020.164906-1.pom             |   16 +-
 .../parent-b-0.1-20081020.164906-1.pom             |   24 +-
 .../pom/0.3-SNAPSHOT/pom-0.3-20081020.164906-1.pom |   16 +-
 src/it/wrongPropertyInterpolation/pom.xml          |  126 +-
 .../src/it/project/invoker.properties              |   38 +-
 .../src/it/project/pom.xml                         |  108 +-
 .../maven/plugins/invoker/AbstractInvokerMojo.java | 5838 ++++++++++----------
 .../apache/maven/plugins/invoker/CompositeMap.java |  516 +-
 .../apache/maven/plugins/invoker/FileLogger.java   |  138 +-
 .../apache/maven/plugins/invoker/InstallMojo.java  | 1322 ++---
 .../maven/plugins/invoker/IntegrationTestMojo.java |   94 +-
 .../apache/maven/plugins/invoker/InvokerMojo.java  |  188 +-
 .../maven/plugins/invoker/InvokerProperties.java   |  968 ++--
 .../maven/plugins/invoker/InvokerReport.java       |  718 +--
 .../maven/plugins/invoker/InvokerSession.java      |  684 +--
 .../maven/plugins/invoker/MetadataUtils.java       |  336 +-
 .../org/apache/maven/plugins/invoker/PomUtils.java |  128 +-
 .../apache/maven/plugins/invoker/ReportUtils.java  |  126 +-
 .../org/apache/maven/plugins/invoker/Selector.java |  262 +-
 .../maven/plugins/invoker/SelectorUtils.java       |  654 +--
 .../plugins/invoker/SystemPropertyPrinter.java     |   84 +-
 .../apache/maven/plugins/invoker/VerifyMojo.java   |  312 +-
 .../plugins/invoker/ExtendedMavenProjectStub.java  |  114 +-
 .../maven/plugins/invoker/InterpolationTest.java   |  252 +-
 .../maven/plugins/invoker/InvokerMojoTest.java     |  240 +-
 .../plugins/invoker/InvokerPropertiesTest.java     |  882 +--
 .../apache/maven/plugins/invoker/SelectorTest.java |  162 +-
 .../maven/plugins/invoker/SelectorUtilsTest.java   |  290 +-
 78 files changed, 9773 insertions(+), 9773 deletions(-)

diff --git a/src/it/MINVOKER-191/plugin/src/main/java/org/apache/maven/it/plugins/dummy/MyMojo.java b/src/it/MINVOKER-191/plugin/src/main/java/org/apache/maven/it/plugins/dummy/MyMojo.java
index c225e4b..a1b8fa1 100644
--- a/src/it/MINVOKER-191/plugin/src/main/java/org/apache/maven/it/plugins/dummy/MyMojo.java
+++ b/src/it/MINVOKER-191/plugin/src/main/java/org/apache/maven/it/plugins/dummy/MyMojo.java
@@ -1,78 +1,78 @@
-package org.apache.maven.it.plugins.dummy;
-
-/*
- * Copyright 2001-2005 The Apache Software Foundation.
- *
- * Licensed 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.
- */
-
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-
-/**
- * @goal touch
- * @phase process-sources
- */
-public class MyMojo
-    extends AbstractMojo
-{
-    /**
-     * Location of the file.
-     * @parameter expression="${project.build.directory}"
-     * @required
-     */
-    private File outputDirectory;
-
-    public void execute()
-        throws MojoExecutionException
-    {
-        File f = outputDirectory;
-
-        if ( !f.exists() )
-        {
-            f.mkdirs();
-        }
-
-        File touch = new File( f, "touch.txt" );
-
-        FileWriter w = null;
-        try
-        {
-            w = new FileWriter( touch );
-
-            w.write( "touch.txt" );
-        }
-        catch ( IOException e )
-        {
-            throw new MojoExecutionException( "Error creating file " + touch, e );
-        }
-        finally
-        {
-            if ( w != null )
-            {
-                try
-                {
-                    w.close();
-                }
-                catch ( IOException e )
-                {
-                    // ignore
-                }
-            }
-        }
-    }
-}
+package org.apache.maven.it.plugins.dummy;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+
+/**
+ * @goal touch
+ * @phase process-sources
+ */
+public class MyMojo
+    extends AbstractMojo
+{
+    /**
+     * Location of the file.
+     * @parameter expression="${project.build.directory}"
+     * @required
+     */
+    private File outputDirectory;
+
+    public void execute()
+        throws MojoExecutionException
+    {
+        File f = outputDirectory;
+
+        if ( !f.exists() )
+        {
+            f.mkdirs();
+        }
+
+        File touch = new File( f, "touch.txt" );
+
+        FileWriter w = null;
+        try
+        {
+            w = new FileWriter( touch );
+
+            w.write( "touch.txt" );
+        }
+        catch ( IOException e )
+        {
+            throw new MojoExecutionException( "Error creating file " + touch, e );
+        }
+        finally
+        {
+            if ( w != null )
+            {
+                try
+                {
+                    w.close();
+                }
+                catch ( IOException e )
+                {
+                    // ignore
+                }
+            }
+        }
+    }
+}
diff --git a/src/it/MINVOKER-191/pom.xml b/src/it/MINVOKER-191/pom.xml
index e556e96..c16c506 100644
--- a/src/it/MINVOKER-191/pom.xml
+++ b/src/it/MINVOKER-191/pom.xml
@@ -1,79 +1,79 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>org.apache.maven.plugins.invoker</groupId>
-  <artifactId>MINVOKER-191-parent</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <description>
-    Test of reported issue MINVOKER-191: install plugins try to install all reactors projects
-    even non dependendant projects which cause build using multi thread builds
-  </description>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <modules>
-    <module>module-a</module>
-    <module>plugin</module>
-    <module>module-b</module>
-  </modules>
-
-  <build>
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-compiler-plugin</artifactId>
-          <version>2.5.1</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-plugin-plugin</artifactId>
-          <version>2.9</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-resources-plugin</artifactId>
-          <version>2.6</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-invoker-plugin</artifactId>
-          <version>@project.version@</version>
-          <configuration>
-            <writeJunitReport>true</writeJunitReport>
-            <properties>
-              <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
-              <https.protocols>${https.protocols}</https.protocols>
-            </properties>
-          </configuration>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-  </build>
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.plugins.invoker</groupId>
+  <artifactId>MINVOKER-191-parent</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <description>
+    Test of reported issue MINVOKER-191: install plugins try to install all reactors projects
+    even non dependendant projects which cause build using multi thread builds
+  </description>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <modules>
+    <module>module-a</module>
+    <module>plugin</module>
+    <module>module-b</module>
+  </modules>
+
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>2.5.1</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-plugin-plugin</artifactId>
+          <version>2.9</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-resources-plugin</artifactId>
+          <version>2.6</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-invoker-plugin</artifactId>
+          <version>@project.version@</version>
+          <configuration>
+            <writeJunitReport>true</writeJunitReport>
+            <properties>
+              <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
+              <https.protocols>${https.protocols}</https.protocols>
+            </properties>
+          </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>
diff --git a/src/it/MINVOKER-196_junit_report_file/src/it/project/verify.groovy b/src/it/MINVOKER-196_junit_report_file/src/it/project/verify.groovy
index 6b8ec74..a42a51a 100644
--- a/src/it/MINVOKER-196_junit_report_file/src/it/project/verify.groovy
+++ b/src/it/MINVOKER-196_junit_report_file/src/it/project/verify.groovy
@@ -1,42 +1,42 @@
-/*
- * 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.
- */
-
-// ensure script context contains localRepositoryPath
-assert new File( basedir, "../../../target/it-repo" ).canonicalFile.equals( localRepositoryPath )
-
-File interpolatedSettings = new File( basedir, "../interpolated-settings.xml" )
-assert interpolatedSettings.isFile()
-
-def filename = new File( basedir, "../../../../../local-repo" ).canonicalPath
-// Convert URL, see org.apache.maven.plugins.invoker.AbstractInvokerMojo.toUrl(String)
-String url = "file://" + new File(  filename  ).toURI().path
-if ( url.endsWith( "/" ) )
-{
-    url = url.substring( 0, url.length() - 1 )
-}
-
-def settings = new XmlSlurper().parse( interpolatedSettings )
-
-// ensure right settings and mirror are picked up
-def sandboxMirror = settings.mirrors.mirror[0]
-assert sandboxMirror.id.text() == "sandbox"
-assert sandboxMirror.url.text() != "@localRepositoryUrl@"
-
-// sandboxMirror.url is NOT filled with localRepositoryPath, but with the localRepository of the parent Settings
-assert sandboxMirror.url.text() == url
+/*
+ * 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.
+ */
+
+// ensure script context contains localRepositoryPath
+assert new File( basedir, "../../../target/it-repo" ).canonicalFile.equals( localRepositoryPath )
+
+File interpolatedSettings = new File( basedir, "../interpolated-settings.xml" )
+assert interpolatedSettings.isFile()
+
+def filename = new File( basedir, "../../../../../local-repo" ).canonicalPath
+// Convert URL, see org.apache.maven.plugins.invoker.AbstractInvokerMojo.toUrl(String)
+String url = "file://" + new File(  filename  ).toURI().path
+if ( url.endsWith( "/" ) )
+{
+    url = url.substring( 0, url.length() - 1 )
+}
+
+def settings = new XmlSlurper().parse( interpolatedSettings )
+
+// ensure right settings and mirror are picked up
+def sandboxMirror = settings.mirrors.mirror[0]
+assert sandboxMirror.id.text() == "sandbox"
+assert sandboxMirror.url.text() != "@localRepositoryUrl@"
+
+// sandboxMirror.url is NOT filled with localRepositoryPath, but with the localRepository of the parent Settings
+assert sandboxMirror.url.text() == url
diff --git a/src/it/MINVOKER-196_junit_report_file/src/it/project_2/verify.groovy b/src/it/MINVOKER-196_junit_report_file/src/it/project_2/verify.groovy
index af6082a..ddf46fe 100644
--- a/src/it/MINVOKER-196_junit_report_file/src/it/project_2/verify.groovy
+++ b/src/it/MINVOKER-196_junit_report_file/src/it/project_2/verify.groovy
@@ -1,20 +1,20 @@
-/*
- * 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.
- */
-
-assert new File( basedir, "../../../target/it-repo_not_here" ).canonicalFile.equals( localRepositoryPath )
+/*
+ * 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.
+ */
+
+assert new File( basedir, "../../../target/it-repo_not_here" ).canonicalFile.equals( localRepositoryPath )
diff --git a/src/it/MINVOKER-196_junit_report_file/verify.groovy b/src/it/MINVOKER-196_junit_report_file/verify.groovy
index 331b884..df3402f 100644
--- a/src/it/MINVOKER-196_junit_report_file/verify.groovy
+++ b/src/it/MINVOKER-196_junit_report_file/verify.groovy
@@ -1,52 +1,52 @@
-/*
- * 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.
- */
-File buildLog = new File( basedir, 'build.log' )
-assert buildLog.text.contains( '[INFO] run post-build script verify.groovy' )
-
-File invokerReports = new File( new File(basedir, "target"), 'invoker-reports' )
-assert invokerReports.exists()
-
-// test on first project
-def testsuite = new XmlSlurper().parse( new File( invokerReports, "TEST-project.xml" ) )
-
-assert testsuite.@name.text() != null
-assert testsuite.@time.text() != null
-assert testsuite.@tests.text() == "1"
-assert testsuite.@errors.text() == "0"
-assert testsuite.@skipped.text() == "0"
-assert testsuite.@failures.text() == "0"
-
-assert testsuite.testcase.@name.text() == "project"
-def systemOut = testsuite.testcase.'**'.findAll { node -> node.name() == 'system-out' }.get(0)
-assert !systemOut.text().isEmpty()
-
-
-// test on second project
-testsuite = new XmlSlurper().parse( new File( invokerReports, "TEST-project_2.xml" ) )
-
-assert testsuite.@name.text() != null
-assert testsuite.@time.text() != null
-assert testsuite.@tests.text() == "1"
-assert testsuite.@errors.text() == "0"
-assert testsuite.@skipped.text() == "0"
-assert testsuite.@failures.text() == "1"
-
-assert testsuite.testcase.@name.text() == "project_2"
-def failureMessage = testsuite.testcase.failure.@message
-assert !failureMessage.text().isEmpty()
+/*
+ * 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.
+ */
+File buildLog = new File( basedir, 'build.log' )
+assert buildLog.text.contains( '[INFO] run post-build script verify.groovy' )
+
+File invokerReports = new File( new File(basedir, "target"), 'invoker-reports' )
+assert invokerReports.exists()
+
+// test on first project
+def testsuite = new XmlSlurper().parse( new File( invokerReports, "TEST-project.xml" ) )
+
+assert testsuite.@name.text() != null
+assert testsuite.@time.text() != null
+assert testsuite.@tests.text() == "1"
+assert testsuite.@errors.text() == "0"
+assert testsuite.@skipped.text() == "0"
+assert testsuite.@failures.text() == "0"
+
+assert testsuite.testcase.@name.text() == "project"
+def systemOut = testsuite.testcase.'**'.findAll { node -> node.name() == 'system-out' }.get(0)
+assert !systemOut.text().isEmpty()
+
+
+// test on second project
+testsuite = new XmlSlurper().parse( new File( invokerReports, "TEST-project_2.xml" ) )
+
+assert testsuite.@name.text() != null
+assert testsuite.@time.text() != null
+assert testsuite.@tests.text() == "1"
+assert testsuite.@errors.text() == "0"
+assert testsuite.@skipped.text() == "0"
+assert testsuite.@failures.text() == "1"
+
+assert testsuite.testcase.@name.text() == "project_2"
+def failureMessage = testsuite.testcase.failure.@message
+assert !failureMessage.text().isEmpty()
diff --git a/src/it/exec-timeout-invoker-level/src/main/java/org/apache/maven/it/plugins/dummy/MyMojo.java b/src/it/exec-timeout-invoker-level/src/main/java/org/apache/maven/it/plugins/dummy/MyMojo.java
index 94971f0..130cdec 100644
--- a/src/it/exec-timeout-invoker-level/src/main/java/org/apache/maven/it/plugins/dummy/MyMojo.java
+++ b/src/it/exec-timeout-invoker-level/src/main/java/org/apache/maven/it/plugins/dummy/MyMojo.java
@@ -1,89 +1,89 @@
-package org.apache.maven.it.plugins.dummy;
-
-/*
- * Copyright 2001-2005 The Apache Software Foundation.
- *
- * Licensed 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.
- */
-
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-
-/**
- * @goal touch
- * @phase process-sources
- */
-public class MyMojo
-    extends AbstractMojo
-{
-    /**
-     * Location of the file.
-     * @parameter expression="${project.build.directory}"
-     * @required
-     */
-    private File outputDirectory;
-
-    public void execute()
-        throws MojoExecutionException
-    {
-
-        try
-        {
-            Thread.sleep(5000);
-        }
-        catch ( java.lang.Exception exception )
-        {
-            exception.printStackTrace();
-            throw new MojoExecutionException(exception.getMessage(), exception);
-        }
-
-        File f = outputDirectory;
-
-        if ( !f.exists() )
-        {
-            f.mkdirs();
-        }
-
-        File touch = new File( f, "touch.txt" );
-
-        FileWriter w = null;
-        try
-        {
-            w = new FileWriter( touch );
-
-            w.write( "touch.txt" );
-        }
-        catch ( IOException e )
-        {
-            throw new MojoExecutionException( "Error creating file " + touch, e );
-        }
-        finally
-        {
-            if ( w != null )
-            {
-                try
-                {
-                    w.close();
-                }
-                catch ( IOException e )
-                {
-                    // ignore
-                }
-            }
-        }
-    }
-}
+package org.apache.maven.it.plugins.dummy;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+
+/**
+ * @goal touch
+ * @phase process-sources
+ */
+public class MyMojo
+    extends AbstractMojo
+{
+    /**
+     * Location of the file.
+     * @parameter expression="${project.build.directory}"
+     * @required
+     */
+    private File outputDirectory;
+
+    public void execute()
+        throws MojoExecutionException
+    {
+
+        try
+        {
+            Thread.sleep(5000);
+        }
+        catch ( java.lang.Exception exception )
+        {
+            exception.printStackTrace();
+            throw new MojoExecutionException(exception.getMessage(), exception);
+        }
+
+        File f = outputDirectory;
+
+        if ( !f.exists() )
+        {
+            f.mkdirs();
+        }
+
+        File touch = new File( f, "touch.txt" );
+
+        FileWriter w = null;
+        try
+        {
+            w = new FileWriter( touch );
+
+            w.write( "touch.txt" );
+        }
+        catch ( IOException e )
+        {
+            throw new MojoExecutionException( "Error creating file " + touch, e );
+        }
+        finally
+        {
+            if ( w != null )
+            {
+                try
+                {
+                    w.close();
+                }
+                catch ( IOException e )
+                {
+                    // ignore
+                }
+            }
+        }
+    }
+}
diff --git a/src/it/exec-timeout-mojo-level/src/main/java/org/apache/maven/it/plugins/dummy/MyMojo.java b/src/it/exec-timeout-mojo-level/src/main/java/org/apache/maven/it/plugins/dummy/MyMojo.java
index 94971f0..130cdec 100644
--- a/src/it/exec-timeout-mojo-level/src/main/java/org/apache/maven/it/plugins/dummy/MyMojo.java
+++ b/src/it/exec-timeout-mojo-level/src/main/java/org/apache/maven/it/plugins/dummy/MyMojo.java
@@ -1,89 +1,89 @@
-package org.apache.maven.it.plugins.dummy;
-
-/*
- * Copyright 2001-2005 The Apache Software Foundation.
- *
- * Licensed 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.
- */
-
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-
-/**
- * @goal touch
- * @phase process-sources
- */
-public class MyMojo
-    extends AbstractMojo
-{
-    /**
-     * Location of the file.
-     * @parameter expression="${project.build.directory}"
-     * @required
-     */
-    private File outputDirectory;
-
-    public void execute()
-        throws MojoExecutionException
-    {
-
-        try
-        {
-            Thread.sleep(5000);
-        }
-        catch ( java.lang.Exception exception )
-        {
-            exception.printStackTrace();
-            throw new MojoExecutionException(exception.getMessage(), exception);
-        }
-
-        File f = outputDirectory;
-
-        if ( !f.exists() )
-        {
-            f.mkdirs();
-        }
-
-        File touch = new File( f, "touch.txt" );
-
-        FileWriter w = null;
-        try
-        {
-            w = new FileWriter( touch );
-
-            w.write( "touch.txt" );
-        }
-        catch ( IOException e )
-        {
-            throw new MojoExecutionException( "Error creating file " + touch, e );
-        }
-        finally
-        {
-            if ( w != null )
-            {
-                try
-                {
-                    w.close();
-                }
-                catch ( IOException e )
-                {
-                    // ignore
-                }
-            }
-        }
-    }
-}
+package org.apache.maven.it.plugins.dummy;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+
+/**
+ * @goal touch
+ * @phase process-sources
+ */
+public class MyMojo
+    extends AbstractMojo
+{
+    /**
+     * Location of the file.
+     * @parameter expression="${project.build.directory}"
+     * @required
+     */
+    private File outputDirectory;
+
+    public void execute()
+        throws MojoExecutionException
+    {
+
+        try
+        {
+            Thread.sleep(5000);
+        }
+        catch ( java.lang.Exception exception )
+        {
+            exception.printStackTrace();
+            throw new MojoExecutionException(exception.getMessage(), exception);
+        }
+
+        File f = outputDirectory;
+
+        if ( !f.exists() )
+        {
+            f.mkdirs();
+        }
+
+        File touch = new File( f, "touch.txt" );
+
+        FileWriter w = null;
+        try
+        {
+            w = new FileWriter( touch );
+
+            w.write( "touch.txt" );
+        }
+        catch ( IOException e )
+        {
+            throw new MojoExecutionException( "Error creating file " + touch, e );
+        }
+        finally
+        {
+            if ( w != null )
+            {
+                try
+                {
+                    w.close();
+                }
+                catch ( IOException e )
+                {
+                    // ignore
+                }
+            }
+        }
+    }
+}
diff --git a/src/it/fail-noprojects_integration-test/pom.xml b/src/it/fail-noprojects_integration-test/pom.xml
index 5e4d9d9..494f086 100644
--- a/src/it/fail-noprojects_integration-test/pom.xml
+++ b/src/it/fail-noprojects_integration-test/pom.xml
@@ -1,61 +1,61 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>org.apache.maven.plugins.invoker</groupId>
-  <artifactId>fail-noprojects_integration-test</artifactId>
-  <version>1.0-SNAPSHOT</version>
-
-  <description>Test to check that the build succeeds during integration-test even if there are no projects</description>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-invoker-plugin</artifactId>
-        <version>@pom.version@</version>
-        <configuration>
-          <failIfNoProjects>true</failIfNoProjects>
-          <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
-          <goals>
-            <goal>validate</goal>
-          </goals>
-        </configuration>
-        <executions>
-          <execution>
-            <id>integration-test</id>
-            <phase>initialize</phase>
-            <goals>
-              <goal>integration-test</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.plugins.invoker</groupId>
+  <artifactId>fail-noprojects_integration-test</artifactId>
+  <version>1.0-SNAPSHOT</version>
+
+  <description>Test to check that the build succeeds during integration-test even if there are no projects</description>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-invoker-plugin</artifactId>
+        <version>@pom.version@</version>
+        <configuration>
+          <failIfNoProjects>true</failIfNoProjects>
+          <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
+          <goals>
+            <goal>validate</goal>
+          </goals>
+        </configuration>
+        <executions>
+          <execution>
+            <id>integration-test</id>
+            <phase>initialize</phase>
+            <goals>
+              <goal>integration-test</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
diff --git a/src/it/fail-noprojects_run/pom.xml b/src/it/fail-noprojects_run/pom.xml
index d4afd79..4af1ff5 100644
--- a/src/it/fail-noprojects_run/pom.xml
+++ b/src/it/fail-noprojects_run/pom.xml
@@ -1,61 +1,61 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>org.apache.maven.plugins.invoker</groupId>
-  <artifactId>fail-noprojects_run</artifactId>
-  <version>1.0-SNAPSHOT</version>
-
-  <description>Test to check that the build fails if there are no projects</description>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-invoker-plugin</artifactId>
-        <version>@pom.version@</version>
-        <configuration>
-          <failIfNoProjects>true</failIfNoProjects>
-          <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
-          <goals>
-            <goal>validate</goal>
-          </goals>
-        </configuration>
-        <executions>
-          <execution>
-            <id>integration-test</id>
-            <phase>initialize</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.plugins.invoker</groupId>
+  <artifactId>fail-noprojects_run</artifactId>
+  <version>1.0-SNAPSHOT</version>
+
+  <description>Test to check that the build fails if there are no projects</description>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-invoker-plugin</artifactId>
+        <version>@pom.version@</version>
+        <configuration>
+          <failIfNoProjects>true</failIfNoProjects>
+          <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
+          <goals>
+            <goal>validate</goal>
+          </goals>
+        </configuration>
+        <executions>
+          <execution>
+            <id>integration-test</id>
+            <phase>initialize</phase>
+            <goals>
+              <goal>run</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
diff --git a/src/it/fail-noprojects_verify/pom.xml b/src/it/fail-noprojects_verify/pom.xml
index b538f28..312f4df 100644
--- a/src/it/fail-noprojects_verify/pom.xml
+++ b/src/it/fail-noprojects_verify/pom.xml
@@ -1,62 +1,62 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>org.apache.maven.plugins.invoker</groupId>
-  <artifactId>fail-noprojects_verify</artifactId>
-  <version>1.0-SNAPSHOT</version>
-
-  <description>Test to check that the build fails if there are no projects</description>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-invoker-plugin</artifactId>
-        <version>@pom.version@</version>
-        <configuration>
-          <failIfNoProjects>true</failIfNoProjects>
-          <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
-          <goals>
-            <goal>validate</goal>
-          </goals>
-        </configuration>
-        <executions>
-          <execution>
-            <id>integration-test</id>
-            <phase>initialize</phase>
-            <goals>
-              <goal>integration-test</goal>
-              <goal>verify</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.plugins.invoker</groupId>
+  <artifactId>fail-noprojects_verify</artifactId>
+  <version>1.0-SNAPSHOT</version>
+
+  <description>Test to check that the build fails if there are no projects</description>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-invoker-plugin</artifactId>
+        <version>@pom.version@</version>
+        <configuration>
+          <failIfNoProjects>true</failIfNoProjects>
+          <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
+          <goals>
+            <goal>validate</goal>
+          </goals>
+        </configuration>
+        <executions>
+          <execution>
+            <id>integration-test</id>
+            <phase>initialize</phase>
+            <goals>
+              <goal>integration-test</goal>
+              <goal>verify</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
diff --git a/src/it/invocation-cmdline-exclude/pom.xml b/src/it/invocation-cmdline-exclude/pom.xml
index 3a37ad2..f918b33 100644
--- a/src/it/invocation-cmdline-exclude/pom.xml
+++ b/src/it/invocation-cmdline-exclude/pom.xml
@@ -1,61 +1,61 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>org.apache.maven.plugins.invoker.its</groupId>
-  <artifactId>invocation-cmdline-exclude</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <description>Test if the exclude can be used from commandline</description>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-invoker-plugin</artifactId>
-        <version>@project.version@</version>
-        <configuration>
-          <debug>true</debug>
-          <goals>
-            <goal>validate</goal>
-          </goals>
-        </configuration>
-        <executions>
-          <execution>
-            <id>integration-test</id>
-            <phase>initialize</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.plugins.invoker.its</groupId>
+  <artifactId>invocation-cmdline-exclude</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <description>Test if the exclude can be used from commandline</description>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-invoker-plugin</artifactId>
+        <version>@project.version@</version>
+        <configuration>
+          <debug>true</debug>
+          <goals>
+            <goal>validate</goal>
+          </goals>
+        </configuration>
+        <executions>
+          <execution>
+            <id>integration-test</id>
+            <phase>initialize</phase>
+            <goals>
+              <goal>run</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
diff --git a/src/it/invocation-cmdline-exclude/src/it/minvoker-140/pom.xml b/src/it/invocation-cmdline-exclude/src/it/minvoker-140/pom.xml
index b01fa82..03381ce 100644
--- a/src/it/invocation-cmdline-exclude/src/it/minvoker-140/pom.xml
+++ b/src/it/invocation-cmdline-exclude/src/it/minvoker-140/pom.xml
@@ -1,54 +1,54 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.apache.maven.plugins.invoker.its</groupId>
-  <artifactId>minvoker-138</artifactId>
-  <version>0.1-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-  
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-enforcer-plugin</artifactId>
-        <version>1.1.1</version>
-        <executions>
-          <execution>
-            <goals>
-              <goal>enforce</goal>
-            </goals>
-            <configuration>
-              <rules>
-                <AlwaysFail/>
-              </rules>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.plugins.invoker.its</groupId>
+  <artifactId>minvoker-138</artifactId>
+  <version>0.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+  
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+        <version>1.1.1</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>enforce</goal>
+            </goals>
+            <configuration>
+              <rules>
+                <AlwaysFail/>
+              </rules>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/it/invocation-debug/pom.xml b/src/it/invocation-debug/pom.xml
index 4e89b8e..1af96da 100644
--- a/src/it/invocation-debug/pom.xml
+++ b/src/it/invocation-debug/pom.xml
@@ -1,68 +1,68 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>org.apache.maven.plugins.invoker.its</groupId>
-  <artifactId>invocation-debug</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <description>
-    Test to check for usage of debug mode.
-  </description>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-invoker-plugin</artifactId>
-        <version>@pom.version@</version>
-        <configuration>
-          <goals>
-            <goal>validate</goal>
-          </goals>
-          <debug>false</debug>
-          <postBuildHookScript>verify</postBuildHookScript>
-          <properties>
-            <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
-            <https.protocols>${https.protocols}</https.protocols>
-          </properties>
-        </configuration>
-        <executions>
-          <execution>
-            <id>integration-test</id>
-            <phase>initialize</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.plugins.invoker.its</groupId>
+  <artifactId>invocation-debug</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <description>
+    Test to check for usage of debug mode.
+  </description>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-invoker-plugin</artifactId>
+        <version>@pom.version@</version>
+        <configuration>
+          <goals>
+            <goal>validate</goal>
+          </goals>
+          <debug>false</debug>
+          <postBuildHookScript>verify</postBuildHookScript>
+          <properties>
+            <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
+            <https.protocols>${https.protocols}</https.protocols>
+          </properties>
+        </configuration>
+        <executions>
+          <execution>
+            <id>integration-test</id>
+            <phase>initialize</phase>
+            <goals>
+              <goal>run</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
diff --git a/src/it/invocation-debug/src/it/minvoker-142/pom.xml b/src/it/invocation-debug/src/it/minvoker-142/pom.xml
index 87c7142..2cf36a4 100644
--- a/src/it/invocation-debug/src/it/minvoker-142/pom.xml
+++ b/src/it/invocation-debug/src/it/minvoker-142/pom.xml
@@ -1,58 +1,58 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.apache.maven.plugins.invoker.its</groupId>
-  <artifactId>minvoker-142</artifactId>
-  <version>0.1-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-  
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-enforcer-plugin</artifactId>
-        <version>1.1.1</version>
-        <executions>
-          <execution>
-            <goals>
-              <goal>enforce</goal>
-            </goals>
-            <configuration>
-              <properties>
-                <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
-                <https.protocols>${https.protocols}</https.protocols>
-              </properties>
-              <rules>
-                <AlwaysPass/>
-              </rules>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.plugins.invoker.its</groupId>
+  <artifactId>minvoker-142</artifactId>
+  <version>0.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+  
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+        <version>1.1.1</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>enforce</goal>
+            </goals>
+            <configuration>
+              <properties>
+                <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
+                <https.protocols>${https.protocols}</https.protocols>
+              </properties>
+              <rules>
+                <AlwaysPass/>
+              </rules>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/it/invocation-debug/src/it/minvoker-142/verify.groovy b/src/it/invocation-debug/src/it/minvoker-142/verify.groovy
index 417a89e..b1367e9 100644
--- a/src/it/invocation-debug/src/it/minvoker-142/verify.groovy
+++ b/src/it/invocation-debug/src/it/minvoker-142/verify.groovy
@@ -1,20 +1,20 @@
-/*
- * 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.
- */
-File buildLog = new File( basedir, 'build.log' )
+/*
+ * 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.
+ */
+File buildLog = new File( basedir, 'build.log' )
 assert buildLog.text.contains( '[DEBUG] Executing rule: org.apache.maven.plugins.enforcer.AlwaysPass' )  
\ No newline at end of file
diff --git a/src/it/invocation-emptyproperty/pom.xml b/src/it/invocation-emptyproperty/pom.xml
index 690caca..3b876ef 100644
--- a/src/it/invocation-emptyproperty/pom.xml
+++ b/src/it/invocation-emptyproperty/pom.xml
@@ -1,68 +1,68 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>org.apache.maven.plugins.invoker.its</groupId>
-  <artifactId>invocation-emptyporperty</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <description>Test if the invocation succeeds even if there are empty/unresolved properties</description>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-invoker-plugin</artifactId>
-        <version>@project.version@</version>
-        <configuration>
-          <debug>true</debug>
-          <goals>
-            <goal>validate</goal>
-          </goals>
-          <properties>
-            <key>value</key>
-            <some.property>${example.property}</some.property>
-            <empty.property/>
-            <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
-            <https.protocols>${https.protocols}</https.protocols>
-          </properties>
-        </configuration>
-        <executions>
-          <execution>
-            <id>integration-test</id>
-            <phase>initialize</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.plugins.invoker.its</groupId>
+  <artifactId>invocation-emptyporperty</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <description>Test if the invocation succeeds even if there are empty/unresolved properties</description>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-invoker-plugin</artifactId>
+        <version>@project.version@</version>
+        <configuration>
+          <debug>true</debug>
+          <goals>
+            <goal>validate</goal>
+          </goals>
+          <properties>
+            <key>value</key>
+            <some.property>${example.property}</some.property>
+            <empty.property/>
+            <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
+            <https.protocols>${https.protocols}</https.protocols>
+          </properties>
+        </configuration>
+        <executions>
+          <execution>
+            <id>integration-test</id>
+            <phase>initialize</phase>
+            <goals>
+              <goal>run</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
diff --git a/src/it/invocation-emptyproperty/src/it/minvoker-118/pom.xml b/src/it/invocation-emptyproperty/src/it/minvoker-118/pom.xml
index cd7234b..17fc241 100644
--- a/src/it/invocation-emptyproperty/src/it/minvoker-118/pom.xml
+++ b/src/it/invocation-emptyproperty/src/it/minvoker-118/pom.xml
@@ -1,58 +1,58 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.apache.maven.plugins.invoker.its</groupId>
-  <artifactId>minvoker-118</artifactId>
-  <version>0.1-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-  
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-enforcer-plugin</artifactId>
-        <version>1.1.1</version>
-        <executions>
-          <execution>
-            <goals>
-              <goal>enforce</goal>
-            </goals>
-            <configuration>
-              <properties>
-                <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
-                <https.protocols>${https.protocols}</https.protocols>
-              </properties>
-              <rules>
-                <AlwaysPass/>
-              </rules>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.plugins.invoker.its</groupId>
+  <artifactId>minvoker-118</artifactId>
+  <version>0.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+  
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+        <version>1.1.1</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>enforce</goal>
+            </goals>
+            <configuration>
+              <properties>
+                <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
+                <https.protocols>${https.protocols}</https.protocols>
+              </properties>
+              <rules>
+                <AlwaysPass/>
+              </rules>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/it/invocation-environmentvariable/pom.xml b/src/it/invocation-environmentvariable/pom.xml
index 2229826..5c5b025 100644
--- a/src/it/invocation-environmentvariable/pom.xml
+++ b/src/it/invocation-environmentvariable/pom.xml
@@ -1,67 +1,67 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>org.apache.maven.plugins.invoker.its</groupId>
-  <artifactId>invocation-environmentvariable</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <description>Test if the environmentvariable is applied</description>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-invoker-plugin</artifactId>
-        <version>@project.version@</version>
-        <configuration>
-          <debug>true</debug>
-          <postBuildHookScript>verify</postBuildHookScript>
-          <goals>
-            <goal>validate</goal>
-          </goals>
-          <environmentVariables>
-            <MINVOKER145>foobar</MINVOKER145>
-            <MINVOKER255_POM>minvoker255_pom</MINVOKER255_POM>
-          </environmentVariables>
-        </configuration>
-        <executions>
-          <execution>
-            <id>integration-test</id>
-            <phase>initialize</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.plugins.invoker.its</groupId>
+  <artifactId>invocation-environmentvariable</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <description>Test if the environmentvariable is applied</description>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-invoker-plugin</artifactId>
+        <version>@project.version@</version>
+        <configuration>
+          <debug>true</debug>
+          <postBuildHookScript>verify</postBuildHookScript>
+          <goals>
+            <goal>validate</goal>
+          </goals>
+          <environmentVariables>
+            <MINVOKER145>foobar</MINVOKER145>
+            <MINVOKER255_POM>minvoker255_pom</MINVOKER255_POM>
+          </environmentVariables>
+        </configuration>
+        <executions>
+          <execution>
+            <id>integration-test</id>
+            <phase>initialize</phase>
+            <goals>
+              <goal>run</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
diff --git a/src/it/invocation-environmentvariable/src/it/minvoker-145/pom.xml b/src/it/invocation-environmentvariable/src/it/minvoker-145/pom.xml
index 1f506ef..158f99e 100644
--- a/src/it/invocation-environmentvariable/src/it/minvoker-145/pom.xml
+++ b/src/it/invocation-environmentvariable/src/it/minvoker-145/pom.xml
@@ -1,58 +1,58 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.apache.maven.plugins.invoker.its</groupId>
-  <artifactId>minvoker-145</artifactId>
-  <version>0.1-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <profiles>
-    <profile>
-      <id>envTest</id>
-      <activation>
-        <property>
-          <name>env.MINVOKER145</name>
-          <value>!foobar</value>
-        </property>
-      </activation>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-enforcer-plugin</artifactId>
-            <version>1.1.1</version>
-            <executions>
-              <execution>
-                <goals>
-                  <goal>enforce</goal>
-                </goals>
-                <configuration>
-                  <rules>
-                    <AlwaysFail />
-                  </rules>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.plugins.invoker.its</groupId>
+  <artifactId>minvoker-145</artifactId>
+  <version>0.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <profiles>
+    <profile>
+      <id>envTest</id>
+      <activation>
+        <property>
+          <name>env.MINVOKER145</name>
+          <value>!foobar</value>
+        </property>
+      </activation>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-enforcer-plugin</artifactId>
+            <version>1.1.1</version>
+            <executions>
+              <execution>
+                <goals>
+                  <goal>enforce</goal>
+                </goals>
+                <configuration>
+                  <rules>
+                    <AlwaysFail />
+                  </rules>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
+</project>
diff --git a/src/it/invocation-reactor-indirect/plugin/src/main/java/org/apache/maven/it/plugins/dummy/MyMojo.java b/src/it/invocation-reactor-indirect/plugin/src/main/java/org/apache/maven/it/plugins/dummy/MyMojo.java
index c225e4b..a1b8fa1 100644
--- a/src/it/invocation-reactor-indirect/plugin/src/main/java/org/apache/maven/it/plugins/dummy/MyMojo.java
+++ b/src/it/invocation-reactor-indirect/plugin/src/main/java/org/apache/maven/it/plugins/dummy/MyMojo.java
@@ -1,78 +1,78 @@
-package org.apache.maven.it.plugins.dummy;
-
-/*
- * Copyright 2001-2005 The Apache Software Foundation.
- *
- * Licensed 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.
- */
-
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-
-/**
- * @goal touch
- * @phase process-sources
- */
-public class MyMojo
-    extends AbstractMojo
-{
-    /**
-     * Location of the file.
-     * @parameter expression="${project.build.directory}"
-     * @required
-     */
-    private File outputDirectory;
-
-    public void execute()
-        throws MojoExecutionException
-    {
-        File f = outputDirectory;
-
-        if ( !f.exists() )
-        {
-            f.mkdirs();
-        }
-
-        File touch = new File( f, "touch.txt" );
-
-        FileWriter w = null;
-        try
-        {
-            w = new FileWriter( touch );
-
-            w.write( "touch.txt" );
-        }
-        catch ( IOException e )
-        {
-            throw new MojoExecutionException( "Error creating file " + touch, e );
-        }
-        finally
-        {
-            if ( w != null )
-            {
-                try
-                {
-                    w.close();
-                }
-                catch ( IOException e )
-                {
-                    // ignore
-                }
-            }
-        }
-    }
-}
+package org.apache.maven.it.plugins.dummy;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+
+/**
+ * @goal touch
+ * @phase process-sources
+ */
+public class MyMojo
+    extends AbstractMojo
+{
+    /**
+     * Location of the file.
+     * @parameter expression="${project.build.directory}"
+     * @required
+     */
+    private File outputDirectory;
+
+    public void execute()
+        throws MojoExecutionException
+    {
+        File f = outputDirectory;
+
+        if ( !f.exists() )
+        {
+            f.mkdirs();
+        }
+
+        File touch = new File( f, "touch.txt" );
+
+        FileWriter w = null;
+        try
+        {
+            w = new FileWriter( touch );
+
+            w.write( "touch.txt" );
+        }
+        catch ( IOException e )
+        {
+            throw new MojoExecutionException( "Error creating file " + touch, e );
+        }
+        finally
+        {
+            if ( w != null )
+            {
+                try
+                {
+                    w.close();
+                }
+                catch ( IOException e )
+                {
+                    // ignore
+                }
+            }
+        }
+    }
+}
diff --git a/src/it/invocation-reactor-indirect/pom.xml b/src/it/invocation-reactor-indirect/pom.xml
index 6986e4d..a7c0f1a 100644
--- a/src/it/invocation-reactor-indirect/pom.xml
+++ b/src/it/invocation-reactor-indirect/pom.xml
@@ -1,77 +1,77 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>org.apache.maven.plugins.invoker</groupId>
-  <artifactId>MINVOKER-115-parent</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <description>
-    Test of reported issue MINVOKER-115: install goal doesn't install plugins from the reactor
-    build to the local repo.
-  </description>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <modules>
-    <module>plugin</module>
-    <module>itests</module>
-  </modules>
-
-  <build>
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-compiler-plugin</artifactId>
-          <version>2.5.1</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-plugin-plugin</artifactId>
-          <version>2.9</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-resources-plugin</artifactId>
-          <version>2.6</version>
-        </plugin>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-invoker-plugin</artifactId>
-          <version>@project.version@</version>
-          <configuration>
-            <properties>
-              <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
-              <https.protocols>${https.protocols}</https.protocols>
-            </properties>
-          </configuration>
-        </plugin>
-      </plugins>
-    </pluginManagement>
-  </build>
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.plugins.invoker</groupId>
+  <artifactId>MINVOKER-115-parent</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <description>
+    Test of reported issue MINVOKER-115: install goal doesn't install plugins from the reactor
+    build to the local repo.
+  </description>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <modules>
+    <module>plugin</module>
+    <module>itests</module>
+  </modules>
+
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>2.5.1</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-plugin-plugin</artifactId>
+          <version>2.9</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-resources-plugin</artifactId>
+          <version>2.6</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-invoker-plugin</artifactId>
+          <version>@project.version@</version>
+          <configuration>
+            <properties>
+              <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
+              <https.protocols>${https.protocols}</https.protocols>
+            </properties>
+          </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>
diff --git a/src/it/invoker-report/src/it/skip-jre/pom.xml b/src/it/invoker-report/src/it/skip-jre/pom.xml
index cd7ec5d..ea5c00f 100644
--- a/src/it/invoker-report/src/it/skip-jre/pom.xml
+++ b/src/it/invoker-report/src/it/skip-jre/pom.xml
@@ -1,32 +1,32 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>test</groupId>
-  <artifactId>test</artifactId>
-  <version>0.1-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>test</groupId>
+  <artifactId>test</artifactId>
+  <version>0.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+</project>
diff --git a/src/it/invoker-report/src/it/skip-maven/pom.xml b/src/it/invoker-report/src/it/skip-maven/pom.xml
index cd7ec5d..ea5c00f 100644
--- a/src/it/invoker-report/src/it/skip-maven/pom.xml
+++ b/src/it/invoker-report/src/it/skip-maven/pom.xml
@@ -1,32 +1,32 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>test</groupId>
-  <artifactId>test</artifactId>
-  <version>0.1-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>test</groupId>
+  <artifactId>test</artifactId>
+  <version>0.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+</project>
diff --git a/src/it/invoker-report/src/it/skip-os/pom.xml b/src/it/invoker-report/src/it/skip-os/pom.xml
index cd7ec5d..ea5c00f 100644
--- a/src/it/invoker-report/src/it/skip-os/pom.xml
+++ b/src/it/invoker-report/src/it/skip-os/pom.xml
@@ -1,32 +1,32 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>test</groupId>
-  <artifactId>test</artifactId>
-  <version>0.1-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>test</groupId>
+  <artifactId>test</artifactId>
+  <version>0.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+</project>
diff --git a/src/it/local-repo-url/src/it/project/postbuild.groovy b/src/it/local-repo-url/src/it/project/postbuild.groovy
index 6b8ec74..a42a51a 100644
--- a/src/it/local-repo-url/src/it/project/postbuild.groovy
+++ b/src/it/local-repo-url/src/it/project/postbuild.groovy
@@ -1,42 +1,42 @@
-/*
- * 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.
- */
-
-// ensure script context contains localRepositoryPath
-assert new File( basedir, "../../../target/it-repo" ).canonicalFile.equals( localRepositoryPath )
-
-File interpolatedSettings = new File( basedir, "../interpolated-settings.xml" )
-assert interpolatedSettings.isFile()
-
-def filename = new File( basedir, "../../../../../local-repo" ).canonicalPath
-// Convert URL, see org.apache.maven.plugins.invoker.AbstractInvokerMojo.toUrl(String)
-String url = "file://" + new File(  filename  ).toURI().path
-if ( url.endsWith( "/" ) )
-{
-    url = url.substring( 0, url.length() - 1 )
-}
-
-def settings = new XmlSlurper().parse( interpolatedSettings )
-
-// ensure right settings and mirror are picked up
-def sandboxMirror = settings.mirrors.mirror[0]
-assert sandboxMirror.id.text() == "sandbox"
-assert sandboxMirror.url.text() != "@localRepositoryUrl@"
-
-// sandboxMirror.url is NOT filled with localRepositoryPath, but with the localRepository of the parent Settings
-assert sandboxMirror.url.text() == url
+/*
+ * 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.
+ */
+
+// ensure script context contains localRepositoryPath
+assert new File( basedir, "../../../target/it-repo" ).canonicalFile.equals( localRepositoryPath )
+
+File interpolatedSettings = new File( basedir, "../interpolated-settings.xml" )
+assert interpolatedSettings.isFile()
+
+def filename = new File( basedir, "../../../../../local-repo" ).canonicalPath
+// Convert URL, see org.apache.maven.plugins.invoker.AbstractInvokerMojo.toUrl(String)
+String url = "file://" + new File(  filename  ).toURI().path
+if ( url.endsWith( "/" ) )
+{
+    url = url.substring( 0, url.length() - 1 )
+}
+
+def settings = new XmlSlurper().parse( interpolatedSettings )
+
+// ensure right settings and mirror are picked up
+def sandboxMirror = settings.mirrors.mirror[0]
+assert sandboxMirror.id.text() == "sandbox"
+assert sandboxMirror.url.text() != "@localRepositoryUrl@"
+
+// sandboxMirror.url is NOT filled with localRepositoryPath, but with the localRepository of the parent Settings
+assert sandboxMirror.url.text() == url
diff --git a/src/it/local-repo-url/verify.groovy b/src/it/local-repo-url/verify.groovy
index 4e4f774..a68d1f3 100644
--- a/src/it/local-repo-url/verify.groovy
+++ b/src/it/local-repo-url/verify.groovy
@@ -1,20 +1,20 @@
-/*
- * 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.
- */
-File buildLog = new File( basedir, 'build.log' )
+/*
+ * 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.
+ */
+File buildLog = new File( basedir, 'build.log' )
 assert buildLog.text.contains( '[INFO] run post-build script postbuild.groovy' ) 
\ No newline at end of file
diff --git a/src/it/script-verify-xml/pom.xml b/src/it/script-verify-xml/pom.xml
index db94d29..a44fc33 100644
--- a/src/it/script-verify-xml/pom.xml
+++ b/src/it/script-verify-xml/pom.xml
@@ -1,61 +1,61 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>org.apache.maven.plugins.invoker.its</groupId>
-  <artifactId>script-verify-xml</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <description>Test if the XmlSlurper is still on the classpath.</description>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-invoker-plugin</artifactId>
-        <version>@project.version@</version>
-        <configuration>
-          <debug>true</debug>
-          <goals>
-            <goal>validate</goal>
-          </goals>
-        </configuration>
-        <executions>
-          <execution>
-            <id>integration-test</id>
-            <phase>initialize</phase>
-            <goals>
-              <goal>verify</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.plugins.invoker.its</groupId>
+  <artifactId>script-verify-xml</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <description>Test if the XmlSlurper is still on the classpath.</description>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-invoker-plugin</artifactId>
+        <version>@project.version@</version>
+        <configuration>
+          <debug>true</debug>
+          <goals>
+            <goal>validate</goal>
+          </goals>
+        </configuration>
+        <executions>
+          <execution>
+            <id>integration-test</id>
+            <phase>initialize</phase>
+            <goals>
+              <goal>verify</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
diff --git a/src/it/script-verify-xml/src/it/minvoker-138/pom.xml b/src/it/script-verify-xml/src/it/minvoker-138/pom.xml
index 634dc5e..32a6106 100644
--- a/src/it/script-verify-xml/src/it/minvoker-138/pom.xml
+++ b/src/it/script-verify-xml/src/it/minvoker-138/pom.xml
@@ -1,32 +1,32 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.apache.maven.plugins.invoker.its</groupId>
-  <artifactId>minvoker-138</artifactId>
-  <version>0.1-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.plugins.invoker.its</groupId>
+  <artifactId>minvoker-138</artifactId>
+  <version>0.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+</project>
diff --git a/src/it/settings-merge_jdk9+/pom.xml b/src/it/settings-merge_jdk9+/pom.xml
index 9bc0316..c7b89c6 100644
--- a/src/it/settings-merge_jdk9+/pom.xml
+++ b/src/it/settings-merge_jdk9+/pom.xml
@@ -1,65 +1,65 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>org.apache.maven.plugins.invoker</groupId>
-  <artifactId>settings-merge</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <description>Test to check that the settings.xml from the calling process is merged with the
-  one specified for m-invoker-p.</description>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-invoker-plugin</artifactId>
-        <version>@project.version@</version>
-        <configuration>
-          <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
-          <cloneClean>true</cloneClean>
-          <settingsFile>src/it/settings.xml</settingsFile>
-          <mergeUserSettings>true</mergeUserSettings>
-          <properties>
-            <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
-            <https.protocols>${https.protocols}</https.protocols>
-          </properties>
-        </configuration>
-        <executions>
-          <execution>
-            <id>integration-test</id>
-            <phase>initialize</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.plugins.invoker</groupId>
+  <artifactId>settings-merge</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <description>Test to check that the settings.xml from the calling process is merged with the
+  one specified for m-invoker-p.</description>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-invoker-plugin</artifactId>
+        <version>@project.version@</version>
+        <configuration>
+          <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
+          <cloneClean>true</cloneClean>
+          <settingsFile>src/it/settings.xml</settingsFile>
+          <mergeUserSettings>true</mergeUserSettings>
+          <properties>
+            <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
+            <https.protocols>${https.protocols}</https.protocols>
+          </properties>
+        </configuration>
+        <executions>
+          <execution>
+            <id>integration-test</id>
+            <phase>initialize</phase>
+            <goals>
+              <goal>run</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/it/settings-merge_jdk9+/src/it/project/pom.xml b/src/it/settings-merge_jdk9+/src/it/project/pom.xml
index da45fb5..8870189 100644
--- a/src/it/settings-merge_jdk9+/src/it/project/pom.xml
+++ b/src/it/settings-merge_jdk9+/src/it/project/pom.xml
@@ -1,84 +1,84 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>test</groupId>
-  <artifactId>project</artifactId>
-  <version>0.1-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-enforcer-plugin</artifactId>
-        <version>1.0.1</version>
-        <executions>
-          <execution>
-            <id>verify-properties</id>
-            <goals>
-              <goal>enforce</goal>
-            </goals>
-            <configuration>
-              <rules>
-                <requireProperty>
-                  <property>it.settings-merge.1</property>
-                  <message>Property not present - settings.xml from calling process not merged!</message>
-                  <regex>(exists)$</regex>
-                </requireProperty>
-                <requireProperty>
-                  <property>it.settings-merge.2</property>
-                  <message>Property not present - specified settings.xml not merged!</message>
-                  <regex>(exists)$</regex>
-                </requireProperty>
-              </rules>
-              <fail>true</fail>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-help-plugin</artifactId>
-        <version>2.2</version>
-        <executions>
-          <execution>
-            <id>effective-settings</id>
-            <phase>validate</phase>
-            <goals>
-              <goal>effective-settings</goal>
-            </goals>
-            <configuration>
-              <output>effective-settings.xml</output>
-              <showPasswords>true</showPasswords>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>test</groupId>
+  <artifactId>project</artifactId>
+  <version>0.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+        <version>1.0.1</version>
+        <executions>
+          <execution>
+            <id>verify-properties</id>
+            <goals>
+              <goal>enforce</goal>
+            </goals>
+            <configuration>
+              <rules>
+                <requireProperty>
+                  <property>it.settings-merge.1</property>
+                  <message>Property not present - settings.xml from calling process not merged!</message>
+                  <regex>(exists)$</regex>
+                </requireProperty>
+                <requireProperty>
+                  <property>it.settings-merge.2</property>
+                  <message>Property not present - specified settings.xml not merged!</message>
+                  <regex>(exists)$</regex>
+                </requireProperty>
+              </rules>
+              <fail>true</fail>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-help-plugin</artifactId>
+        <version>2.2</version>
+        <executions>
+          <execution>
+            <id>effective-settings</id>
+            <phase>validate</phase>
+            <goals>
+              <goal>effective-settings</goal>
+            </goals>
+            <configuration>
+              <output>effective-settings.xml</output>
+              <showPasswords>true</showPasswords>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/it/settings-merge_jdk9+/src/it/project/postbuild.groovy b/src/it/settings-merge_jdk9+/src/it/project/postbuild.groovy
index 19f5385..756af0f 100644
--- a/src/it/settings-merge_jdk9+/src/it/project/postbuild.groovy
+++ b/src/it/settings-merge_jdk9+/src/it/project/postbuild.groovy
@@ -1,27 +1,27 @@
-/*
- * 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.
- */
-
-File effectiveSettings = new File( basedir, "effective-settings.xml" )
-assert effectiveSettings.isFile()
-
-def settings = new XmlSlurper().parse( effectiveSettings )
-def server = settings.servers.server.find{ it.id.equals('dummy-it-settings-merge') }
-
-if( !server.password.equals('overridden') )
-  throw new org.apache.maven.plugin.MojoExecutionException("Incorrect server password - specified settings.xml not merged/dominant " + server.password)
+/*
+ * 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.
+ */
+
+File effectiveSettings = new File( basedir, "effective-settings.xml" )
+assert effectiveSettings.isFile()
+
+def settings = new XmlSlurper().parse( effectiveSettings )
+def server = settings.servers.server.find{ it.id.equals('dummy-it-settings-merge') }
+
+if( !server.password.equals('overridden') )
+  throw new org.apache.maven.plugin.MojoExecutionException("Incorrect server password - specified settings.xml not merged/dominant " + server.password)
diff --git a/src/it/settings-merge_jdk9+/src/it/settings.xml b/src/it/settings-merge_jdk9+/src/it/settings.xml
index 00aee93..1326627 100644
--- a/src/it/settings-merge_jdk9+/src/it/settings.xml
+++ b/src/it/settings-merge_jdk9+/src/it/settings.xml
@@ -1,42 +1,42 @@
-<?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.
--->
-
-<settings>
-  <servers>
-    <server>
-      <id>dummy-it-settings-merge</id>
-      <username>user</username>
-      <password>overridden</password>
-    </server>
-  </servers>
-
-  <profiles>
-    <profile>
-      <id>it-properties</id>
-      <activation>
-        <activeByDefault>true</activeByDefault>
-      </activation>
-      <properties>
-        <it.settings-merge.2>exists</it.settings-merge.2>
-      </properties>
-    </profile>
-  </profiles>
-</settings>
+<?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.
+-->
+
+<settings>
+  <servers>
+    <server>
+      <id>dummy-it-settings-merge</id>
+      <username>user</username>
+      <password>overridden</password>
+    </server>
+  </servers>
+
+  <profiles>
+    <profile>
+      <id>it-properties</id>
+      <activation>
+        <activeByDefault>true</activeByDefault>
+      </activation>
+      <properties>
+        <it.settings-merge.2>exists</it.settings-merge.2>
+      </properties>
+    </profile>
+  </profiles>
+</settings>
diff --git a/src/it/settings-override/pom.xml b/src/it/settings-override/pom.xml
index b082fa0..c8ec014 100644
--- a/src/it/settings-override/pom.xml
+++ b/src/it/settings-override/pom.xml
@@ -1,63 +1,63 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>org.apache.maven.plugins.invoker</groupId>
-  <artifactId>settings-merge</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <description>Test to check that the settings.xml from the calling process is merged with the
-  one specified for m-invoker-p.</description>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-invoker-plugin</artifactId>
-        <version>@project.version@</version>
-        <configuration>
-          <settingsFile>src/it/settings.xml</settingsFile>
-          <mergeUserSettings>true</mergeUserSettings>
-          <properties>
-            <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
-            <https.protocols>${https.protocols}</https.protocols>
-          </properties>
-        </configuration>
-        <executions>
-          <execution>
-            <id>integration-test</id>
-            <phase>initialize</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.plugins.invoker</groupId>
+  <artifactId>settings-merge</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <description>Test to check that the settings.xml from the calling process is merged with the
+  one specified for m-invoker-p.</description>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-invoker-plugin</artifactId>
+        <version>@project.version@</version>
+        <configuration>
+          <settingsFile>src/it/settings.xml</settingsFile>
+          <mergeUserSettings>true</mergeUserSettings>
+          <properties>
+            <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
+            <https.protocols>${https.protocols}</https.protocols>
+          </properties>
+        </configuration>
+        <executions>
+          <execution>
+            <id>integration-test</id>
+            <phase>initialize</phase>
+            <goals>
+              <goal>run</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/it/settings-override/src/it/project/invoker.properties b/src/it/settings-override/src/it/project/invoker.properties
index 6ec72bd..258f625 100644
--- a/src/it/settings-override/src/it/project/invoker.properties
+++ b/src/it/settings-override/src/it/project/invoker.properties
@@ -1,18 +1,18 @@
-# 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.
-
+# 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.
+
 invoker.settingsFile =src/it/settings-override.xml
\ No newline at end of file
diff --git a/src/it/settings-override/src/it/project/pom.xml b/src/it/settings-override/src/it/project/pom.xml
index d21857d..cb22679 100644
--- a/src/it/settings-override/src/it/project/pom.xml
+++ b/src/it/settings-override/src/it/project/pom.xml
@@ -1,58 +1,58 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>test</groupId>
-  <artifactId>project</artifactId>
-  <version>0.1-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <enforcer.fail>true</enforcer.fail>
-  </properties>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-enforcer-plugin</artifactId>
-        <version>1.0.1</version>
-        <executions>
-          <execution>
-            <id>verify-properties</id>
-            <goals>
-              <goal>enforce</goal>
-            </goals>
-            <configuration>
-              <rules>
-                <alwaysFail/>
-              </rules>
-              <fail>${enforcer.fail}</fail>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>test</groupId>
+  <artifactId>project</artifactId>
+  <version>0.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <enforcer.fail>true</enforcer.fail>
+  </properties>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+        <version>1.0.1</version>
+        <executions>
+          <execution>
+            <id>verify-properties</id>
+            <goals>
+              <goal>enforce</goal>
+            </goals>
+            <configuration>
+              <rules>
+                <alwaysFail/>
+              </rules>
+              <fail>${enforcer.fail}</fail>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/it/settings-override/src/it/project/postbuild.groovy b/src/it/settings-override/src/it/project/postbuild.groovy
index 4b30e46..620dd14 100644
--- a/src/it/settings-override/src/it/project/postbuild.groovy
+++ b/src/it/settings-override/src/it/project/postbuild.groovy
@@ -1,21 +1,21 @@
-/*
- * 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.
- */
-
-File interpolatedCustomSettings = new File( basedir, "../interpolated-settings-override.xml" )
-assert interpolatedCustomSettings.isFile()
+/*
+ * 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.
+ */
+
+File interpolatedCustomSettings = new File( basedir, "../interpolated-settings-override.xml" )
+assert interpolatedCustomSettings.isFile()
diff --git a/src/it/settings-override/src/it/settings-override.xml b/src/it/settings-override/src/it/settings-override.xml
index 6c916e4..d7f70c0 100644
--- a/src/it/settings-override/src/it/settings-override.xml
+++ b/src/it/settings-override/src/it/settings-override.xml
@@ -1,34 +1,34 @@
-<?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.
--->
-
-<settings>
-  <profiles>
-    <profile>
-      <id>it-properties</id>
-      <activation>
-        <activeByDefault>true</activeByDefault>
-      </activation>
-      <properties>
-        <enforcer.fail>false</enforcer.fail>
-      </properties>
-    </profile>
-  </profiles>
-</settings>
+<?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.
+-->
+
+<settings>
+  <profiles>
+    <profile>
+      <id>it-properties</id>
+      <activation>
+        <activeByDefault>true</activeByDefault>
+      </activation>
+      <properties>
+        <enforcer.fail>false</enforcer.fail>
+      </properties>
+    </profile>
+  </profiles>
+</settings>
diff --git a/src/it/settings-override/src/it/settings.xml b/src/it/settings-override/src/it/settings.xml
index a2d26c4..a2d6556 100644
--- a/src/it/settings-override/src/it/settings.xml
+++ b/src/it/settings-override/src/it/settings.xml
@@ -1,34 +1,34 @@
-<?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.
--->
-
-<settings>
-  <profiles>
-    <profile>
-      <id>it-properties</id>
-      <activation>
-        <activeByDefault>true</activeByDefault>
-      </activation>
-      <properties>
-        <enforcer.fail>true</enforcer.fail>
-      </properties>
-    </profile>
-  </profiles>
-</settings>
+<?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.
+-->
+
+<settings>
+  <profiles>
+    <profile>
+      <id>it-properties</id>
+      <activation>
+        <activeByDefault>true</activeByDefault>
+      </activation>
+      <properties>
+        <enforcer.fail>true</enforcer.fail>
+      </properties>
+    </profile>
+  </profiles>
+</settings>
diff --git a/src/it/spaces-should-work_non-windows/pom.xml b/src/it/spaces-should-work_non-windows/pom.xml
index 03e8163..766fe3d 100644
--- a/src/it/spaces-should-work_non-windows/pom.xml
+++ b/src/it/spaces-should-work_non-windows/pom.xml
@@ -1,68 +1,68 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>org.apache.maven.plugins.invoker.its</groupId>
-  <artifactId>basedir-with-spaces</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <!-- MERGE PROJECTS ONCE MINVOKER-214 IS AVAILABLE -->
-  <description>
-    Test to check for usage of spaces in folder names.
-  </description>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-invoker-plugin</artifactId>
-        <version>@project.version@</version>
-        <configuration>
-          <goals>
-            <goal>validate</goal>
-          </goals>
-          <postBuildHookScript>verify</postBuildHookScript>
-          <properties>
-            <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
-            <https.protocols>${https.protocols}</https.protocols>
-          </properties>
-        </configuration>
-        <executions>
-          <execution>
-            <id>integration-test</id>
-            <phase>initialize</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.plugins.invoker.its</groupId>
+  <artifactId>basedir-with-spaces</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <!-- MERGE PROJECTS ONCE MINVOKER-214 IS AVAILABLE -->
+  <description>
+    Test to check for usage of spaces in folder names.
+  </description>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-invoker-plugin</artifactId>
+        <version>@project.version@</version>
+        <configuration>
+          <goals>
+            <goal>validate</goal>
+          </goals>
+          <postBuildHookScript>verify</postBuildHookScript>
+          <properties>
+            <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
+            <https.protocols>${https.protocols}</https.protocols>
+          </properties>
+        </configuration>
+        <executions>
+          <execution>
+            <id>integration-test</id>
+            <phase>initialize</phase>
+            <goals>
+              <goal>run</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
diff --git a/src/it/spaces-should-work_non-windows/src/it/minvoker-test/pom.xml b/src/it/spaces-should-work_non-windows/src/it/minvoker-test/pom.xml
index fc1577c..38521aa 100644
--- a/src/it/spaces-should-work_non-windows/src/it/minvoker-test/pom.xml
+++ b/src/it/spaces-should-work_non-windows/src/it/minvoker-test/pom.xml
@@ -1,54 +1,54 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.apache.maven.plugins.invoker.its</groupId>
-  <artifactId>minvoker-142</artifactId>
-  <version>0.1-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-  
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-enforcer-plugin</artifactId>
-        <version>1.1.1</version>
-        <executions>
-          <execution>
-            <goals>
-              <goal>enforce</goal>
-            </goals>
-            <configuration>
-              <rules>
-                <AlwaysPass/>
-              </rules>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.plugins.invoker.its</groupId>
+  <artifactId>minvoker-142</artifactId>
+  <version>0.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+  
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+        <version>1.1.1</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>enforce</goal>
+            </goals>
+            <configuration>
+              <rules>
+                <AlwaysPass/>
+              </rules>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/it/spaces-should-work_non-windows/src/it/minvoker-test/verify.groovy b/src/it/spaces-should-work_non-windows/src/it/minvoker-test/verify.groovy
index 066f05d..963ad63 100644
--- a/src/it/spaces-should-work_non-windows/src/it/minvoker-test/verify.groovy
+++ b/src/it/spaces-should-work_non-windows/src/it/minvoker-test/verify.groovy
@@ -1,26 +1,26 @@
-/*
- * 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.
- */
-File buildLog = new File( basedir, 'build.log' )
-
-// if one of criteria matches
-if( buildLog.exists() )
-{
-  assert buildLog.text.contains( '[DEBUG] Executing rule: org.apache.maven.plugins.enforcer.AlwaysPass' )  
-}
-
+/*
+ * 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.
+ */
+File buildLog = new File( basedir, 'build.log' )
+
+// if one of criteria matches
+if( buildLog.exists() )
+{
+  assert buildLog.text.contains( '[DEBUG] Executing rule: org.apache.maven.plugins.enforcer.AlwaysPass' )  
+}
+
diff --git a/src/it/spaces-should-work_windows/pom.xml b/src/it/spaces-should-work_windows/pom.xml
index e111e1e..75a31c3 100644
--- a/src/it/spaces-should-work_windows/pom.xml
+++ b/src/it/spaces-should-work_windows/pom.xml
@@ -1,64 +1,64 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>org.apache.maven.plugins.invoker.its</groupId>
-  <artifactId>basedir-with-spaces</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <!-- MERGE PROJECTS ONCE MINVOKER-214 IS AVAILABLE -->
-  <description>
-    Test to check for usage of spaces in folder names.
-  </description>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-invoker-plugin</artifactId>
-        <version>@project.version@</version>
-        <configuration>
-          <goals>
-            <goal>validate</goal>
-          </goals>
-          <postBuildHookScript>verify</postBuildHookScript>
-        </configuration>
-        <executions>
-          <execution>
-            <id>integration-test</id>
-            <phase>initialize</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.plugins.invoker.its</groupId>
+  <artifactId>basedir-with-spaces</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <!-- MERGE PROJECTS ONCE MINVOKER-214 IS AVAILABLE -->
+  <description>
+    Test to check for usage of spaces in folder names.
+  </description>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-invoker-plugin</artifactId>
+        <version>@project.version@</version>
+        <configuration>
+          <goals>
+            <goal>validate</goal>
+          </goals>
+          <postBuildHookScript>verify</postBuildHookScript>
+        </configuration>
+        <executions>
+          <execution>
+            <id>integration-test</id>
+            <phase>initialize</phase>
+            <goals>
+              <goal>run</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
diff --git a/src/it/spaces-should-work_windows/src/it/minvoker-test/pom.xml b/src/it/spaces-should-work_windows/src/it/minvoker-test/pom.xml
index fc1577c..38521aa 100644
--- a/src/it/spaces-should-work_windows/src/it/minvoker-test/pom.xml
+++ b/src/it/spaces-should-work_windows/src/it/minvoker-test/pom.xml
@@ -1,54 +1,54 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.apache.maven.plugins.invoker.its</groupId>
-  <artifactId>minvoker-142</artifactId>
-  <version>0.1-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-  
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-enforcer-plugin</artifactId>
-        <version>1.1.1</version>
-        <executions>
-          <execution>
-            <goals>
-              <goal>enforce</goal>
-            </goals>
-            <configuration>
-              <rules>
-                <AlwaysPass/>
-              </rules>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.plugins.invoker.its</groupId>
+  <artifactId>minvoker-142</artifactId>
+  <version>0.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+  
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+        <version>1.1.1</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>enforce</goal>
+            </goals>
+            <configuration>
+              <rules>
+                <AlwaysPass/>
+              </rules>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/it/spaces-should-work_windows/src/it/minvoker-test/verify.groovy b/src/it/spaces-should-work_windows/src/it/minvoker-test/verify.groovy
index 066f05d..963ad63 100644
--- a/src/it/spaces-should-work_windows/src/it/minvoker-test/verify.groovy
+++ b/src/it/spaces-should-work_windows/src/it/minvoker-test/verify.groovy
@@ -1,26 +1,26 @@
-/*
- * 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.
- */
-File buildLog = new File( basedir, 'build.log' )
-
-// if one of criteria matches
-if( buildLog.exists() )
-{
-  assert buildLog.text.contains( '[DEBUG] Executing rule: org.apache.maven.plugins.enforcer.AlwaysPass' )  
-}
-
+/*
+ * 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.
+ */
+File buildLog = new File( basedir, 'build.log' )
+
+// if one of criteria matches
+if( buildLog.exists() )
+{
+  assert buildLog.text.contains( '[DEBUG] Executing rule: org.apache.maven.plugins.enforcer.AlwaysPass' )  
+}
+
diff --git a/src/it/special-characters-should-work/pom.xml b/src/it/special-characters-should-work/pom.xml
index b5ecd46..5df94f8 100644
--- a/src/it/special-characters-should-work/pom.xml
+++ b/src/it/special-characters-should-work/pom.xml
@@ -1,68 +1,68 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>org.apache.maven.plugins.invoker.its</groupId>
-  <artifactId>accents-debug</artifactId>
-  <version>1.0-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <description>
-    Test to check for usage of accents in folder names.
-  </description>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-invoker-plugin</artifactId>
-        <version>@project.version@</version>
-        <configuration>
-          <goals>
-            <goal>validate</goal>
-          </goals>
-          <debug>false</debug>
-          <postBuildHookScript>verify</postBuildHookScript>
-          <properties>
-            <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
-            <https.protocols>${https.protocols}</https.protocols>
-          </properties>
-        </configuration>
-        <executions>
-          <execution>
-            <id>integration-test</id>
-            <phase>initialize</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.plugins.invoker.its</groupId>
+  <artifactId>accents-debug</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <description>
+    Test to check for usage of accents in folder names.
+  </description>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-invoker-plugin</artifactId>
+        <version>@project.version@</version>
+        <configuration>
+          <goals>
+            <goal>validate</goal>
+          </goals>
+          <debug>false</debug>
+          <postBuildHookScript>verify</postBuildHookScript>
+          <properties>
+            <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
+            <https.protocols>${https.protocols}</https.protocols>
+          </properties>
+        </configuration>
+        <executions>
+          <execution>
+            <id>integration-test</id>
+            <phase>initialize</phase>
+            <goals>
+              <goal>run</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
diff --git a/src/it/special-characters-should-work/src/it/minvoker-test/pom.xml b/src/it/special-characters-should-work/src/it/minvoker-test/pom.xml
index fc1577c..38521aa 100644
--- a/src/it/special-characters-should-work/src/it/minvoker-test/pom.xml
+++ b/src/it/special-characters-should-work/src/it/minvoker-test/pom.xml
@@ -1,54 +1,54 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.apache.maven.plugins.invoker.its</groupId>
-  <artifactId>minvoker-142</artifactId>
-  <version>0.1-SNAPSHOT</version>
-  <packaging>pom</packaging>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-  
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-enforcer-plugin</artifactId>
-        <version>1.1.1</version>
-        <executions>
-          <execution>
-            <goals>
-              <goal>enforce</goal>
-            </goals>
-            <configuration>
-              <rules>
-                <AlwaysPass/>
-              </rules>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.plugins.invoker.its</groupId>
+  <artifactId>minvoker-142</artifactId>
+  <version>0.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+  
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+        <version>1.1.1</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>enforce</goal>
+            </goals>
+            <configuration>
+              <rules>
+                <AlwaysPass/>
+              </rules>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/it/special-characters-should-work/src/it/minvoker-test/verify.groovy b/src/it/special-characters-should-work/src/it/minvoker-test/verify.groovy
index 417a89e..b1367e9 100644
--- a/src/it/special-characters-should-work/src/it/minvoker-test/verify.groovy
+++ b/src/it/special-characters-should-work/src/it/minvoker-test/verify.groovy
@@ -1,20 +1,20 @@
-/*
- * 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.
- */
-File buildLog = new File( basedir, 'build.log' )
+/*
+ * 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.
+ */
+File buildLog = new File( basedir, 'build.log' )
 assert buildLog.text.contains( '[DEBUG] Executing rule: org.apache.maven.plugins.enforcer.AlwaysPass' )  
\ No newline at end of file
diff --git a/src/it/staging-dependencies/repo/org/apache/maven/its/dep/1.0/dep-1.0.pom b/src/it/staging-dependencies/repo/org/apache/maven/its/dep/1.0/dep-1.0.pom
index f14ec27..4c2eec8 100644
--- a/src/it/staging-dependencies/repo/org/apache/maven/its/dep/1.0/dep-1.0.pom
+++ b/src/it/staging-dependencies/repo/org/apache/maven/its/dep/1.0/dep-1.0.pom
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.apache.maven.its</groupId>
-  <artifactId>dep</artifactId>
-  <packaging>jar</packaging>
-  <version>1.0</version>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.its</groupId>
+  <artifactId>dep</artifactId>
+  <packaging>jar</packaging>
+  <version>1.0</version>
+</project>
diff --git a/src/it/staging-dependencies/repo/org/apache/maven/its/dep/2.0/dep-2.0.pom b/src/it/staging-dependencies/repo/org/apache/maven/its/dep/2.0/dep-2.0.pom
index f497901..db38d69 100644
--- a/src/it/staging-dependencies/repo/org/apache/maven/its/dep/2.0/dep-2.0.pom
+++ b/src/it/staging-dependencies/repo/org/apache/maven/its/dep/2.0/dep-2.0.pom
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.apache.maven.its</groupId>
-  <artifactId>dep</artifactId>
-  <packaging>jar</packaging>
-  <version>2.0</version>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.its</groupId>
+  <artifactId>dep</artifactId>
+  <packaging>jar</packaging>
+  <version>2.0</version>
+</project>
diff --git a/src/it/staging-dependencies/repo/org/apache/maven/its/minvoker-70/1.0-SNAPSHOT/minvoker-70-1.0-20081020.164906-1.pom b/src/it/staging-dependencies/repo/org/apache/maven/its/minvoker-70/1.0-SNAPSHOT/minvoker-70-1.0-20081020.164906-1.pom
index 61bbf6d..ad7c752 100644
--- a/src/it/staging-dependencies/repo/org/apache/maven/its/minvoker-70/1.0-SNAPSHOT/minvoker-70-1.0-20081020.164906-1.pom
+++ b/src/it/staging-dependencies/repo/org/apache/maven/its/minvoker-70/1.0-SNAPSHOT/minvoker-70-1.0-20081020.164906-1.pom
@@ -1,12 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.apache.maven.its</groupId>
-    <artifactId>parent-b</artifactId>
-    <version>0.1-SNAPSHOT</version>
-  </parent>
-    <artifactId>minvoker-70</artifactId>
-  <packaging>jar</packaging>
-  <version>1.0-SNAPSHOT</version>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.maven.its</groupId>
+    <artifactId>parent-b</artifactId>
+    <version>0.1-SNAPSHOT</version>
+  </parent>
+    <artifactId>minvoker-70</artifactId>
+  <packaging>jar</packaging>
+  <version>1.0-SNAPSHOT</version>
+</project>
diff --git a/src/it/staging-dependencies/repo/org/apache/maven/its/parent-a/0.1-SNAPSHOT/parent-a-0.1-20081020.164906-1.pom b/src/it/staging-dependencies/repo/org/apache/maven/its/parent-a/0.1-SNAPSHOT/parent-a-0.1-20081020.164906-1.pom
index c74bf4f..f1791e8 100644
--- a/src/it/staging-dependencies/repo/org/apache/maven/its/parent-a/0.1-SNAPSHOT/parent-a-0.1-20081020.164906-1.pom
+++ b/src/it/staging-dependencies/repo/org/apache/maven/its/parent-a/0.1-SNAPSHOT/parent-a-0.1-20081020.164906-1.pom
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.apache.maven.its</groupId>
-  <artifactId>parent-a</artifactId>
-  <packaging>pom</packaging>
-  <version>0.1-SNAPSHOT</version>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.its</groupId>
+  <artifactId>parent-a</artifactId>
+  <packaging>pom</packaging>
+  <version>0.1-SNAPSHOT</version>
+</project>
diff --git a/src/it/staging-dependencies/repo/org/apache/maven/its/parent-b/0.1-SNAPSHOT/parent-b-0.1-20081020.164906-1.pom b/src/it/staging-dependencies/repo/org/apache/maven/its/parent-b/0.1-SNAPSHOT/parent-b-0.1-20081020.164906-1.pom
index 78fd424..ffe806f 100644
--- a/src/it/staging-dependencies/repo/org/apache/maven/its/parent-b/0.1-SNAPSHOT/parent-b-0.1-20081020.164906-1.pom
+++ b/src/it/staging-dependencies/repo/org/apache/maven/its/parent-b/0.1-SNAPSHOT/parent-b-0.1-20081020.164906-1.pom
@@ -1,12 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.apache.maven.its</groupId>
-    <artifactId>parent-a</artifactId>
-    <version>0.1-SNAPSHOT</version>
-  </parent>
-    <artifactId>parent-b</artifactId>
-  <packaging>pom</packaging>
-  <version>0.1-SNAPSHOT</version>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.maven.its</groupId>
+    <artifactId>parent-a</artifactId>
+    <version>0.1-SNAPSHOT</version>
+  </parent>
+    <artifactId>parent-b</artifactId>
+  <packaging>pom</packaging>
+  <version>0.1-SNAPSHOT</version>
+</project>
diff --git a/src/it/staging-dependencies/repo/org/apache/maven/its/pom/0.3-SNAPSHOT/pom-0.3-20081020.164906-1.pom b/src/it/staging-dependencies/repo/org/apache/maven/its/pom/0.3-SNAPSHOT/pom-0.3-20081020.164906-1.pom
index 3404c35..b582ee6 100644
--- a/src/it/staging-dependencies/repo/org/apache/maven/its/pom/0.3-SNAPSHOT/pom-0.3-20081020.164906-1.pom
+++ b/src/it/staging-dependencies/repo/org/apache/maven/its/pom/0.3-SNAPSHOT/pom-0.3-20081020.164906-1.pom
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.apache.maven.its</groupId>
-  <artifactId>pom</artifactId>
-  <packaging>pom</packaging>
-  <version>0.3-SNAPSHOT</version>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.its</groupId>
+  <artifactId>pom</artifactId>
+  <packaging>pom</packaging>
+  <version>0.3-SNAPSHOT</version>
+</project>
diff --git a/src/it/wrongPropertyInterpolation/pom.xml b/src/it/wrongPropertyInterpolation/pom.xml
index 5371627..9450abd 100644
--- a/src/it/wrongPropertyInterpolation/pom.xml
+++ b/src/it/wrongPropertyInterpolation/pom.xml
@@ -1,63 +1,63 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>org.apache.maven.plugins.invoker.its</groupId>
-  <artifactId>maven-wrong-interpolation-test</artifactId>
-  <version>0.1-SNAPSHOT</version>
-  <name>Maven Property Interpolation Test</name>
-  <description>Maven Invoker tests for property interpolation</description>
-
-  <url>https://issues.apache.org/jira/browse/MINVOKER-194</url>
-  
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-invoker-plugin</artifactId>
-        <version>@project.version@</version>
-        <configuration>
-          <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
-          <postBuildHookScript>verify</postBuildHookScript>
-          <properties>
-            <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
-            <https.protocols>${https.protocols}</https.protocols>
-          </properties>
-        </configuration>
-        <executions>
-          <execution>
-            <goals>
-              <goal>install</goal>
-              <goal>run</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.plugins.invoker.its</groupId>
+  <artifactId>maven-wrong-interpolation-test</artifactId>
+  <version>0.1-SNAPSHOT</version>
+  <name>Maven Property Interpolation Test</name>
+  <description>Maven Invoker tests for property interpolation</description>
+
+  <url>https://issues.apache.org/jira/browse/MINVOKER-194</url>
+  
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-invoker-plugin</artifactId>
+        <version>@project.version@</version>
+        <configuration>
+          <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
+          <postBuildHookScript>verify</postBuildHookScript>
+          <properties>
+            <!-- e.g. ensure that Java7 picks up TLSv1.2 when connecting with Central -->
+            <https.protocols>${https.protocols}</https.protocols>
+          </properties>
+        </configuration>
+        <executions>
+          <execution>
+            <goals>
+              <goal>install</goal>
+              <goal>run</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/it/wrongPropertyInterpolation/src/it/project/invoker.properties b/src/it/wrongPropertyInterpolation/src/it/project/invoker.properties
index 276151b..2697e8a 100644
--- a/src/it/wrongPropertyInterpolation/src/it/project/invoker.properties
+++ b/src/it/wrongPropertyInterpolation/src/it/project/invoker.properties
@@ -1,19 +1,19 @@
-# 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.
-
-invoker.name=wrong property interpolation
-invoker.goals=org.apache.maven.plugins:maven-project-info-reports-plugin:2.8:summary help:effective-pom -Doutput=effective-pom.xml
+# 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.
+
+invoker.name=wrong property interpolation
+invoker.goals=org.apache.maven.plugins:maven-project-info-reports-plugin:2.8:summary help:effective-pom -Doutput=effective-pom.xml
diff --git a/src/it/wrongPropertyInterpolation/src/it/project/pom.xml b/src/it/wrongPropertyInterpolation/src/it/project/pom.xml
index 2cc24eb..9902483 100644
--- a/src/it/wrongPropertyInterpolation/src/it/project/pom.xml
+++ b/src/it/wrongPropertyInterpolation/src/it/project/pom.xml
@@ -1,54 +1,54 @@
-<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.apache.maven.invoker.its.it</groupId>
-  <artifactId>maven-prop-interpolation</artifactId>
-  <version>0.1-SNAPSHOT</version>
-  <packaging>jar</packaging>
-  <properties>
-    <maven.compiler.source>1.3</maven.compiler.source>
-    <maven.compiler.target>1.3</maven.compiler.target>
-    <!-- <maven.compiler.target>${maven.compiler.source}</maven.compiler.target> -->
-  </properties>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>com.soebes.maven.plugins</groupId>
-        <artifactId>echo-maven-plugin</artifactId>
-        <version>0.2</version>
-        <executions>
-          <execution>
-            <phase>package</phase>
-            <goals>
-              <goal>echo</goal>
-            </goals>
-          </execution>
-        </executions>
-        <configuration>
-          <echos>
-            <echo>maven.compiler.source: ${maven.compiler.source}</echo>
-            <echo>maven.compiler.target: ${maven.compiler.target}</echo>
-          </echos>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
+<?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://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.invoker.its.it</groupId>
+  <artifactId>maven-prop-interpolation</artifactId>
+  <version>0.1-SNAPSHOT</version>
+  <packaging>jar</packaging>
+  <properties>
+    <maven.compiler.source>1.3</maven.compiler.source>
+    <maven.compiler.target>1.3</maven.compiler.target>
+    <!-- <maven.compiler.target>${maven.compiler.source}</maven.compiler.target> -->
+  </properties>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>com.soebes.maven.plugins</groupId>
+        <artifactId>echo-maven-plugin</artifactId>
+        <version>0.2</version>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>echo</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <echos>
+            <echo>maven.compiler.source: ${maven.compiler.source}</echo>
+            <echo>maven.compiler.target: ${maven.compiler.target}</echo>
+          </echos>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/main/java/org/apache/maven/plugins/invoker/AbstractInvokerMojo.java b/src/main/java/org/apache/maven/plugins/invoker/AbstractInvokerMojo.java
index 8357948..455c53c 100644
--- a/src/main/java/org/apache/maven/plugins/invoker/AbstractInvokerMojo.java
+++ b/src/main/java/org/apache/maven/plugins/invoker/AbstractInvokerMojo.java
@@ -1,2919 +1,2919 @@
-package org.apache.maven.plugins.invoker;
-
-/*
- * 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.
- */
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.execution.MavenSession;
-import org.apache.maven.model.Model;
-import org.apache.maven.model.Profile;
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecution;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.plugins.annotations.Component;
-import org.apache.maven.plugins.annotations.Parameter;
-import org.apache.maven.plugins.invoker.model.BuildJob;
-import org.apache.maven.plugins.invoker.model.io.xpp3.BuildJobXpp3Writer;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.settings.Settings;
-import org.apache.maven.settings.SettingsUtils;
-import org.apache.maven.settings.TrackableBase;
-import org.apache.maven.settings.building.DefaultSettingsBuildingRequest;
-import org.apache.maven.settings.building.SettingsBuilder;
-import org.apache.maven.settings.building.SettingsBuildingException;
-import org.apache.maven.settings.building.SettingsBuildingRequest;
-import org.apache.maven.settings.io.xpp3.SettingsXpp3Writer;
-import org.apache.maven.shared.invoker.CommandLineConfigurationException;
-import org.apache.maven.shared.invoker.DefaultInvocationRequest;
-import org.apache.maven.shared.invoker.InvocationRequest;
-import org.apache.maven.shared.invoker.InvocationResult;
-import org.apache.maven.shared.invoker.Invoker;
-import org.apache.maven.shared.invoker.MavenCommandLineBuilder;
-import org.apache.maven.shared.invoker.MavenInvocationException;
-import org.apache.maven.shared.scriptinterpreter.ScriptException;
-import org.apache.maven.shared.scriptinterpreter.ScriptReturnException;
-import org.apache.maven.shared.scriptinterpreter.ScriptRunner;
-import org.apache.maven.shared.utils.logging.MessageBuilder;
-import org.apache.maven.toolchain.MisconfiguredToolchainException;
-import org.apache.maven.toolchain.ToolchainManagerPrivate;
-import org.apache.maven.toolchain.ToolchainPrivate;
-import org.codehaus.plexus.interpolation.InterpolationException;
-import org.codehaus.plexus.interpolation.Interpolator;
-import org.codehaus.plexus.interpolation.MapBasedValueSource;
-import org.codehaus.plexus.interpolation.RegexBasedInterpolator;
-import org.codehaus.plexus.util.DirectoryScanner;
-import org.codehaus.plexus.util.FileUtils;
-import org.codehaus.plexus.util.IOUtil;
-import org.codehaus.plexus.util.InterpolationFilterReader;
-import org.codehaus.plexus.util.ReaderFactory;
-import org.codehaus.plexus.util.ReflectionUtils;
-import org.codehaus.plexus.util.StringUtils;
-import org.codehaus.plexus.util.WriterFactory;
-import org.codehaus.plexus.util.cli.CommandLineException;
-import org.codehaus.plexus.util.cli.CommandLineUtils;
-import org.codehaus.plexus.util.cli.Commandline;
-import org.codehaus.plexus.util.cli.StreamConsumer;
-import org.codehaus.plexus.util.xml.Xpp3Dom;
-import org.codehaus.plexus.util.xml.Xpp3DomWriter;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStreamWriter;
-import java.io.Reader;
-import java.io.Writer;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.text.DecimalFormat;
-import java.text.DecimalFormatSymbols;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Properties;
-import java.util.Set;
-import java.util.StringTokenizer;
-import java.util.TreeSet;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.TimeUnit;
-
-import static org.apache.maven.shared.utils.logging.MessageUtils.buffer;
-
-/**
- * Provides common code for mojos invoking sub builds.
- *
- * @author Stephen Connolly
- * @since 15-Aug-2009 09:09:29
- */
-public abstract class AbstractInvokerMojo
-    extends AbstractMojo
-{
-    /**
-     * The zero-based column index where to print the invoker result.
-     */
-    private static final int RESULT_COLUMN = 60;
-
-    /**
-     * Flag used to suppress certain invocations. This is useful in tailoring the build using profiles.
-     *
-     * @since 1.1
-     */
-    @Parameter( property = "invoker.skip", defaultValue = "false" )
-    private boolean skipInvocation;
-
-    /**
-     * Flag used to suppress the summary output notifying of successes and failures. If set to <code>true</code>, the
-     * only indication of the build's success or failure will be the effect it has on the main build (if it fails, the
-     * main build should fail as well). If {@link #streamLogs} is enabled, the sub-build summary will also provide an
-     * indication.
-     */
-    @Parameter( defaultValue = "false" )
-    protected boolean suppressSummaries;
-
-    /**
-     * Flag used to determine whether the build logs should be output to the normal mojo log.
-     */
-    @Parameter( property = "invoker.streamLogs", defaultValue = "false" )
-    private boolean streamLogs;
-
-    /**
-     * The local repository for caching artifacts. It is strongly recommended to specify a path to an isolated
-     * repository like <code>${project.build.directory}/it-repo</code>. Otherwise, your ordinary local repository will
-     * be used, potentially soiling it with broken artifacts.
-     */
-    @Parameter( property = "invoker.localRepositoryPath", defaultValue = "${settings.localRepository}" )
-    private File localRepositoryPath;
-
-    /**
-     * Directory to search for integration tests.
-     */
-    @Parameter( property = "invoker.projectsDirectory", defaultValue = "${basedir}/src/it/" )
-    private File projectsDirectory;
-
-    /**
-     * Base directory where all build reports are written to. Every execution of an integration test will produce an XML
-     * file which contains the information about success or failure of that particular build job. The format of the
-     * resulting XML file is documented in the given <a href="./build-job.html">build-job</a> reference.
-     *
-     * @since 1.4
-     */
-    @Parameter( property = "invoker.reportsDirectory", defaultValue = "${project.build.directory}/invoker-reports" )
-    private File reportsDirectory;
-
-    /**
-     * A flag to disable the generation of build reports.
-     *
-     * @since 1.4
-     */
-    @Parameter( property = "invoker.disableReports", defaultValue = "false" )
-    private boolean disableReports;
-
-    /**
-     * Directory to which projects should be cloned prior to execution. If set to {@code null}, each integration test 
-     * will be run in the directory in which the corresponding IT POM was found. In this case, you most likely want to
-     * configure your SCM to ignore <code>target</code> and <code>build.log</code> in the test's base directory.
-     * (<b>Exception</b> when project using invoker plugin is of <i>maven-plugin</i> packaging:
-     * In such case IT projects will be cloned to and executed in <code>target/its</code> by default.)
-     *
-     * @since 1.1
-     */
-    @Parameter( property = "invoker.cloneProjectsTo" )
-    private File cloneProjectsTo;
-
-    // CHECKSTYLE_OFF: LineLength
-    /**
-     * Some files are normally excluded when copying the IT projects from the directory specified by the parameter
-     * projectsDirectory to the directory given by cloneProjectsTo (e.g. <code>.svn</code>, <code>CVS</code>,
-     * <code>*~</code>, etc: see <a href=
-     * "https://codehaus-plexus.github.io/plexus-utils/apidocs/org/codehaus/plexus/util/AbstractScanner.html#DEFAULTEXCLUDES">
-     * reference</a> for full list). Setting this parameter to <code>true</code> will cause all files to be copied to
-     * the <code>cloneProjectsTo</code> directory.
-     *
-     * @since 1.2
-     */
-    @Parameter( defaultValue = "false" )
-    private boolean cloneAllFiles;
-    // CHECKSTYLE_ON: LineLength
-
-    /**
-     * Ensure the {@link #cloneProjectsTo} directory is not polluted with files from earlier invoker runs.
-     *
-     * @since 1.6
-     */
-    @Parameter( defaultValue = "true" )
-    private boolean cloneClean;
-
-    /**
-     * A single POM to build, skipping any scanning parameters and behavior.
-     */
-    @Parameter( property = "invoker.pom" )
-    private File pom;
-
-    /**
-     * Include patterns for searching the integration test directory for projects. This parameter is meant to be set
-     * from the POM. If this parameter is not set, the plugin will search for all <code>pom.xml</code> files one
-     * directory below {@link #projectsDirectory} (i.e. <code>*&#47;pom.xml</code>).<br>
-     * <br>
-     * Starting with version 1.3, mere directories can also be matched by these patterns. For example, the include
-     * pattern <code>*</code> will run Maven builds on all immediate sub directories of {@link #projectsDirectory},
-     * regardless if they contain a <code>pom.xml</code>. This allows to perform builds that need/should not depend on
-     * the existence of a POM.
-     */
-    @Parameter
-    private List<String> pomIncludes = Collections.singletonList( "*/pom.xml" );
-
-    /**
-     * Exclude patterns for searching the integration test directory. This parameter is meant to be set from the POM. By
-     * default, no POM files are excluded. For the convenience of using an include pattern like <code>*</code>, the
-     * custom settings file specified by the parameter {@link #settingsFile} will always be excluded automatically.
-     */
-    @Parameter
-    private List<String> pomExcludes = Collections.emptyList();
-
-    /**
-     * Include patterns for searching the projects directory for projects that need to be run before the other projects.
-     * This parameter allows to declare projects that perform setup tasks like installing utility artifacts into the
-     * local repository. Projects matched by these patterns are implicitly excluded from the scan for ordinary projects.
-     * Also, the exclusions defined by the parameter {@link #pomExcludes} apply to the setup projects, too. Default
-     * value is: <code>setup*&#47;pom.xml</code>.
-     *
-     * @since 1.3
-     */
-    @Parameter
-    private List<String> setupIncludes = Collections.singletonList( "setup*/pom.xml" );
-
-    /**
-     * The list of goals to execute on each project. Default value is: <code>package</code>.
-     */
-    @Parameter
-    private List<String> goals = Collections.singletonList( "package" );
-
-    /**
-     */
-    @Component
-    private Invoker invoker;
-
-    @Component
-    private SettingsBuilder settingsBuilder;
-    
-    @Component
-    private ToolchainManagerPrivate toolchainManagerPrivate;
-
-    /**
-     * Relative path of a selector script to run prior in order to decide if the build should be executed. This script
-     * may be written with either BeanShell or Groovy. If the file extension is omitted (e.g. <code>selector</code>),
-     * the plugin searches for the file by trying out the well-known extensions <code>.bsh</code> and
-     * <code>.groovy</code>. If this script exists for a particular project but returns any non-null value different
-     * from <code>true</code>, the corresponding build is flagged as skipped. In this case, none of the pre-build hook
-     * script, Maven nor the post-build hook script will be invoked. If this script throws an exception, the
-     * corresponding build is flagged as in error, and none of the pre-build hook script, Maven not the post-build hook
-     * script will be invoked.
-     *
-     * @since 1.5
-     */
-    @Parameter( property = "invoker.selectorScript", defaultValue = "selector" )
-    private String selectorScript;
-
-    /**
-     * Relative path of a pre-build hook script to run prior to executing the build. This script may be written with
-     * either BeanShell or Groovy (since 1.3). If the file extension is omitted (e.g. <code>prebuild</code>), the plugin
-     * searches for the file by trying out the well-known extensions <code>.bsh</code> and <code>.groovy</code>. If this
-     * script exists for a particular project but returns any non-null value different from <code>true</code> or throws
-     * an exception, the corresponding build is flagged as a failure. In this case, neither Maven nor the post-build
-     * hook script will be invoked.
-     */
-    @Parameter( property = "invoker.preBuildHookScript", defaultValue = "prebuild" )
-    private String preBuildHookScript;
-
-    /**
-     * Relative path of a cleanup/verification hook script to run after executing the build. This script may be written
-     * with either BeanShell or Groovy (since 1.3). If the file extension is omitted (e.g. <code>verify</code>), the
-     * plugin searches for the file by trying out the well-known extensions <code>.bsh</code> and <code>.groovy</code>.
-     * If this script exists for a particular project but returns any non-null value different from <code>true</code> or
-     * throws an exception, the corresponding build is flagged as a failure.
-     */
-    @Parameter( property = "invoker.postBuildHookScript", defaultValue = "postbuild" )
-    private String postBuildHookScript;
-
-    /**
-     * Location of a properties file that defines CLI properties for the test.
-     */
-    @Parameter( property = "invoker.testPropertiesFile", defaultValue = "test.properties" )
-    private String testPropertiesFile;
-
-    /**
-     * Common set of properties to pass in on each project's command line, via -D parameters.
-     *
-     * @since 1.1
-     */
-    @Parameter
-    private Map<String, String> properties;
-
-    /**
-     * Whether to show errors in the build output.
-     */
-    @Parameter( property = "invoker.showErrors", defaultValue = "false" )
-    private boolean showErrors;
-
-    /**
-     * Whether to show debug statements in the build output.
-     */
-    @Parameter( property = "invoker.debug", defaultValue = "false" )
-    private boolean debug;
-
-    /**
-     * Suppress logging to the <code>build.log</code> file.
-     */
-    @Parameter( property = "invoker.noLog", defaultValue = "false" )
-    private boolean noLog;
-    
-    /**
-     * By default a {@code build.log} is created in the root of the project. By setting this folder 
-     * files are written to a different folder, respecting the structure of the projectsDirectory. 
-     * 
-     * @since 3.2.0
-     */
-    @Parameter
-    private File logDirectory;
-
-    /**
-     * List of profile identifiers to explicitly trigger in the build.
-     *
-     * @since 1.1
-     */
-    @Parameter
-    private List<String> profiles;
-
-    /**
-     * A list of additional properties which will be used to filter tokens in POMs and goal files.
-     *
-     * @since 1.3
-     */
-    @Parameter
-    private Map<String, String> filterProperties;
-
-    /**
-     * The Maven Project Object
-     *
-     * @since 1.1
-     */
-    @Parameter( defaultValue = "${project}", readonly = true, required = true )
-    private MavenProject project;
-
-    @Parameter( defaultValue = "${session}", readonly = true, required = true )
-    private MavenSession session;
-
-    @Parameter( defaultValue = "${mojoExecution}", readonly = true, required = true )
-    private MojoExecution mojoExecution;
-
-    /**
-     * A comma separated list of projectname patterns to run. Specify this parameter to run individual tests by file
-     * name, overriding the {@link #setupIncludes}, {@link #pomIncludes} and {@link #pomExcludes} parameters. Each
-     * pattern you specify here will be used to create an include/exclude pattern formatted like
-     * <code>${projectsDirectory}/<i>pattern</i></code>. To exclude a test, prefix the pattern with a '<code>!</code>'.
-     * So you can just type <nobr><code>-Dinvoker.test=SimpleTest,Comp*Test,!Compare*</code></nobr> to run builds in
-     * <code>${projectsDirectory}/SimpleTest</code> and <code>${projectsDirectory}/ComplexTest</code>, but not
-     * <code>${projectsDirectory}/CompareTest</code>
-     *
-     * @since 1.1 (exclusion since 1.8)
-     */
-    @Parameter( property = "invoker.test" )
-    private String invokerTest;
-
-    /**
-     * Path to an alternate <code>settings.xml</code> to use for Maven invocation with all ITs. Note that the
-     * <code>&lt;localRepository&gt;</code> element of this settings file is always ignored, i.e. the path given by the
-     * parameter {@link #localRepositoryPath} is dominant.
-     *
-     * @since 1.2
-     */
-    @Parameter( property = "invoker.settingsFile" )
-    private File settingsFile;
-
-    /**
-     * The <code>MAVEN_OPTS</code> environment variable to use when invoking Maven. This value can be overridden for
-     * individual integration tests by using {@link #invokerPropertiesFile}.
-     *
-     * @since 1.2
-     */
-    @Parameter( property = "invoker.mavenOpts" )
-    private String mavenOpts;
-
-    /**
-     * The home directory of the Maven installation to use for the forked builds. Defaults to the current Maven
-     * installation.
-     *
-     * @since 1.3
-     */
-    @Parameter( property = "invoker.mavenHome" )
-    private File mavenHome;
-
-    /**
-     * mavenExecutable can either be a file relative to <code>${maven.home}/bin/</code> or an absolute file.
-     *
-     * @since 1.8
-     * @see Invoker#setMavenExecutable(File)
-     */
-    @Parameter( property = "invoker.mavenExecutable" )
-    private String mavenExecutable;
-
-    /**
-     * The <code>JAVA_HOME</code> environment variable to use for forked Maven invocations. Defaults to the current Java
-     * home directory.
-     *
-     * @since 1.3
-     */
-    @Parameter( property = "invoker.javaHome" )
-    private File javaHome;
-
-    /**
-     * The file encoding for the pre-/post-build scripts and the list files for goals and profiles.
-     *
-     * @since 1.2
-     */
-    @Parameter( property = "encoding", defaultValue = "${project.build.sourceEncoding}" )
-    private String encoding;
-
-    /**
-     * The current user system settings for use in Maven.
-     *
-     * @since 1.2
-     */
-    @Parameter( defaultValue = "${settings}", readonly = true, required = true )
-    private Settings settings;
-
-    /**
-     * A flag whether the test class path of the project under test should be included in the class path of the
-     * pre-/post-build scripts. If set to <code>false</code>, the class path of script interpreter consists only of the
-     * <a href="dependencies.html">runtime dependencies</a> of the Maven Invoker Plugin. If set the <code>true</code>,
-     * the project's test class path will be prepended to the interpreter class path. Among others, this feature allows
-     * the scripts to access utility classes from the test sources of your project.
-     *
-     * @since 1.2
-     */
-    @Parameter( property = "invoker.addTestClassPath", defaultValue = "false" )
-    private boolean addTestClassPath;
-
-    /**
-     * The test class path of the project under test.
-     */
-    @Parameter( defaultValue = "${project.testClasspathElements}", readonly = true )
-    private List<String> testClassPath;
-
-    /**
-     * The name of an optional project-specific file that contains properties used to specify settings for an individual
-     * Maven invocation. Any property present in the file will override the corresponding setting from the plugin
-     * configuration. The values of the properties are filtered and may use expressions like
-     * <code>${project.version}</code> to reference project properties or values from the parameter
-     * {@link #filterProperties}.<p/>
-     * 
-     * <p>
-     * As of 3.2.0 it is possible to put this folder in any of the ancestor folders, where properties will be inherited.
-     * This way you can provide a single properties file for a group of projects
-     * </p>
-     *
-     * The snippet below describes the supported properties:
-     * <pre>
-     * # A comma or space separated list of goals/phases to execute, may
-     * # specify an empty list to execute the default goal of the IT project.
-     * # Environment variables used by maven plugins can be added here
-     * invoker.goals = clean install -Dplugin.variable=value
-     *
-     * # Or you can give things like this if you need.
-     * invoker.goals = -T2 clean verify
-     *
-     * # Optionally, a list of goals to run during further invocations of Maven
-     * invoker.goals.2 = ${project.groupId}:${project.artifactId}:${project.version}:run
-     *
-     * # A comma or space separated list of profiles to activate
-     * invoker.profiles = its,jdk15
-     *
-     * # The path to an alternative POM or base directory to invoke Maven on, defaults to the
-     * # project that was originally specified in the plugin configuration
-     * # Since plugin version 1.4
-     * invoker.project = sub-module
-     *
-     * # The value for the environment variable MAVEN_OPTS
-     * invoker.mavenOpts = -Dfile.encoding=UTF-16 -Xms32m -Xmx256m
-     *
-     * # Possible values are &quot;fail-fast&quot; (default), &quot;fail-at-end&quot; and &quot;fail-never&quot;
-     * invoker.failureBehavior = fail-never
-     *
-     * # The expected result of the build, possible values are &quot;success&quot; (default) and &quot;failure&quot;
-     * invoker.buildResult = failure
-     *
-     * # A boolean value controlling the aggregator mode of Maven, defaults to &quot;false&quot;
-     * invoker.nonRecursive = true
-     *
-     * # A boolean value controlling the network behavior of Maven, defaults to &quot;false&quot;
-     * # Since plugin version 1.4
-     * invoker.offline = true
-     *
-     * # The path to the properties file from which to load system properties, defaults to the
-     * # filename given by the plugin parameter testPropertiesFile
-     * # Since plugin version 1.4
-     * invoker.systemPropertiesFile = test.properties
-     *
-     * # An optional human friendly name for this build job to be included in the build reports.
-     * # Since plugin version 1.4
-     * invoker.name = Test Build 01
-     *
-     * # An optional description for this build job to be included in the build reports.
-     * # Since plugin version 1.4
-     * invoker.description = Checks the support for build reports.
-     *
-     * # A comma separated list of JRE versions on which this build job should be run.
-     * # Since plugin version 1.4
-     * invoker.java.version = 1.4+, !1.4.1, 1.7-
-     * 
-     * # A comma separated list of OS families on which this build job should be run.
-     * # Since plugin version 1.4
-     * invoker.os.family = !windows, unix, mac
-     *
-     * # A comma separated list of Maven versions on which this build should be run.
-     * # Since plugin version 1.5
-     * invoker.maven.version = 2.0.10+, !2.1.0, !2.2.0
-     * 
-     * # A mapping for toolchain to ensure it exists
-     * # Since plugin version 3.2.0
-     * invoker.toolchain.&lt;type&gt;.&lt;provides&gt; = value
-     * invoker.toolchain.jdk.version = 11
-     * 
-     * # For java.version, maven.version, os.family and toolchain it is possible to define multiple selectors.
-     * # If one of the indexed selectors matches, the test is executed.
-     * # With the invoker.x.y equivalents you can specify global matchers.  
-     * selector.1.java.version = 1.8+
-     * selector.1.maven.version = 3.2.5+
-     * selector.1.os.family = !windows
-     * selector.2.maven.version = 3.0+
-     * selector.3.java.version = 9+
-     * 
-     * # A boolean value controlling the debug logging level of Maven, , defaults to &quot;false&quot;
-     * # Since plugin version 1.8
-     * invoker.debug = true
-     * 
-     * # Path to an alternate settings.xml to use for Maven invocation with this IT.
-     * # Since plugin version 3.0.1
-     * invoker.settingsFile = ../
-     *
-     * # An integer value to control run order of projects. sorted in the descending order of the ordinal.
-     * # In other words, the BuildJobs with the highest numbers will be executed first
-     * # Since plugin version 3.2.1
-     * invoker.ordinal = 3
-     * invoker.ordinal = 1
-     *
-     * # The additional value for the environment variable.
-     * # Since plugin version 3.2.2
-     * invoker.environmentVariables.&lt;variableName&gt; = variableValue
-     * invoker.environmentVariables.MY_ENV_NAME = myEnvValue
-     *
-     * </pre>
-     *
-     * @since 1.2
-     */
-    @Parameter( property = "invoker.invokerPropertiesFile", defaultValue = "invoker.properties" )
-    private String invokerPropertiesFile;
-
-    /**
-     * flag to enable show mvn version used for running its (cli option : -V,--show-version )
-     *
-     * @since 1.4
-     */
-    @Parameter( property = "invoker.showVersion", defaultValue = "false" )
-    private boolean showVersion;
-
-    /**
-     * <p>Number of threads for running tests in parallel. This will be the number of maven forked process in parallel.
-     * When terminated with "C", the number part is multiplied by the number of processors (cores) available
-     * to the Java virtual machine. Floating point value are only accepted together with "C".</p>
-     *
-     * <p>Example values: "1.5C", "4"</p>
-     *
-     * @since 1.6
-     */
-    @Parameter( property = "invoker.parallelThreads", defaultValue = "1" )
-    private String parallelThreads;
-
-    /**
-     * @since 1.6
-     */
-    @Parameter( property = "plugin.artifacts", required = true, readonly = true )
-    private List<Artifact> pluginArtifacts;
-
-    /**
-     * If enable and if you have a settings file configured for the execution, it will be merged with your user
-     * settings.
-     *
-     * @since 1.6
-     */
-    @Parameter( property = "invoker.mergeUserSettings", defaultValue = "false" )
-    private boolean mergeUserSettings;
-
-    /**
-     * Additional environment variables to set on the command line.
-     *
-     * @since 1.8
-     */
-    @Parameter
-    private Map<String, String> environmentVariables;
-
-    /**
-     * Additional variables for use in the hook scripts.
-     *
-     * @since 1.9
-     */
-    @Parameter
-    private Map<String, String> scriptVariables;
-
-    /**
-     *
-     * @since 3.0.2
-     */
-    @Parameter( defaultValue = "0", property = "invoker.timeoutInSeconds" )
-    private int timeoutInSeconds;
-
-    /**
-     * Write test result in junit format.
-     * @since 3.1.2
-     */
-    @Parameter( defaultValue = "false", property = "invoker.writeJunitReport" )
-    private boolean writeJunitReport;
-
-    /**
-     * The package name use in junit report
-     * @since 3.1.2
-     */
-    @Parameter( defaultValue = "maven.invoker.it", property = "invoker.junitPackageName" )
-    private String junitPackageName = "maven.invoker.it";
-
-    /**
-     * Only invoke maven projects if their sources have been modified since
-     * they were last built. Only works in conjunction with <code>cloneProjectsTo</code>.
-
-     * @since 3.2.2
-     */
-    @Parameter( defaultValue = "false", property = "invoker.updateOnly" )
-    private boolean updateOnly = false;
-
-    /**
-     * The scripter runner that is responsible to execute hook scripts.
-     */
-    private ScriptRunner scriptRunner;
-
-    /**
-     * A string used to prefix the file name of the filtered POMs in case the POMs couldn't be filtered in-place (i.e.
-     * the projects were not cloned to a temporary directory), can be <code>null</code>. This will be set to
-     * <code>null</code> if the POMs have already been filtered during cloning.
-     */
-    private String filteredPomPrefix = "interpolated-";
-
-    /**
-     * The format for elapsed build time.
-     */
-    private final DecimalFormat secFormat = new DecimalFormat( "(0.0 s)", new DecimalFormatSymbols( Locale.ENGLISH ) );
-
-    /**
-     * The version of Maven which is used to run the builds
-     */
-    private String actualMavenVersion;
-
-    /**
-     * Invokes Maven on the configured test projects.
-     *
-     * @throws org.apache.maven.plugin.MojoExecutionException If the goal encountered severe errors.
-     * @throws org.apache.maven.plugin.MojoFailureException If any of the Maven builds failed.
-     */
-    public void execute()
-        throws MojoExecutionException, MojoFailureException
-    {
-        if ( skipInvocation )
-        {
-            getLog().info( "Skipping invocation per configuration."
-                + " If this is incorrect, ensure the skipInvocation parameter is not set to true." );
-            return;
-        }
-
-        if ( StringUtils.isEmpty( encoding ) )
-        {
-            getLog().warn( "File encoding has not been set, using platform encoding " + ReaderFactory.FILE_ENCODING
-                + ", i.e. build is platform dependent!" );
-        }
-
-        // done it here to prevent issues with concurrent access in case of parallel run
-        if ( !disableReports )
-        {
-            setupReportsFolder();
-        }
-
-        List<BuildJob> buildJobs;
-        if ( pom == null )
-        {
-            try
-            {
-                buildJobs = getBuildJobs();
-            }
-            catch ( final IOException e )
-            {
-                throw new MojoExecutionException( "Error retrieving POM list from includes, "
-                    + "excludes, and projects directory. Reason: " + e.getMessage(), e );
-            }
-        }
-        else
-        {
-            try
-            {
-                projectsDirectory = pom.getCanonicalFile().getParentFile();
-            }
-            catch ( IOException e )
-            {
-                throw new MojoExecutionException( "Failed to discover projectsDirectory from "
-                    + "pom File parameter. Reason: " + e.getMessage(), e );
-            }
-
-            buildJobs = Collections.singletonList( new BuildJob( pom.getName(), BuildJob.Type.NORMAL ) );
-        }
-
-        if ( buildJobs.isEmpty() )
-        {
-            doFailIfNoProjects();
-
-            getLog().info( "No projects were selected for execution." );
-            return;
-        }
-
-        handleScriptRunnerWithScriptClassPath();
-
-        Collection<String> collectedProjects = new LinkedHashSet<>();
-        for ( BuildJob buildJob : buildJobs )
-        {
-            collectProjects( projectsDirectory, buildJob.getProject(), collectedProjects, true );
-        }
-
-        File projectsDir = projectsDirectory;
-
-        if ( cloneProjectsTo == null && "maven-plugin".equals( project.getPackaging() ) )
-        {
-            cloneProjectsTo = new File( project.getBuild().getDirectory(), "its" );
-        }
-
-        if ( updateOnly )
-        {
-            if ( cloneProjectsTo == null )
-            {
-                getLog().warn( "updateOnly functionality is not supported without cloning the projects" );
-            }
-            else if ( lastModifiedRecursive( projectsDirectory ) <= lastModifiedRecursive( cloneProjectsTo ) )
-            {
-                getLog().debug( "Skipping invocation as cloned projects are up-to-date "
-                        + "and updateOnly parameter is set to true." );
-                return;
-            }
-            else
-            {
-                getLog().debug( "Cloned projects are out of date" );
-            }
-        }
-
-        if ( cloneProjectsTo != null )
-        {
-            cloneProjects( collectedProjects );
-            projectsDir = cloneProjectsTo;
-        }
-        else
-        {
-            getLog().warn( "Filtering of parent/child POMs is not supported without cloning the projects" );
-        }
-
-        // First run setup jobs.
-        List<BuildJob> setupBuildJobs = null;
-        try
-        {
-            setupBuildJobs = getSetupBuildJobsFromFolders();
-        }
-        catch ( IOException e )
-        {
-            getLog().error( "Failure during scanning of folders.", e );
-            // TODO: Check shouldn't we fail in case of problems?
-        }
-
-        if ( !setupBuildJobs.isEmpty() )
-        {
-            // Run setup jobs in single thread
-            // mode.
-            //
-            // Some Idea about ordering?
-            getLog().info( "Running " + setupBuildJobs.size() + " setup job"
-                + ( ( setupBuildJobs.size() < 2 ) ? "" : "s" ) + ":" );
-            runBuilds( projectsDir, setupBuildJobs, 1 );
-            getLog().info( "Setup done." );
-        }
-
-        // Afterwards run all other jobs.
-        List<BuildJob> nonSetupBuildJobs = getNonSetupJobs( buildJobs );
-        // We will run the non setup jobs with the configured
-        // parallelThreads number.
-        runBuilds( projectsDir, nonSetupBuildJobs, getParallelThreadsCount() );
-
-        writeSummaryFile( nonSetupBuildJobs );
-
-        processResults( new InvokerSession( nonSetupBuildJobs ) );
-
-    }
-
-    /**
-     * Find the latest lastModified recursively within a directory structure.
-     *
-     * @param file the root file to check.
-     * @return the latest lastModified time found.
-     */
-    private long lastModifiedRecursive( File file )
-    {
-        long lastModified = file.lastModified();
-
-        final File[] entries = file.listFiles();
-
-        if ( entries != null )
-        {
-            for ( File entry : entries )
-            {
-                lastModified = Math.max( lastModified, lastModifiedRecursive( entry ) );
-            }
-        }
-
-        return lastModified;
-    }
-
-    /**
-     * This will create the necessary folders for the reports.
-     * 
-     * @throws MojoExecutionException in case of failure during creation of the reports folder.
-     */
-    private void setupReportsFolder()
-        throws MojoExecutionException
-    {
-        // If it exists from previous run...
-        if ( reportsDirectory.exists() )
-        {
-            try
-            {
-                FileUtils.deleteDirectory( reportsDirectory );
-            }
-            catch ( IOException e )
-            {
-                throw new MojoExecutionException( "Failure while trying to delete "
-                    + reportsDirectory.getAbsolutePath(), e );
-            }
-        }
-        if ( !reportsDirectory.mkdirs() )
-        {
-            throw new MojoExecutionException( "Failure while creating the " + reportsDirectory.getAbsolutePath() );
-        }
-    }
-
-    private List<BuildJob> getNonSetupJobs( List<BuildJob> buildJobs )
-    {
-        List<BuildJob> result = new LinkedList<>();
-        for ( BuildJob buildJob : buildJobs )
-        {
-            if ( !buildJob.getType().equals( BuildJob.Type.SETUP ) )
-            {
-                result.add( buildJob );
-            }
-        }
-        return result;
-    }
-
-    private void handleScriptRunnerWithScriptClassPath()
-    {
-        final List<String> scriptClassPath;
-        if ( addTestClassPath )
-        {
-            scriptClassPath = new ArrayList<>( testClassPath );
-            for ( Artifact pluginArtifact : pluginArtifacts )
-            {
-                scriptClassPath.remove( pluginArtifact.getFile().getAbsolutePath() );
-            }
-        }
-        else
-        {
-            scriptClassPath = null;
-        }
-        scriptRunner = new ScriptRunner( );
-        scriptRunner.setScriptEncoding( encoding );
-        scriptRunner.setGlobalVariable( "localRepositoryPath", localRepositoryPath );
-        if ( scriptVariables != null )
-        {
-            for ( Entry<String, String> entry : scriptVariables.entrySet() )
-            {
-                scriptRunner.setGlobalVariable( entry.getKey(), entry.getValue() );
-            }
-        }
-        scriptRunner.setClassPath( scriptClassPath );
-    }
-
-    private void writeSummaryFile( List<BuildJob> buildJobs )
-        throws MojoExecutionException
-    {
-
-        File summaryReportFile = new File( reportsDirectory, "invoker-summary.txt" );
-
-        try ( Writer writer = new BufferedWriter( new FileWriter( summaryReportFile ) ) )
-        {
-            for ( BuildJob buildJob : buildJobs )
-            {
-                if ( !buildJob.getResult().equals( BuildJob.Result.SUCCESS ) )
-                {
-                    writer.append( buildJob.getResult() );
-                    writer.append( " [" );
-                    writer.append( buildJob.getProject() );
-                    writer.append( "] " );
-                    if ( buildJob.getFailureMessage() != null )
-                    {
-                        writer.append( " " );
-                        writer.append( buildJob.getFailureMessage() );
-                    }
-                    writer.append( "\n" );
-                }
-            }
-        }
-        catch ( IOException e )
-        {
-            throw new MojoExecutionException( "Failed to write summary report " + summaryReportFile, e );
-        }
-    }
-
-    protected void doFailIfNoProjects()
-        throws MojoFailureException
-    {
-        // should only be used during run and verify
-    }
-
-    /**
-     * Processes the results of invoking the build jobs.
-     *
-     * @param invokerSession The session with the build jobs, must not be <code>null</code>.
-     * @throws MojoFailureException If the mojo had failed as a result of invoking the build jobs.
-     * @since 1.4
-     */
-    abstract void processResults( InvokerSession invokerSession )
-        throws MojoFailureException;
-
-    /**
-     * Creates a new reader for the specified file, using the plugin's {@link #encoding} parameter.
-     *
-     * @param file The file to create a reader for, must not be <code>null</code>.
-     * @return The reader for the file, never <code>null</code>.
-     * @throws java.io.IOException If the specified file was not found or the configured encoding is not supported.
-     */
-    private Reader newReader( File file )
-        throws IOException
-    {
-        if ( StringUtils.isNotEmpty( encoding ) )
-        {
-            return ReaderFactory.newReader( file, encoding );
-        }
-        else
-        {
-            return ReaderFactory.newPlatformReader( file );
-        }
-    }
-
-    /**
-     * Collects all projects locally reachable from the specified project. The method will as such try to read the POM
-     * and recursively follow its parent/module elements.
-     *
-     * @param projectsDir The base directory of all projects, must not be <code>null</code>.
-     * @param projectPath The relative path of the current project, can denote either the POM or its base directory,
-     *            must not be <code>null</code>.
-     * @param projectPaths The set of already collected projects to add new projects to, must not be <code>null</code>.
-     *            This set will hold the relative paths to either a POM file or a project base directory.
-     * @param included A flag indicating whether the specified project has been explicitly included via the parameter
-     *            {@link #pomIncludes}. Such projects will always be added to the result set even if there is no
-     *            corresponding POM.
-     * @throws org.apache.maven.plugin.MojoExecutionException If the project tree could not be traversed.
-     */
-    private void collectProjects( File projectsDir, String projectPath, Collection<String> projectPaths,
-                                  boolean included )
-        throws MojoExecutionException
-    {
-        projectPath = projectPath.replace( '\\', '/' );
-        File pomFile = new File( projectsDir, projectPath );
-        if ( pomFile.isDirectory() )
-        {
-            pomFile = new File( pomFile, "pom.xml" );
-            if ( !pomFile.exists() )
-            {
-                if ( included )
-                {
-                    projectPaths.add( projectPath );
-                }
-                return;
-            }
-            if ( !projectPath.endsWith( "/" ) )
-            {
-                projectPath += '/';
-            }
-            projectPath += "pom.xml";
-        }
-        else if ( !pomFile.isFile() )
-        {
-            return;
-        }
-        if ( !projectPaths.add( projectPath ) )
-        {
-            return;
-        }
-        getLog().debug( "Collecting parent/child projects of " + projectPath );
-
-        Model model = PomUtils.loadPom( pomFile );
-
-        try
-        {
-            String projectsRoot = projectsDir.getCanonicalPath();
-            String projectDir = pomFile.getParent();
-
-            String parentPath = "../pom.xml";
-            if ( model.getParent() != null && StringUtils.isNotEmpty( model.getParent().getRelativePath() ) )
-            {
-                parentPath = model.getParent().getRelativePath();
-            }
-            String parent = relativizePath( new File( projectDir, parentPath ), projectsRoot );
-            if ( parent != null )
-            {
-                collectProjects( projectsDir, parent, projectPaths, false );
-            }
-
-            Collection<String> modulePaths = new LinkedHashSet<>();
-
-            modulePaths.addAll( model.getModules() );
-
-            for ( Profile profile : model.getProfiles() )
-            {
-                modulePaths.addAll( profile.getModules() );
-            }
-
-            for ( String modulePath : modulePaths )
-            {
-                String module = relativizePath( new File( projectDir, modulePath ), projectsRoot );
-                if ( module != null )
-                {
-                    collectProjects( projectsDir, module, projectPaths, false );
-                }
-            }
-        }
-        catch ( IOException e )
-        {
-            throw new MojoExecutionException( "Failed to analyze POM: " + pomFile, e );
-        }
-    }
-
-    /**
-     * Copies the specified projects to the directory given by {@link #cloneProjectsTo}. A project may either be denoted
-     * by a path to a POM file or merely by a path to a base directory. During cloning, the POM files will be filtered.
-     *
-     * @param projectPaths The paths to the projects to clone, relative to the projects directory, must not be
-     *            <code>null</code> nor contain <code>null</code> elements.
-     * @throws org.apache.maven.plugin.MojoExecutionException If the the projects could not be copied/filtered.
-     */
-    private void cloneProjects( Collection<String> projectPaths )
-        throws MojoExecutionException
-    {
-        if ( !cloneProjectsTo.mkdirs() && cloneClean )
-        {
-            try
-            {
-                FileUtils.cleanDirectory( cloneProjectsTo );
-            }
-            catch ( IOException e )
-            {
-                throw new MojoExecutionException( "Could not clean the cloneProjectsTo directory. Reason: "
-                    + e.getMessage(), e );
-            }
-        }
-
-        // determine project directories to clone
-        Collection<String> dirs = new LinkedHashSet<>();
-        for ( String projectPath : projectPaths )
-        {
-            if ( !new File( projectsDirectory, projectPath ).isDirectory() )
-            {
-                projectPath = getParentPath( projectPath );
-            }
-            dirs.add( projectPath );
-        }
-
-        boolean filter;
-
-        // clone project directories
-        try
-        {
-            filter = !cloneProjectsTo.getCanonicalFile().equals( projectsDirectory.getCanonicalFile() );
-
-            List<String> clonedSubpaths = new ArrayList<>();
-
-            for ( String subpath : dirs )
-            {
-                // skip this project if its parent directory is also scheduled for cloning
-                if ( !".".equals( subpath ) && dirs.contains( getParentPath( subpath ) ) )
-                {
-                    continue;
-                }
-
-                // avoid copying subdirs that are already cloned.
-                if ( !alreadyCloned( subpath, clonedSubpaths ) )
-                {
-                    // avoid creating new files that point to dir/.
-                    if ( ".".equals( subpath ) )
-                    {
-                        String cloneSubdir = relativizePath( cloneProjectsTo, projectsDirectory.getCanonicalPath() );
-
-                        // avoid infinite recursion if the cloneTo path is a subdirectory.
-                        if ( cloneSubdir != null )
-                        {
-                            File temp = Files.createTempDirectory( "pre-invocation-clone." ).toFile();
-
-                            copyDirectoryStructure( projectsDirectory, temp );
-
-                            FileUtils.deleteDirectory( new File( temp, cloneSubdir ) );
-
-                            copyDirectoryStructure( temp, cloneProjectsTo );
-                        }
-                        else
-                        {
-                            copyDirectoryStructure( projectsDirectory, cloneProjectsTo );
-                        }
-                    }
-                    else
-                    {
-                        File srcDir = new File( projectsDirectory, subpath );
-                        File dstDir = new File( cloneProjectsTo, subpath );
-                        copyDirectoryStructure( srcDir, dstDir );
-                    }
-
-                    clonedSubpaths.add( subpath );
-                }
-            }
-        }
-        catch ( IOException e )
-        {
-            throw new MojoExecutionException( "Failed to clone projects from: " + projectsDirectory + " to: "
-                + cloneProjectsTo + ". Reason: " + e.getMessage(), e );
-        }
-
-        // filter cloned POMs
-        if ( filter )
-        {
-            for ( String projectPath : projectPaths )
-            {
-                File pomFile = new File( cloneProjectsTo, projectPath );
-                if ( pomFile.isFile() )
-                {
-                    buildInterpolatedFile( pomFile, pomFile );
-                }
-
-                // MINVOKER-186
-                // The following is a temporary solution to support Maven 3.3.1 (.mvn/extensions.xml) filtering
-                // Will be replaced by MINVOKER-117 with general filtering mechanism
-                File baseDir = pomFile.getParentFile();
-                File mvnDir = new File( baseDir, ".mvn" );
-                if ( mvnDir.isDirectory() )
-                {
-                    File extensionsFile = new File( mvnDir, "extensions.xml" );
-                    if ( extensionsFile.isFile() )
-                    {
-                        buildInterpolatedFile( extensionsFile, extensionsFile );
-                    }
-                }
-                // END MINVOKER-186
-            }
-            filteredPomPrefix = null;
-        }
-    }
-
-    /**
-     * Gets the parent path of the specified relative path.
-     *
-     * @param path The relative path whose parent should be retrieved, must not be <code>null</code>.
-     * @return The parent path or "." if the specified path has no parent, never <code>null</code>.
-     */
-    private String getParentPath( String path )
-    {
-        int lastSep = Math.max( path.lastIndexOf( '/' ), path.lastIndexOf( '\\' ) );
-        return ( lastSep < 0 ) ? "." : path.substring( 0, lastSep );
-    }
-
-    /**
-     * Copied a directory structure with default exclusions (.svn, CVS, etc)
-     *
-     * @param sourceDir The source directory to copy, must not be <code>null</code>.
-     * @param destDir The target directory to copy to, must not be <code>null</code>.
-     * @throws java.io.IOException If the directory structure could not be copied.
-     */
-    private void copyDirectoryStructure( File sourceDir, File destDir )
-        throws IOException
-    {
-        DirectoryScanner scanner = new DirectoryScanner();
-        scanner.setBasedir( sourceDir );
-        if ( !cloneAllFiles )
-        {
-            scanner.addDefaultExcludes();
-        }
-        scanner.scan();
-
-        /*
-         * NOTE: Make sure the destination directory is always there (even if empty) to support POM-less ITs.
-         */
-        destDir.mkdirs();
-        // Create all the directories, including any symlinks present in source
-        FileUtils.mkDirs( sourceDir, scanner.getIncludedDirectories(), destDir );
-
-        for ( String includedFile : scanner.getIncludedFiles() )
-        {
-            File sourceFile = new File( sourceDir, includedFile );
-            File destFile = new File( destDir, includedFile );
-            FileUtils.copyFile( sourceFile, destFile );
-
-            // ensure clone project must be writable for additional changes
-            destFile.setWritable( true );
-        }
-    }
-
-    /**
-     * Determines whether the specified sub path has already been cloned, i.e. whether one of its ancestor directories
-     * was already cloned.
-     *
-     * @param subpath The sub path to check, must not be <code>null</code>.
-     * @param clonedSubpaths The list of already cloned paths, must not be <code>null</code> nor contain
-     *            <code>null</code> elements.
-     * @return <code>true</code> if the specified path has already been cloned, <code>false</code> otherwise.
-     */
-    static boolean alreadyCloned( String subpath, List<String> clonedSubpaths )
-    {
-        for ( String path : clonedSubpaths )
-        {
-            if ( ".".equals( path ) || subpath.equals( path ) || subpath.startsWith( path + File.separator ) )
-            {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Runs the specified build jobs.
-     *
-     * @param projectsDir The base directory of all projects, must not be <code>null</code>.
-     * @param buildJobs The build jobs to run must not be <code>null</code> nor contain <code>null</code> elements.
-     * @throws org.apache.maven.plugin.MojoExecutionException If any build could not be launched.
-     */
-    private void runBuilds( final File projectsDir, List<BuildJob> buildJobs, int runWithParallelThreads )
-        throws MojoExecutionException
-    {
-        if ( !localRepositoryPath.exists() )
-        {
-            localRepositoryPath.mkdirs();
-        }
-
-        // -----------------------------------------------
-        // interpolate settings file
-        // -----------------------------------------------
-
-        File interpolatedSettingsFile = interpolateSettings( settingsFile );
-
-        final File mergedSettingsFile = mergeSettings( interpolatedSettingsFile );
-
-        if ( mavenHome != null )
-        {
-            actualMavenVersion = SelectorUtils.getMavenVersion( mavenHome );
-        }
-        else
-        {
-            actualMavenVersion = SelectorUtils.getMavenVersion();
-        }
-        scriptRunner.setGlobalVariable( "mavenVersion", actualMavenVersion );
-
-        final CharSequence actualJreVersion;
-        // @todo if ( javaVersions ) ... to be picked up from toolchains
-        if ( javaHome != null )
-        {
-            actualJreVersion = resolveExternalJreVersion();
-        }
-        else
-        {
-            actualJreVersion = SelectorUtils.getJreVersion();
-        }
-        
-        final Path projectsPath = this.projectsDirectory.toPath();
-        
-        Set<Path> folderGroupSet = new HashSet<>();
-        folderGroupSet.add( Paths.get( "." ) );
-        for ( BuildJob buildJob : buildJobs )
-        {
-            Path p = Paths.get( buildJob.getProject() );
-            
-            if ( Files.isRegularFile( projectsPath.resolve( p ) ) )
-            {
-                p = p.getParent();
-            }
-            
-            if ( p != null )
-            {
-                p = p.getParent();
-            }
-            
-            while ( p != null && folderGroupSet.add( p ) )
-            {
-                p = p.getParent();
-            }
-        }
-        
-        List<Path> folderGroup = new ArrayList<>( folderGroupSet );
-        Collections.sort( folderGroup );
-
-        final Map<Path, Properties> globalInvokerProperties = new HashMap<>();
-        
-        for ( Path path : folderGroup )
-        {
-            Properties ancestorProperties = globalInvokerProperties.get( projectsPath.resolve( path ).getParent() );
-
-            Path currentInvokerProperties = projectsPath.resolve( path ).resolve( invokerPropertiesFile );
-
-            Properties currentProperties;
-            if ( Files.isRegularFile( currentInvokerProperties ) )
-            {
-                if ( ancestorProperties != null )
-                {
-                    currentProperties = new Properties( ancestorProperties );
-                    
-                }
-                else
-                {
-                    currentProperties = new Properties();
-                }
-            }
-            else
-            {
-                currentProperties = ancestorProperties;
-            }
-
-            if ( Files.isRegularFile( currentInvokerProperties ) )
-            {
-                try ( InputStream in = new FileInputStream( currentInvokerProperties.toFile() ) )
-                {
-                    currentProperties.load( in );
-                }
-                catch ( IOException e )
-                {
-                    throw new MojoExecutionException( "Failed to read invoker properties: "
-                        + currentInvokerProperties );
-                }
-            }
-            
-            if ( currentProperties != null )
-            {
-                globalInvokerProperties.put( projectsPath.resolve( path ).normalize(), currentProperties );
-            }
-        }
-
-        try
-        {
-            if ( runWithParallelThreads > 1 )
-            {
-                getLog().info( "use parallelThreads " + runWithParallelThreads );
-
-                ExecutorService executorService = Executors.newFixedThreadPool( runWithParallelThreads );
-                for ( final BuildJob job : buildJobs )
-                {
-                    executorService.execute( new Runnable()
-                    {
-                        public void run()
-                        {
-                            try
-                            {
-                                Path ancestorFolder = getAncestorFolder( projectsPath.resolve( job.getProject() ) );
-
-                                runBuild( projectsDir, job, mergedSettingsFile, javaHome, actualJreVersion,
-                                          globalInvokerProperties.get( ancestorFolder ) );
-                            }
-                            catch ( MojoExecutionException e )
-                            {
-                                throw new RuntimeException( e.getMessage(), e );
-                            }
-                        }
-                    } );
-                }
-
-                try
-                {
-                    executorService.shutdown();
-                    // TODO add a configurable time out
-                    executorService.awaitTermination( Long.MAX_VALUE, TimeUnit.MILLISECONDS );
-                }
-                catch ( InterruptedException e )
-                {
-                    throw new MojoExecutionException( e.getMessage(), e );
-                }
-            }
-            else
-            {
-                for ( BuildJob job : buildJobs )
-                {
-                    Path ancestorFolder = getAncestorFolder( projectsPath.resolve( job.getProject() ) );
-                    
-                    runBuild( projectsDir, job, mergedSettingsFile, javaHome, actualJreVersion,
-                              globalInvokerProperties.get( ancestorFolder ) );
-                }
-            }
-        }
-        finally
-        {
-            if ( interpolatedSettingsFile != null && cloneProjectsTo == null )
-            {
-                interpolatedSettingsFile.delete();
-            }
-            if ( mergedSettingsFile != null && mergedSettingsFile.exists() )
-            {
-                mergedSettingsFile.delete();
-            }
-        }
-    }
-    
-    private Path getAncestorFolder( Path p )
-    {
-        Path ancestor = p;
-        if ( Files.isRegularFile( ancestor ) )
-        {
-            ancestor = ancestor.getParent();
-        }
-        if ( ancestor != null )
-        {
-            ancestor = ancestor.getParent();
-        }
-        return ancestor;
-    }
-
-    /**
-     * Interpolate settings.xml file.
-     * @param settingsFile a settings file
-     * 
-     * @return The interpolated settings.xml file.
-     * @throws MojoExecutionException in case of a problem.
-     */
-    private File interpolateSettings( File settingsFile )
-        throws MojoExecutionException
-    {
-        File interpolatedSettingsFile = null;
-        if ( settingsFile != null )
-        {
-            if ( cloneProjectsTo != null )
-            {
-                interpolatedSettingsFile = new File( cloneProjectsTo, "interpolated-" + settingsFile.getName() );
-            }
-            else
-            {
-                interpolatedSettingsFile =
-                    new File( settingsFile.getParentFile(), "interpolated-" + settingsFile.getName() );
-            }
-            buildInterpolatedFile( settingsFile, interpolatedSettingsFile );
-        }
-        return interpolatedSettingsFile;
-    }
-
-    /**
-     * Merge the settings file
-     * 
-     * @param interpolatedSettingsFile The interpolated settings file.
-     * @return The merged settings file.
-     * @throws MojoExecutionException Fail the build in case the merged settings file can't be created.
-     */
-    private File mergeSettings( File interpolatedSettingsFile )
-        throws MojoExecutionException
-    {
-        File mergedSettingsFile;
-        Settings mergedSettings = this.settings;
-        if ( mergeUserSettings )
-        {
-            if ( interpolatedSettingsFile != null )
-            {
-                // Have to merge the specified settings file (dominant) and the one of the invoking Maven process
-                try
-                {
-                    SettingsBuildingRequest request = new DefaultSettingsBuildingRequest();
-                    request.setGlobalSettingsFile( interpolatedSettingsFile );
-
-                    Settings dominantSettings = settingsBuilder.build( request ).getEffectiveSettings();
-                    Settings recessiveSettings = cloneSettings();
-                    SettingsUtils.merge( dominantSettings, recessiveSettings, TrackableBase.USER_LEVEL );
-
-                    mergedSettings = dominantSettings;
-                    getLog().debug( "Merged specified settings file with settings of invoking process" );
-                }
-                catch ( SettingsBuildingException e )
-                {
-                    throw new MojoExecutionException( "Could not read specified settings file", e );
-                }
-            }
-        }
-
-        if ( this.settingsFile != null && !mergeUserSettings )
-        {
-            mergedSettingsFile = interpolatedSettingsFile;
-        }
-        else
-        {
-            try
-            {
-                mergedSettingsFile = writeMergedSettingsFile( mergedSettings );
-            }
-            catch ( IOException e )
-            {
-                throw new MojoExecutionException( "Could not create temporary file for invoker settings.xml", e );
-            }
-        }
-        return mergedSettingsFile;
-    }
-
-    private File writeMergedSettingsFile( Settings mergedSettings )
-        throws IOException
-    {
-        File mergedSettingsFile;
-        mergedSettingsFile = File.createTempFile( "invoker-settings", ".xml" );
-
-        SettingsXpp3Writer settingsWriter = new SettingsXpp3Writer();
-
-        
-        try ( FileWriter fileWriter = new FileWriter( mergedSettingsFile ) )
-        {
-            settingsWriter.write( fileWriter, mergedSettings );
-        }
-
-        if ( getLog().isDebugEnabled() )
-        {
-            getLog().debug( "Created temporary file for invoker settings.xml: "
-                + mergedSettingsFile.getAbsolutePath() );
-        }
-        return mergedSettingsFile;
-    }
-
-    private Settings cloneSettings()
-    {
-        Settings recessiveSettings = SettingsUtils.copySettings( this.settings );
-
-        // MINVOKER-133: reset sourceLevelSet
-        resetSourceLevelSet( recessiveSettings );
-        for ( org.apache.maven.settings.Mirror mirror : recessiveSettings.getMirrors() )
-        {
-            resetSourceLevelSet( mirror );
-        }
-        for ( org.apache.maven.settings.Server server : recessiveSettings.getServers() )
-        {
-            resetSourceLevelSet( server );
-        }
-        for ( org.apache.maven.settings.Proxy proxy : recessiveSettings.getProxies() )
-        {
-            resetSourceLevelSet( proxy );
-        }
-        for ( org.apache.maven.settings.Profile profile : recessiveSettings.getProfiles() )
-        {
-            resetSourceLevelSet( profile );
-        }
-
-        return recessiveSettings;
-    }
-
-    private void resetSourceLevelSet( org.apache.maven.settings.TrackableBase trackable )
-    {
-        try
-        {
-            ReflectionUtils.setVariableValueInObject( trackable, "sourceLevelSet", Boolean.FALSE );
-            getLog().debug( "sourceLevelSet: "
-                + ReflectionUtils.getValueIncludingSuperclasses( "sourceLevelSet", trackable ) );
-        }
-        catch ( IllegalAccessException e )
-        {
-            // noop
-        }
-    }
-
-    private CharSequence resolveExternalJreVersion()
-    {
-        Artifact pluginArtifact = mojoExecution.getMojoDescriptor().getPluginDescriptor().getPluginArtifact();
-        pluginArtifact.getFile();
-
-        Commandline commandLine = new Commandline();
-        commandLine.setExecutable( new File( javaHome, "bin/java" ).getAbsolutePath() );
-        commandLine.createArg().setValue( "-cp" );
-        commandLine.createArg().setFile( pluginArtifact.getFile() );
-        commandLine.createArg().setValue( SystemPropertyPrinter.class.getName() );
-        commandLine.createArg().setValue( "java.version" );
-
-        final StringBuilder actualJreVersion = new StringBuilder();
-        StreamConsumer consumer = new StreamConsumer()
-        {
-            public void consumeLine( String line )
-            {
-                actualJreVersion.append( line );
-            }
-        };
-        try
-        {
-            CommandLineUtils.executeCommandLine( commandLine, consumer, null );
-        }
-        catch ( CommandLineException e )
-        {
-            getLog().warn( e.getMessage() );
-        }
-        return actualJreVersion;
-    }
-
-    /**
-     * Interpolate the pom file.
-     * 
-     * @param pomFile The pom file.
-     * @param basedir The base directory.
-     * @return interpolated pom file location in case we have interpolated the pom file otherwise the original pom file
-     *         will be returned.
-     * @throws MojoExecutionException
-     */
-    private File interpolatePomFile( File pomFile, File basedir )
-        throws MojoExecutionException
-    {
-        File interpolatedPomFile = null;
-        if ( pomFile != null )
-        {
-            if ( StringUtils.isNotEmpty( filteredPomPrefix ) )
-            {
-                interpolatedPomFile = new File( basedir, filteredPomPrefix + pomFile.getName() );
-                buildInterpolatedFile( pomFile, interpolatedPomFile );
-            }
-            else
-            {
-                interpolatedPomFile = pomFile;
-            }
-        }
-        return interpolatedPomFile;
-    }
-
-    /**
-     * Runs the specified project.
-     *
-     * @param projectsDir The base directory of all projects, must not be <code>null</code>.
-     * @param buildJob The build job to run, must not be <code>null</code>.
-     * @param settingsFile The (already interpolated) user settings file for the build, may be <code>null</code> to use
-     *            the current user settings.
-     * @param globalInvokerProperties 
-     * @throws org.apache.maven.plugin.MojoExecutionException If the project could not be launched.
-     */
-    private void runBuild( File projectsDir, BuildJob buildJob, File settingsFile, File actualJavaHome,
-                           CharSequence actualJreVersion, Properties globalInvokerProperties )
-        throws MojoExecutionException
-    {
-        // FIXME: Think about the following code part -- START
-        File pomFile = new File( projectsDir, buildJob.getProject() );
-        File basedir;
-        if ( pomFile.isDirectory() )
-        {
-            basedir = pomFile;
-            pomFile = new File( basedir, "pom.xml" );
-            if ( !pomFile.exists() )
-            {
-                pomFile = null;
-            }
-            else
-            {
-                buildJob.setProject( buildJob.getProject() + File.separator + "pom.xml" );
-            }
-        }
-        else
-        {
-            basedir = pomFile.getParentFile();
-        }
-
-        File interpolatedPomFile = interpolatePomFile( pomFile, basedir );
-        // FIXME: Think about the following code part -- ^^^^^^^ END
-
-        getLog().info( buffer().a( "Building: " ).strong( buildJob.getProject() ).toString() );
-
-        InvokerProperties invokerProperties = getInvokerProperties( basedir, globalInvokerProperties );
-
-        // let's set what details we can
-        buildJob.setName( invokerProperties.getJobName() );
-        buildJob.setDescription( invokerProperties.getJobDescription() );
-
-        try
-        {
-            int selection = getSelection( invokerProperties, actualJreVersion );
-            if ( selection == 0 )
-            {
-                long milliseconds = System.currentTimeMillis();
-                boolean executed;
-
-                FileLogger buildLogger = setupBuildLogFile( basedir );
-                if ( buildLogger != null )
-                {
-                    buildJob.setBuildlog( buildLogger.getOutputFile().getAbsolutePath() );
-                }
-
-                try
-                {
-                    executed = runBuild( basedir, interpolatedPomFile, settingsFile, actualJavaHome,
-                            invokerProperties, buildLogger );
-                }
-                finally
-                {
-                    milliseconds = System.currentTimeMillis() - milliseconds;
-                    buildJob.setTime( milliseconds / 1000.0 );
-
-                    if ( buildLogger != null )
-                    {
-                        buildLogger.close();
-                    }
-                }
-
-                if ( executed )
-                {
-                    buildJob.setResult( BuildJob.Result.SUCCESS );
-
-                    if ( !suppressSummaries )
-                    {
-                        getLog().info( pad( buildJob ).success( "SUCCESS" ).a( ' ' )
-                            + formatTime( buildJob.getTime() ) );
-                    }
-                }
-                else
-                {
-                    buildJob.setResult( BuildJob.Result.SKIPPED );
-
-                    if ( !suppressSummaries )
-                    {
-                        getLog().info( pad( buildJob ).warning( "SKIPPED" ).a( ' ' )
-                            + formatTime( buildJob.getTime() ) );
-                    }
-                }
-            }
-            else
-            {
-                buildJob.setResult( BuildJob.Result.SKIPPED );
-
-                StringBuilder message = new StringBuilder();
-                if ( selection == Selector.SELECTOR_MULTI )
-                {
-                    message.append( "non-matching selectors" );
-                }
-                else
-                {
-                    if ( ( selection & Selector.SELECTOR_MAVENVERSION ) != 0 )
-                    {
-                        message.append( "Maven version" );
-                    }
-                    if ( ( selection & Selector.SELECTOR_JREVERSION ) != 0 )
-                    {
-                        if ( message.length() > 0 )
-                        {
-                            message.append( ", " );
-                        }
-                        message.append( "JRE version" );
-                    }
-                    if ( ( selection & Selector.SELECTOR_OSFAMILY ) != 0 )
-                    {
-                        if ( message.length() > 0 )
-                        {
-                            message.append( ", " );
-                        }
-                        message.append( "OS" );
-                    }
-                    if ( ( selection & Selector.SELECTOR_TOOLCHAIN ) != 0 )
-                    {
-                        if ( message.length() > 0 )
-                        {
-                            message.append( ", " );
-                        }
-                        message.append( "Toolchain" );
-                    }
-                }
-
-                if ( !suppressSummaries )
-                {
-                    getLog().info( pad( buildJob ).warning( "SKIPPED" ) + " due to " + message.toString() );
-                }
-
-                // Abuse failureMessage, the field in the report which should contain the reason for skipping
-                // Consider skipCode + I18N
-                buildJob.setFailureMessage( "Skipped due to " + message.toString() );
-            }
-        }
-        catch ( RunFailureException e )
-        {
-            buildJob.setResult( e.getType() );
-            buildJob.setFailureMessage( e.getMessage() );
-
-            if ( !suppressSummaries )
-            {
-                getLog().info( "  " + e.getMessage() );
-                getLog().info( pad( buildJob ).failure( "FAILED" ).a( ' ' ) + formatTime( buildJob.getTime() ) );
-            }
-        }
-        finally
-        {
-            deleteInterpolatedPomFile( interpolatedPomFile );
-            writeBuildReport( buildJob );
-        }
-    }
-
-    private MessageBuilder pad( BuildJob buildJob )
-    {
-        MessageBuilder buffer = buffer( 128 );
-
-        buffer.a( "          " );
-        buffer.a( buildJob.getProject() );
-
-        int l = 10 + buildJob.getProject().length();
-
-        if ( l < RESULT_COLUMN )
-        {
-            buffer.a( ' ' );
-            l++;
-
-            if ( l < RESULT_COLUMN )
-            {
-                for ( int i = RESULT_COLUMN - l; i > 0; i-- )
-                {
-                    buffer.a( '.' );
-                }
-            }
-        }
-
-        return buffer.a( ' ' );
-    }
-
-    /**
-     * Delete the interpolated pom file if it has been created before.
-     * 
-     * @param interpolatedPomFile The interpolated pom file.
-     */
-    private void deleteInterpolatedPomFile( File interpolatedPomFile )
-    {
-        if ( interpolatedPomFile != null && StringUtils.isNotEmpty( filteredPomPrefix ) )
-        {
-            interpolatedPomFile.delete();
-        }
-    }
-
-    /**
-     * Determines whether selector conditions of the specified invoker properties match the current environment.
-     *
-     * @param invokerProperties The invoker properties to check, must not be <code>null</code>.
-     * @return <code>0</code> if the job corresponding to the properties should be run, otherwise a bitwise value
-     *         representing the reason why it should be skipped.
-     */
-    private int getSelection( InvokerProperties invokerProperties, CharSequence actualJreVersion )
-    {
-        return new Selector( actualMavenVersion, actualJreVersion.toString(),
-                             getToolchainPrivateManager() ).getSelection( invokerProperties );
-    }
-
-    private ToolchainPrivateManager getToolchainPrivateManager()
-    {
-        return new ToolchainPrivateManager( toolchainManagerPrivate, session );
-    }
-
-    /**
-     * Writes the XML report for the specified build job unless report generation has been disabled.
-     *
-     * @param buildJob The build job whose report should be written, must not be <code>null</code>.
-     * @throws org.apache.maven.plugin.MojoExecutionException If the report could not be written.
-     */
-    private void writeBuildReport( BuildJob buildJob )
-        throws MojoExecutionException
-    {
-        if ( disableReports )
-        {
-            return;
-        }
-
-        String safeFileName = buildJob.getProject().replace( '/', '_' ).replace( '\\', '_' ).replace( ' ', '_' );
-        if ( safeFileName.endsWith( "_pom.xml" ) )
-        {
-            safeFileName = safeFileName.substring( 0, safeFileName.length() - "_pom.xml".length() );
-        }
-
-        File reportFile = new File( reportsDirectory, "BUILD-" + safeFileName + ".xml" );
-        try ( FileOutputStream fos = new FileOutputStream( reportFile );
-              Writer osw = new OutputStreamWriter( fos, buildJob.getModelEncoding() ) )
-        {
-            BuildJobXpp3Writer writer = new BuildJobXpp3Writer();
-
-            writer.write( osw, buildJob );
-        }
-        catch ( IOException e )
-        {
-            throw new MojoExecutionException( "Failed to write build report " + reportFile, e );
-        }
-
-        if ( writeJunitReport )
-        {
-            writeJunitReport( buildJob, safeFileName );
-        }
-    }
-
-    private void writeJunitReport( BuildJob buildJob, String safeFileName )
-        throws MojoExecutionException
-    {
-        File reportFile = new File( reportsDirectory, "TEST-" + safeFileName + ".xml" );
-        Xpp3Dom testsuite = new Xpp3Dom( "testsuite" );
-        testsuite.setAttribute( "name", junitPackageName + "." + safeFileName );
-        testsuite.setAttribute( "time", Double.toString( buildJob.getTime() ) );
-
-        // set default value for required attributes
-        testsuite.setAttribute( "tests", "1" );
-        testsuite.setAttribute( "errors", "0" );
-        testsuite.setAttribute( "skipped", "0" );
-        testsuite.setAttribute( "failures", "0" );
-
-        Xpp3Dom testcase = new Xpp3Dom( "testcase" );
-        testsuite.addChild( testcase );
-        switch ( buildJob.getResult() )
-        {
-            case BuildJob.Result.SUCCESS:
-                break;
-            case BuildJob.Result.SKIPPED:
-                testsuite.setAttribute( "skipped", "1" );
-                // adding the failure element
-                Xpp3Dom skipped = new Xpp3Dom( "skipped" );
-                testcase.addChild( skipped );
-                skipped.setValue( buildJob.getFailureMessage() );
-                break;
-            case BuildJob.Result.ERROR:
-                testsuite.setAttribute( "errors", "1" );
-                break;
-            default:
-                testsuite.setAttribute( "failures", "1" );
-                // adding the failure element
-                Xpp3Dom failure = new Xpp3Dom( "failure" );
-                testcase.addChild( failure );
-                failure.setAttribute( "message", buildJob.getFailureMessage() );
-        }
-        testcase.setAttribute( "classname", junitPackageName + "." + safeFileName );
-        testcase.setAttribute( "name", safeFileName );
-        testcase.setAttribute( "time", Double.toString( buildJob.getTime() ) );
-        Xpp3Dom systemOut = new Xpp3Dom( "system-out" );
-        testcase.addChild( systemOut );
-
-
-        File buildLogFile = buildJob.getBuildlog() != null ? new File( buildJob.getBuildlog() ) : null;
-
-        if ( buildLogFile != null && buildLogFile.exists() )
-        {
-            getLog().debug( "fileLogger:" + buildLogFile );
-            try
-            {
-                systemOut.setValue( FileUtils.fileRead( buildLogFile ) );
-            }
-            catch ( IOException e )
-            {
-                throw new MojoExecutionException( "Failed to read logfile " + buildLogFile, e );
-            }
-        }
-        else
-        {
-            getLog().debug( safeFileName + "not exists buildLogFile = " + buildLogFile );
-        }
-
-        try ( FileOutputStream fos = new FileOutputStream( reportFile );
-              Writer osw = new OutputStreamWriter( fos, buildJob.getModelEncoding() ) )
-        {
-            Xpp3DomWriter.write( osw, testsuite );
-        } catch ( IOException e )
-        {
-            throw new MojoExecutionException( "Failed to write JUnit build report " + reportFile, e );
-        }
-    }
-
-    /**
-     * Formats the specified build duration time.
-     *
-     * @param seconds The duration of the build.
-     * @return The formatted time, never <code>null</code>.
-     */
-    private String formatTime( double seconds )
-    {
-        return secFormat.format( seconds );
-    }
-
-    /**
-     * Runs the specified project.
-     *
-     * @param basedir The base directory of the project, must not be <code>null</code>.
-     * @param pomFile The (already interpolated) POM file, may be <code>null</code> for a POM-less Maven invocation.
-     * @param settingsFile The (already interpolated) user settings file for the build, may be <code>null</code>. Will
-     *            be merged with the settings file of the invoking Maven process.
-     * @param invokerProperties The properties to use.
-     * @param logger file logger to write execution build.log
-     * @return <code>true</code> if the project was launched or <code>false</code> if the selector script indicated that
-     *         the project should be skipped.
-     * @throws org.apache.maven.plugin.MojoExecutionException If the project could not be launched.
-     * @throws RunFailureException If either a hook script or the build itself
-     *             failed.
-     */
-    private boolean runBuild( File basedir, File pomFile, File settingsFile, File actualJavaHome,
-                                      InvokerProperties invokerProperties, FileLogger logger )
-        throws MojoExecutionException, RunFailureException
-    {
-        if ( getLog().isDebugEnabled() && !invokerProperties.getProperties().isEmpty() )
-        {
-            Properties props = invokerProperties.getProperties();
-            getLog().debug( "Using invoker properties:" );
-            for ( String key : new TreeSet<String>( props.stringPropertyNames() ) )
-            {
-                String value = props.getProperty( key );
-                getLog().debug( "  " + key + " = " + value );
-            }
-        }
-
-        List<String> goals = getGoals( basedir );
-
-        List<String> profiles = getProfiles( basedir );
-
-        Map<String, Object> context = new LinkedHashMap<>();
-
-        boolean selectorResult = true;
-
-        try
-        {
-            try
-            {
-                scriptRunner.run( "selector script", basedir, selectorScript, context, logger );
-            }
-            catch ( ScriptReturnException e )
-            {
-                selectorResult = false;
-                return false;
-            }
-            catch ( ScriptException e )
-            {
-                throw new RunFailureException( BuildJob.Result.ERROR, e );
-            }
-
-            try
-            {
-                scriptRunner.run( "pre-build script", basedir, preBuildHookScript, context, logger );
-            }
-            catch ( ScriptException e )
-            {
-                throw new RunFailureException( BuildJob.Result.FAILURE_PRE_HOOK, e );
-            }
-
-            final InvocationRequest request = new DefaultInvocationRequest();
-
-            request.setLocalRepositoryDirectory( localRepositoryPath );
-
-            request.setBatchMode( true );
-
-            request.setShowErrors( showErrors );
-
-            request.setDebug( debug );
-
-            request.setShowVersion( showVersion );
-
-            setupLoggerForBuildJob( logger, request );
-
-            if ( mavenHome != null )
-            {
-                invoker.setMavenHome( mavenHome );
-                // FIXME: Should we really take care of M2_HOME?
-                request.addShellEnvironment( "M2_HOME", mavenHome.getAbsolutePath() );
-            }
-
-            if ( mavenExecutable != null )
-            {
-                invoker.setMavenExecutable( new File( mavenExecutable ) );
-            }
-
-            if ( actualJavaHome != null )
-            {
-                request.setJavaHome( actualJavaHome );
-            }
-
-            if ( environmentVariables != null )
-            {
-                for ( Map.Entry<String, String> variable : environmentVariables.entrySet() )
-                {
-                    request.addShellEnvironment( variable.getKey(), variable.getValue() );
-                }
-            }
-
-            for ( int invocationIndex = 1;; invocationIndex++ )
-            {
-                if ( invocationIndex > 1 && !invokerProperties.isInvocationDefined( invocationIndex ) )
-                {
-                    break;
-                }
-
-                request.setBaseDirectory( basedir );
-
-                request.setPomFile( pomFile );
-
-                request.setGoals( goals );
-
-                request.setProfiles( profiles );
-
-                request.setMavenOpts( mavenOpts );
-
-                request.setOffline( false );
-
-                int timeOut = invokerProperties.getTimeoutInSeconds( invocationIndex );
-                // not set so we use the one at the mojo level
-                request.setTimeoutInSeconds( timeOut < 0 ? timeoutInSeconds : timeOut );
-
-                String customSettingsFile = invokerProperties.getSettingsFile( invocationIndex );
-                if ( customSettingsFile != null )
-                {
-                    File interpolateSettingsFile = interpolateSettings( new File( customSettingsFile ) );
-                    File mergeSettingsFile = mergeSettings( interpolateSettingsFile );
-                    
-                    request.setUserSettingsFile( mergeSettingsFile );
-                }
-                else
-                {
-                    request.setUserSettingsFile( settingsFile );
-                }
-
-                Properties systemProperties =
-                    getSystemProperties( basedir, invokerProperties.getSystemPropertiesFile( invocationIndex ) );
-                request.setProperties( systemProperties );
-
-                invokerProperties.configureInvocation( request, invocationIndex );
-
-                if ( getLog().isDebugEnabled() )
-                {
-                    try
-                    {
-                        getLog().debug( "Using MAVEN_OPTS: " + request.getMavenOpts() );
-                        getLog().debug( "Executing: " + new MavenCommandLineBuilder().build( request ) );
-                    }
-                    catch ( CommandLineConfigurationException e )
-                    {
-                        getLog().debug( "Failed to display command line: " + e.getMessage() );
-                    }
-                }
-
-                try
-                {
-                    InvocationResult result = invoker.execute( request );
-                    verify( result, invocationIndex, invokerProperties, logger );
-                }
-                catch ( final MavenInvocationException e )
-                {
-                    getLog().debug( "Error invoking Maven: " + e.getMessage(), e );
-                    throw new RunFailureException( "Maven invocation failed. " + e.getMessage(),
-                                                   BuildJob.Result.FAILURE_BUILD );
-                }
-            }
-        }
-        catch ( IOException e )
-        {
-            throw new MojoExecutionException( e.getMessage(), e );
-        }
-        finally
-        {
-            if ( selectorResult )
-            {
-                runPostBuildHook( basedir, context, logger );
-            }
-        }
-        return true;
-    }
-
-    int getParallelThreadsCount()
-    {
-        if ( parallelThreads.endsWith( "C" ) )
-        {
-            double parallelThreadsMultiple = Double.parseDouble(
-                    parallelThreads.substring( 0, parallelThreads.length() - 1 ) );
-            return (int) ( parallelThreadsMultiple * Runtime.getRuntime().availableProcessors() );
-        }
-        else
-        {
-            return Integer.parseInt( parallelThreads );
-        }
-    }
-
-    private void runPostBuildHook( File basedir, Map<String, Object> context, FileLogger logger )
-        throws MojoExecutionException, RunFailureException
-    {
-        try
-        {
-            scriptRunner.run( "post-build script", basedir, postBuildHookScript, context, logger );
-        }
-        catch ( IOException e )
-        {
-            throw new MojoExecutionException( e.getMessage(), e );
-        }
-        catch ( ScriptException e )
-        {
-            throw new RunFailureException( e.getMessage(), BuildJob.Result.FAILURE_POST_HOOK, e );
-        }
-    }
-    private void setupLoggerForBuildJob( final FileLogger logger, final InvocationRequest request )
-    {
-        if ( logger != null )
-        {
-            request.setErrorHandler( logger );
-
-            request.setOutputHandler( logger );
-        }
-    }
-
-    /**
-     * Initializes the build logger for the specified project. This will write the logging information into
-     * {@code build.log}.
-     *
-     * @param basedir The base directory of the project, must not be <code>null</code>.
-     * @return The build logger or <code>null</code> if logging has been disabled.
-     * @throws org.apache.maven.plugin.MojoExecutionException If the log file could not be created.
-     */
-    private FileLogger setupBuildLogFile( File basedir )
-        throws MojoExecutionException
-    {
-        FileLogger logger = null;
-
-        if ( !noLog )
-        {
-            Path projectLogDirectory;
-            if ( logDirectory == null )
-            {
-                projectLogDirectory = basedir.toPath();
-            }
-            else if ( cloneProjectsTo != null )
-            {
-                projectLogDirectory =
-                    logDirectory.toPath().resolve( cloneProjectsTo.toPath().relativize( basedir.toPath() ) );
-            }
-            else
-            {
-                projectLogDirectory =
-                    logDirectory.toPath().resolve( projectsDirectory.toPath().relativize( basedir.toPath() ) );
-            }            
-            
-            try
-            {
-                if ( streamLogs )
-                {
-                    logger = new FileLogger( projectLogDirectory.resolve( "build.log" ).toFile(), getLog() );
-                }
-                else
-                {
-                    logger = new FileLogger( projectLogDirectory.resolve( "build.log" ).toFile() );
-                }
-
-                getLog().debug( "Build log initialized in: " + projectLogDirectory );
-            }
-            catch ( IOException e )
-            {
-                throw new MojoExecutionException( "Error initializing build logfile in: " + projectLogDirectory, e );
-            }
-        }
-
-        return logger;
-    }
-
-    /**
-     * Gets the system properties to use for the specified project.
-     *
-     * @param basedir The base directory of the project, must not be <code>null</code>.
-     * @param filename The filename to the properties file to load, may be <code>null</code> to use the default path
-     *            given by {@link #testPropertiesFile}.
-     * @return The system properties to use, may be empty but never <code>null</code>.
-     * @throws org.apache.maven.plugin.MojoExecutionException If the properties file exists but could not be read.
-     */
-    private Properties getSystemProperties( final File basedir, final String filename )
-        throws MojoExecutionException
-    {
-        Properties collectedTestProperties = new Properties();
-
-        if ( properties != null )
-        {
-            // MINVOKER-118: property can have empty value, which is not accepted by collectedTestProperties
-            for ( Map.Entry<String, String> entry : properties.entrySet() )
-            {
-                if ( entry.getValue() != null )
-                {
-                    collectedTestProperties.put( entry.getKey(), entry.getValue() );
-                }
-            }
-        }
-
-        File propertiesFile = null;
-        if ( filename != null )
-        {
-            propertiesFile = new File( basedir, filename );
-        }
-        else if ( testPropertiesFile != null )
-        {
-            propertiesFile = new File( basedir, testPropertiesFile );
-        }
-
-        if ( propertiesFile != null && propertiesFile.isFile() )
-        {
-            
-            try ( InputStream fin = new FileInputStream( propertiesFile ) )
-            {
-                Properties loadedProperties = new Properties();
-                loadedProperties.load( fin );
-                collectedTestProperties.putAll( loadedProperties );
-            }
-            catch ( IOException e )
-            {
-                throw new MojoExecutionException( "Error reading system properties from " + propertiesFile );
-            }
-        }
-
-        return collectedTestProperties;
-    }
-
-    /**
-     * Verifies the invocation result.
-     *
-     * @param result The invocation result to check, must not be <code>null</code>.
-     * @param invocationIndex The index of the invocation for which to check the exit code, must not be negative.
-     * @param invokerProperties The invoker properties used to check the exit code, must not be <code>null</code>.
-     * @param logger The build logger, may be <code>null</code> if logging is disabled.
-     */
-    private void verify( InvocationResult result, int invocationIndex, InvokerProperties invokerProperties,
-                         FileLogger logger )
-        throws RunFailureException
-    {
-        if ( result.getExecutionException() != null )
-        {
-            throw new RunFailureException( "The Maven invocation failed. "
-                + result.getExecutionException().getMessage(), BuildJob.Result.ERROR );
-        }
-        else if ( !invokerProperties.isExpectedResult( result.getExitCode(), invocationIndex ) )
-        {
-            StringBuilder buffer = new StringBuilder( 256 );
-            buffer.append( "The build exited with code " ).append( result.getExitCode() ).append( ". " );
-            if ( logger != null )
-            {
-                buffer.append( "See " );
-                buffer.append( logger.getOutputFile().getAbsolutePath() );
-                buffer.append( " for details." );
-            }
-            else
-            {
-                buffer.append( "See console output for details." );
-            }
-            throw new RunFailureException( buffer.toString(), BuildJob.Result.FAILURE_BUILD );
-        }
-    }
-
-    /**
-     * Gets the goal list for the specified project.
-     *
-     * @param basedir The base directory of the project, must not be <code>null</code>.
-     * @return The list of goals to run when building the project, may be empty but never <code>null</code>.
-     * @throws org.apache.maven.plugin.MojoExecutionException If the profile file could not be read.
-     */
-    List<String> getGoals( final File basedir )
-        throws MojoExecutionException
-    {
-        try
-        {
-            // FIXME: Currently we have null for goalsFile which has been removed.
-            // This might mean we can remove getGoals() at all ? Check this.
-            return getTokens( basedir, null, goals );
-        }
-        catch ( IOException e )
-        {
-            throw new MojoExecutionException( "error reading goals", e );
-        }
-    }
-
-    /**
-     * Gets the profile list for the specified project.
-     *
-     * @param basedir The base directory of the project, must not be <code>null</code>.
-     * @return The list of profiles to activate when building the project, may be empty but never <code>null</code>.
-     * @throws org.apache.maven.plugin.MojoExecutionException If the profile file could not be read.
-     */
-    List<String> getProfiles( File basedir )
-        throws MojoExecutionException
-    {
-        try
-        {
-            return getTokens( basedir, null, profiles );
-        }
-        catch ( IOException e )
-        {
-            throw new MojoExecutionException( "error reading profiles", e );
-        }
-    }
-
-    private List<String> calculateExcludes()
-        throws IOException
-    {
-        List<String> excludes =
-            ( pomExcludes != null ) ? new ArrayList<>( pomExcludes ) : new ArrayList<String>();
-        if ( this.settingsFile != null )
-        {
-            String exclude = relativizePath( this.settingsFile, projectsDirectory.getCanonicalPath() );
-            if ( exclude != null )
-            {
-                excludes.add( exclude.replace( '\\', '/' ) );
-                getLog().debug( "Automatically excluded " + exclude + " from project scanning" );
-            }
-        }
-        return excludes;
-
-    }
-
-    /**
-     * @return The list of setupUp jobs.
-     * @throws IOException
-     * @see {@link #setupIncludes}
-     */
-    private List<BuildJob> getSetupBuildJobsFromFolders()
-        throws IOException, MojoExecutionException
-    {
-        List<String> excludes = calculateExcludes();
-
-        List<BuildJob> setupPoms = scanProjectsDirectory( setupIncludes, excludes, BuildJob.Type.SETUP );
-        if ( getLog().isDebugEnabled() )
-        {
-            getLog().debug( "Setup projects: " + setupPoms );
-        }
-
-        return setupPoms;
-    }
-
-    private static class OrdinalComparator implements Comparator
-    {
-        private static final OrdinalComparator INSTANCE = new OrdinalComparator();
-
-        @Override
-        public int compare( Object o1, Object o2 )
-        {
-            return Integer.compare( ( ( BuildJob ) o2 ).getOrdinal(), ( ( BuildJob ) o1 ).getOrdinal() );
-        }
-    }
-
-    /**
-     * Gets the build jobs that should be processed. Note that the order of the returned build jobs is significant.
-     *
-     * @return The build jobs to process, may be empty but never <code>null</code>.
-     * @throws java.io.IOException If the projects directory could not be scanned.
-     */
-    List<BuildJob> getBuildJobs()
-        throws IOException, MojoExecutionException
-    {
-        List<BuildJob> buildJobs;
-
-        if ( invokerTest == null )
-        {
-            List<String> excludes = calculateExcludes();
-
-            List<BuildJob> setupPoms = scanProjectsDirectory( setupIncludes, excludes, BuildJob.Type.SETUP );
-            if ( getLog().isDebugEnabled() )
-            {
-                getLog().debug( "Setup projects: " + Arrays.asList( setupPoms ) );
-            }
-
-            List<BuildJob> normalPoms = scanProjectsDirectory( pomIncludes, excludes, BuildJob.Type.NORMAL );
-
-            Map<String, BuildJob> uniquePoms = new LinkedHashMap<>();
-            for ( BuildJob setupPom : setupPoms )
-            {
-                uniquePoms.put( setupPom.getProject(), setupPom );
-            }
-            for ( BuildJob normalPom : normalPoms )
-            {
-                if ( !uniquePoms.containsKey( normalPom.getProject() ) )
-                {
-                    uniquePoms.put( normalPom.getProject(), normalPom );
-                }
-            }
-
-            buildJobs = new ArrayList<>( uniquePoms.values() );
-        }
-        else
-        {
-            String[] testRegexes = StringUtils.split( invokerTest, "," );
-            List<String> includes = new ArrayList<>( testRegexes.length );
-            List<String> excludes = new ArrayList<>();
-
-            for ( String regex : testRegexes )
-            {
-                // user just use -Dinvoker.test=MWAR191,MNG111 to use a directory thats the end is not pom.xml
-                if ( regex.startsWith( "!" ) )
-                {
-                    excludes.add( regex.substring( 1 ) );
-                }
-                else
-                {
-                    includes.add( regex );
-                }
-            }
-
-            // it would be nice if we could figure out what types these are... but perhaps
-            // not necessary for the -Dinvoker.test=xxx t
-            buildJobs = scanProjectsDirectory( includes, excludes, BuildJob.Type.DIRECT );
-        }
-
-        relativizeProjectPaths( buildJobs );
-
-        return buildJobs;
-    }
-
-    /**
-     * Scans the projects directory for projects to build. Both (POM) files and mere directories will be matched by the
-     * scanner patterns. If the patterns match a directory which contains a file named "pom.xml", the results will
-     * include the path to this file rather than the directory path in order to avoid duplicate invocations of the same
-     * project.
-     *
-     * @param includes The include patterns for the scanner, may be <code>null</code>.
-     * @param excludes The exclude patterns for the scanner, may be <code>null</code> to exclude nothing.
-     * @param type The type to assign to the resulting build jobs, must not be <code>null</code>.
-     * @return The build jobs matching the patterns, never <code>null</code>.
-     * @throws java.io.IOException If the project directory could not be scanned.
-     */
-    private List<BuildJob> scanProjectsDirectory( List<String> includes, List<String> excludes, String type )
-        throws IOException, MojoExecutionException
-    {
-        if ( !projectsDirectory.isDirectory() )
-        {
-            return Collections.emptyList();
-        }
-
-        DirectoryScanner scanner = new DirectoryScanner();
-        scanner.setBasedir( projectsDirectory.getCanonicalFile() );
-        scanner.setFollowSymlinks( false );
-        if ( includes != null )
-        {
-            scanner.setIncludes( includes.toArray( new String[includes.size()] ) );
-        }
-        if ( excludes != null )
-        {
-            scanner.setExcludes( excludes.toArray( new String[excludes.size()] ) );
-        }
-        scanner.addDefaultExcludes();
-        scanner.scan();
-
-        Map<String, BuildJob> matches = new LinkedHashMap<>();
-
-        for ( String includedFile : scanner.getIncludedFiles() )
-        {
-            matches.put( includedFile, new BuildJob( includedFile, type ) );
-        }
-
-        for ( String includedDir : scanner.getIncludedDirectories() )
-        {
-            String includedFile = includedDir + File.separatorChar + "pom.xml";
-            if ( new File( scanner.getBasedir(), includedFile ).isFile() )
-            {
-                matches.put( includedFile, new BuildJob( includedFile, type ) );
-            }
-            else
-            {
-                matches.put( includedDir, new BuildJob( includedDir, type ) );
-            }
-        }
-
-        List<BuildJob> projects = new ArrayList<>( matches.size() );
-
-        // setup ordinal values to have an order here
-        for ( BuildJob buildJob : matches.values() )
-        {
-            InvokerProperties invokerProperties =
-                    getInvokerProperties( new File( projectsDirectory, buildJob.getProject() ).getParentFile(),
-                            null );
-            buildJob.setOrdinal( invokerProperties.getOrdinal() );
-            projects.add( buildJob );
-        }
-        Collections.sort( projects, OrdinalComparator.INSTANCE );
-        return projects;
-    }
-
-    /**
-     * Relativizes the project paths of the specified build jobs against the directory specified by
-     * {@link #projectsDirectory} (if possible). If a project path does not denote a sub path of the projects directory,
-     * it is returned as is.
-     *
-     * @param buildJobs The build jobs whose project paths should be relativized, must not be <code>null</code> nor
-     *            contain <code>null</code> elements.
-     * @throws java.io.IOException If any path could not be relativized.
-     */
-    private void relativizeProjectPaths( List<BuildJob> buildJobs )
-        throws IOException
-    {
-        String projectsDirPath = projectsDirectory.getCanonicalPath();
-
-        for ( BuildJob buildJob : buildJobs )
-        {
-            String projectPath = buildJob.getProject();
-
-            File file = new File( projectPath );
-
-            if ( !file.isAbsolute() )
-            {
-                file = new File( projectsDirectory, projectPath );
-            }
-
-            String relativizedPath = relativizePath( file, projectsDirPath );
-
-            if ( relativizedPath == null )
-            {
-                relativizedPath = projectPath;
-            }
-
-            buildJob.setProject( relativizedPath );
-        }
-    }
-
-    /**
-     * Relativizes the specified path against the given base directory. Besides relativization, the returned path will
-     * also be normalized, e.g. directory references like ".." will be removed.
-     *
-     * @param path The path to relativize, must not be <code>null</code>.
-     * @param basedir The (canonical path of the) base directory to relativize against, must not be <code>null</code>.
-     * @return The relative path in normal form or <code>null</code> if the input path does not denote a sub path of the
-     *         base directory.
-     * @throws java.io.IOException If the path could not be relativized.
-     */
-    private String relativizePath( File path, String basedir )
-        throws IOException
-    {
-        String relativizedPath = path.getCanonicalPath();
-
-        if ( relativizedPath.startsWith( basedir ) )
-        {
-            relativizedPath = relativizedPath.substring( basedir.length() );
-            if ( relativizedPath.startsWith( File.separator ) )
-            {
-                relativizedPath = relativizedPath.substring( File.separator.length() );
-            }
-
-            return relativizedPath;
-        }
-        else
-        {
-            return null;
-        }
-    }
-
-    /**
-     * Returns the map-based value source used to interpolate POMs and other stuff.
-     *
-     * @param escapeXml {@code true}, to escape any XML special characters in the property values; {@code false}, to not
-     * escape any property values.
-     *
-     * @return The map-based value source for interpolation, never <code>null</code>.
-     */
-    private Map<String, Object> getInterpolationValueSource( final boolean escapeXml )
-    {
-        Map<String, Object> props = new HashMap<>();
-
-        if ( filterProperties != null )
-        {
-            props.putAll( filterProperties );
-        }
-        props.put( "basedir", this.project.getBasedir().getAbsolutePath() );
-        props.put( "baseurl", toUrl( this.project.getBasedir().getAbsolutePath() ) );
-        if ( settings.getLocalRepository() != null )
-        {
-            props.put( "localRepository", settings.getLocalRepository() );
-            props.put( "localRepositoryUrl", toUrl( settings.getLocalRepository() ) );
-        }
-
-        return new CompositeMap( this.project, props, escapeXml );
-    }
-
-    /**
-     * Converts the specified filesystem path to a URL. The resulting URL has no trailing slash regardless whether the
-     * path denotes a file or a directory.
-     *
-     * @param filename The filesystem path to convert, must not be <code>null</code>.
-     * @return The <code>file:</code> URL for the specified path, never <code>null</code>.
-     */
-    private static String toUrl( String filename )
-    {
-        /*
-         * NOTE: Maven fails to properly handle percent-encoded "file:" URLs (WAGON-111) so don't use File.toURI() here
-         * as-is but use the decoded path component in the URL.
-         */
-        String url = "file://" + new File( filename ).toURI().getPath();
-        if ( url.endsWith( "/" ) )
-        {
-            url = url.substring( 0, url.length() - 1 );
-        }
-        return url;
-    }
-
-    /**
-     * Gets goal/profile names for the specified project, either directly from the plugin configuration or from an
-     * external token file.
-     *
-     * @param basedir The base directory of the test project, must not be <code>null</code>.
-     * @param filename The (simple) name of an optional file in the project base directory from which to read
-     *            goals/profiles, may be <code>null</code>.
-     * @param defaultTokens The list of tokens to return in case the specified token file does not exist, may be
-     *            <code>null</code>.
-     * @return The list of goal/profile names, may be empty but never <code>null</code>.
-     * @throws java.io.IOException If the token file exists but could not be parsed.
-     */
-    private List<String> getTokens( File basedir, String filename, List<String> defaultTokens )
-        throws IOException
-    {
-        List<String> tokens = ( defaultTokens != null ) ? defaultTokens : new ArrayList<String>();
-
-        if ( StringUtils.isNotEmpty( filename ) )
-        {
-            File tokenFile = new File( basedir, filename );
-
-            if ( tokenFile.exists() )
-            {
-                tokens = readTokens( tokenFile );
-            }
-        }
-
-        return tokens;
-    }
-
-    /**
-     * Reads the tokens from the specified file. Tokens are separated either by line terminators or commas. During
-     * parsing, the file contents will be interpolated.
-     *
-     * @param tokenFile The file to read the tokens from, must not be <code>null</code>.
-     * @return The list of tokens, may be empty but never <code>null</code>.
-     * @throws java.io.IOException If the token file could not be read.
-     */
-    private List<String> readTokens( final File tokenFile )
-        throws IOException
-    {
-        List<String> result = new ArrayList<>();
-        
-        Map<String, Object> composite = getInterpolationValueSource( false );
-
-        try ( BufferedReader reader =
-            new BufferedReader( new InterpolationFilterReader( newReader( tokenFile ), composite ) ) )
-        {
-            for ( String line = reader.readLine(); line != null; line = reader.readLine() )
-            {
-                result.addAll( collectListFromCSV( line ) );
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Gets a list of comma separated tokens from the specified line.
-     *
-     * @param csv The line with comma separated tokens, may be <code>null</code>.
-     * @return The list of tokens from the line, may be empty but never <code>null</code>.
-     */
-    private List<String> collectListFromCSV( final String csv )
-    {
-        final List<String> result = new ArrayList<>();
-
-        if ( ( csv != null ) && ( csv.trim().length() > 0 ) )
-        {
-            final StringTokenizer st = new StringTokenizer( csv, "," );
-
-            while ( st.hasMoreTokens() )
-            {
-                result.add( st.nextToken().trim() );
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Interpolates the specified POM/settings file to a temporary file. The destination file may be same as the input
-     * file, i.e. interpolation can be performed in-place.
-     * <p>
-     * <b>Note:</b>This methods expects the file to be a XML file and applies special XML escaping during interpolation.
-     * </p>
-     *
-     * @param originalFile The XML file to interpolate, must not be <code>null</code>.
-     * @param interpolatedFile The target file to write the interpolated contents of the original file to, must not be
-     * <code>null</code>.
-     *
-     * @throws org.apache.maven.plugin.MojoExecutionException If the target file could not be created.
-     */
-    void buildInterpolatedFile( File originalFile, File interpolatedFile )
-        throws MojoExecutionException
-    {
-        getLog().debug( "Interpolate " + originalFile.getPath() + " to " + interpolatedFile.getPath() );
-
-        try
-        {
-            String xml;
-
-            Map<String, Object> composite = getInterpolationValueSource( true );
-
-            // interpolation with token @...@
-            try ( Reader reader =
-                new InterpolationFilterReader( ReaderFactory.newXmlReader( originalFile ), composite, "@", "@" ) )
-            {
-                xml = IOUtil.toString( reader );
-            }
-            
-            try ( Writer writer = WriterFactory.newXmlWriter( interpolatedFile ) )
-            {
-                interpolatedFile.getParentFile().mkdirs();
-                
-                writer.write( xml );
-            }
-        }
-        catch ( IOException e )
-        {
-            throw new MojoExecutionException( "Failed to interpolate file " + originalFile.getPath(), e );
-        }
-    }
-
-    /**
-     * Gets the (interpolated) invoker properties for an integration test.
-     *
-     * @param projectDirectory The base directory of the IT project, must not be <code>null</code>.
-     * @return The invoker properties, may be empty but never <code>null</code>.
-     * @throws org.apache.maven.plugin.MojoExecutionException If an I/O error occurred during reading the properties.
-     */
-    private InvokerProperties getInvokerProperties( final File projectDirectory, Properties globalInvokerProperties )
-        throws MojoExecutionException
-    {
-        Properties props;
-        if ( globalInvokerProperties != null )
-        {
-            props = new Properties( globalInvokerProperties );
-        }
-        else
-        {
-            props = new Properties();
-        }
-        
-        File propertiesFile = new File( projectDirectory, invokerPropertiesFile );
-        if ( propertiesFile.isFile() )
-        {
-            try ( InputStream in = new FileInputStream( propertiesFile ) )
-            {
-                props.load( in );
-            }
-            catch ( IOException e )
-            {
-                throw new MojoExecutionException( "Failed to read invoker properties: " + propertiesFile, e );
-            }
-        }
-
-        Interpolator interpolator = new RegexBasedInterpolator();
-        interpolator.addValueSource( new MapBasedValueSource( getInterpolationValueSource( false ) ) );
-        // CHECKSTYLE_OFF: LineLength
-        for ( String key : props.stringPropertyNames() )
-        {
-            String value = props.getProperty( key );
-            try
-            {
-                value = interpolator.interpolate( value, "" );
-            }
-            catch ( InterpolationException e )
-            {
-                throw new MojoExecutionException( "Failed to interpolate invoker properties: " + propertiesFile,
-                                                  e );
-            }
-            props.setProperty( key, value );
-        }
-        return new InvokerProperties( props );
-    }
-
-    static class ToolchainPrivateManager
-    {
-        private ToolchainManagerPrivate manager;
-        
-        private MavenSession session;
-
-        ToolchainPrivateManager( ToolchainManagerPrivate manager, MavenSession session )
-        {
-            this.manager = manager;
-            this.session = session;
-        }
-
-        ToolchainPrivate[] getToolchainPrivates( String type ) throws MisconfiguredToolchainException
-        {
-            return manager.getToolchainsForType( type, session );
-        }
-    }
-}
+package org.apache.maven.plugins.invoker;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Profile;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.Component;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.plugins.invoker.model.BuildJob;
+import org.apache.maven.plugins.invoker.model.io.xpp3.BuildJobXpp3Writer;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.settings.Settings;
+import org.apache.maven.settings.SettingsUtils;
+import org.apache.maven.settings.TrackableBase;
+import org.apache.maven.settings.building.DefaultSettingsBuildingRequest;
+import org.apache.maven.settings.building.SettingsBuilder;
+import org.apache.maven.settings.building.SettingsBuildingException;
+import org.apache.maven.settings.building.SettingsBuildingRequest;
+import org.apache.maven.settings.io.xpp3.SettingsXpp3Writer;
+import org.apache.maven.shared.invoker.CommandLineConfigurationException;
+import org.apache.maven.shared.invoker.DefaultInvocationRequest;
+import org.apache.maven.shared.invoker.InvocationRequest;
+import org.apache.maven.shared.invoker.InvocationResult;
+import org.apache.maven.shared.invoker.Invoker;
+import org.apache.maven.shared.invoker.MavenCommandLineBuilder;
+import org.apache.maven.shared.invoker.MavenInvocationException;
+import org.apache.maven.shared.scriptinterpreter.ScriptException;
+import org.apache.maven.shared.scriptinterpreter.ScriptReturnException;
+import org.apache.maven.shared.scriptinterpreter.ScriptRunner;
+import org.apache.maven.shared.utils.logging.MessageBuilder;
+import org.apache.maven.toolchain.MisconfiguredToolchainException;
+import org.apache.maven.toolchain.ToolchainManagerPrivate;
+import org.apache.maven.toolchain.ToolchainPrivate;
+import org.codehaus.plexus.interpolation.InterpolationException;
+import org.codehaus.plexus.interpolation.Interpolator;
+import org.codehaus.plexus.interpolation.MapBasedValueSource;
+import org.codehaus.plexus.interpolation.RegexBasedInterpolator;
+import org.codehaus.plexus.util.DirectoryScanner;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.InterpolationFilterReader;
+import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.ReflectionUtils;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.WriterFactory;
+import org.codehaus.plexus.util.cli.CommandLineException;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+import org.codehaus.plexus.util.cli.StreamConsumer;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.codehaus.plexus.util.xml.Xpp3DomWriter;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.Writer;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Properties;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.TreeSet;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+
+import static org.apache.maven.shared.utils.logging.MessageUtils.buffer;
+
+/**
+ * Provides common code for mojos invoking sub builds.
+ *
+ * @author Stephen Connolly
+ * @since 15-Aug-2009 09:09:29
+ */
+public abstract class AbstractInvokerMojo
+    extends AbstractMojo
+{
+    /**
+     * The zero-based column index where to print the invoker result.
+     */
+    private static final int RESULT_COLUMN = 60;
+
+    /**
+     * Flag used to suppress certain invocations. This is useful in tailoring the build using profiles.
+     *
+     * @since 1.1
+     */
+    @Parameter( property = "invoker.skip", defaultValue = "false" )
+    private boolean skipInvocation;
+
+    /**
+     * Flag used to suppress the summary output notifying of successes and failures. If set to <code>true</code>, the
+     * only indication of the build's success or failure will be the effect it has on the main build (if it fails, the
+     * main build should fail as well). If {@link #streamLogs} is enabled, the sub-build summary will also provide an
+     * indication.
+     */
+    @Parameter( defaultValue = "false" )
+    protected boolean suppressSummaries;
+
+    /**
+     * Flag used to determine whether the build logs should be output to the normal mojo log.
+     */
+    @Parameter( property = "invoker.streamLogs", defaultValue = "false" )
+    private boolean streamLogs;
+
+    /**
+     * The local repository for caching artifacts. It is strongly recommended to specify a path to an isolated
+     * repository like <code>${project.build.directory}/it-repo</code>. Otherwise, your ordinary local repository will
+     * be used, potentially soiling it with broken artifacts.
+     */
+    @Parameter( property = "invoker.localRepositoryPath", defaultValue = "${settings.localRepository}" )
+    private File localRepositoryPath;
+
+    /**
+     * Directory to search for integration tests.
+     */
+    @Parameter( property = "invoker.projectsDirectory", defaultValue = "${basedir}/src/it/" )
+    private File projectsDirectory;
+
+    /**
+     * Base directory where all build reports are written to. Every execution of an integration test will produce an XML
+     * file which contains the information about success or failure of that particular build job. The format of the
+     * resulting XML file is documented in the given <a href="./build-job.html">build-job</a> reference.
+     *
+     * @since 1.4
+     */
+    @Parameter( property = "invoker.reportsDirectory", defaultValue = "${project.build.directory}/invoker-reports" )
+    private File reportsDirectory;
+
+    /**
+     * A flag to disable the generation of build reports.
+     *
+     * @since 1.4
+     */
+    @Parameter( property = "invoker.disableReports", defaultValue = "false" )
+    private boolean disableReports;
+
+    /**
+     * Directory to which projects should be cloned prior to execution. If set to {@code null}, each integration test 
+     * will be run in the directory in which the corresponding IT POM was found. In this case, you most likely want to
+     * configure your SCM to ignore <code>target</code> and <code>build.log</code> in the test's base directory.
+     * (<b>Exception</b> when project using invoker plugin is of <i>maven-plugin</i> packaging:
+     * In such case IT projects will be cloned to and executed in <code>target/its</code> by default.)
+     *
+     * @since 1.1
+     */
+    @Parameter( property = "invoker.cloneProjectsTo" )
+    private File cloneProjectsTo;
+
+    // CHECKSTYLE_OFF: LineLength
+    /**
+     * Some files are normally excluded when copying the IT projects from the directory specified by the parameter
+     * projectsDirectory to the directory given by cloneProjectsTo (e.g. <code>.svn</code>, <code>CVS</code>,
+     * <code>*~</code>, etc: see <a href=
+     * "https://codehaus-plexus.github.io/plexus-utils/apidocs/org/codehaus/plexus/util/AbstractScanner.html#DEFAULTEXCLUDES">
+     * reference</a> for full list). Setting this parameter to <code>true</code> will cause all files to be copied to
+     * the <code>cloneProjectsTo</code> directory.
+     *
+     * @since 1.2
+     */
+    @Parameter( defaultValue = "false" )
+    private boolean cloneAllFiles;
+    // CHECKSTYLE_ON: LineLength
+
+    /**
+     * Ensure the {@link #cloneProjectsTo} directory is not polluted with files from earlier invoker runs.
+     *
+     * @since 1.6
+     */
+    @Parameter( defaultValue = "true" )
+    private boolean cloneClean;
+
+    /**
+     * A single POM to build, skipping any scanning parameters and behavior.
+     */
+    @Parameter( property = "invoker.pom" )
+    private File pom;
+
+    /**
+     * Include patterns for searching the integration test directory for projects. This parameter is meant to be set
+     * from the POM. If this parameter is not set, the plugin will search for all <code>pom.xml</code> files one
+     * directory below {@link #projectsDirectory} (i.e. <code>*&#47;pom.xml</code>).<br>
+     * <br>
+     * Starting with version 1.3, mere directories can also be matched by these patterns. For example, the include
+     * pattern <code>*</code> will run Maven builds on all immediate sub directories of {@link #projectsDirectory},
+     * regardless if they contain a <code>pom.xml</code>. This allows to perform builds that need/should not depend on
+     * the existence of a POM.
+     */
+    @Parameter
+    private List<String> pomIncludes = Collections.singletonList( "*/pom.xml" );
+
+    /**
+     * Exclude patterns for searching the integration test directory. This parameter is meant to be set from the POM. By
+     * default, no POM files are excluded. For the convenience of using an include pattern like <code>*</code>, the
+     * custom settings file specified by the parameter {@link #settingsFile} will always be excluded automatically.
+     */
+    @Parameter
+    private List<String> pomExcludes = Collections.emptyList();
+
+    /**
+     * Include patterns for searching the projects directory for projects that need to be run before the other projects.
+     * This parameter allows to declare projects that perform setup tasks like installing utility artifacts into the
+     * local repository. Projects matched by these patterns are implicitly excluded from the scan for ordinary projects.
+     * Also, the exclusions defined by the parameter {@link #pomExcludes} apply to the setup projects, too. Default
+     * value is: <code>setup*&#47;pom.xml</code>.
+     *
+     * @since 1.3
+     */
+    @Parameter
+    private List<String> setupIncludes = Collections.singletonList( "setup*/pom.xml" );
+
+    /**
+     * The list of goals to execute on each project. Default value is: <code>package</code>.
+     */
+    @Parameter
+    private List<String> goals = Collections.singletonList( "package" );
+
+    /**
+     */
+    @Component
+    private Invoker invoker;
+
+    @Component
+    private SettingsBuilder settingsBuilder;
+    
+    @Component
+    private ToolchainManagerPrivate toolchainManagerPrivate;
+
+    /**
+     * Relative path of a selector script to run prior in order to decide if the build should be executed. This script
+     * may be written with either BeanShell or Groovy. If the file extension is omitted (e.g. <code>selector</code>),
+     * the plugin searches for the file by trying out the well-known extensions <code>.bsh</code> and
+     * <code>.groovy</code>. If this script exists for a particular project but returns any non-null value different
+     * from <code>true</code>, the corresponding build is flagged as skipped. In this case, none of the pre-build hook
+     * script, Maven nor the post-build hook script will be invoked. If this script throws an exception, the
+     * corresponding build is flagged as in error, and none of the pre-build hook script, Maven not the post-build hook
+     * script will be invoked.
+     *
+     * @since 1.5
+     */
+    @Parameter( property = "invoker.selectorScript", defaultValue = "selector" )
+    private String selectorScript;
+
+    /**
+     * Relative path of a pre-build hook script to run prior to executing the build. This script may be written with
+     * either BeanShell or Groovy (since 1.3). If the file extension is omitted (e.g. <code>prebuild</code>), the plugin
+     * searches for the file by trying out the well-known extensions <code>.bsh</code> and <code>.groovy</code>. If this
+     * script exists for a particular project but returns any non-null value different from <code>true</code> or throws
+     * an exception, the corresponding build is flagged as a failure. In this case, neither Maven nor the post-build
+     * hook script will be invoked.
+     */
+    @Parameter( property = "invoker.preBuildHookScript", defaultValue = "prebuild" )
+    private String preBuildHookScript;
+
+    /**
+     * Relative path of a cleanup/verification hook script to run after executing the build. This script may be written
+     * with either BeanShell or Groovy (since 1.3). If the file extension is omitted (e.g. <code>verify</code>), the
+     * plugin searches for the file by trying out the well-known extensions <code>.bsh</code> and <code>.groovy</code>.
+     * If this script exists for a particular project but returns any non-null value different from <code>true</code> or
+     * throws an exception, the corresponding build is flagged as a failure.
+     */
+    @Parameter( property = "invoker.postBuildHookScript", defaultValue = "postbuild" )
+    private String postBuildHookScript;
+
+    /**
+     * Location of a properties file that defines CLI properties for the test.
+     */
+    @Parameter( property = "invoker.testPropertiesFile", defaultValue = "test.properties" )
+    private String testPropertiesFile;
+
+    /**
+     * Common set of properties to pass in on each project's command line, via -D parameters.
+     *
+     * @since 1.1
+     */
+    @Parameter
+    private Map<String, String> properties;
+
+    /**
+     * Whether to show errors in the build output.
+     */
+    @Parameter( property = "invoker.showErrors", defaultValue = "false" )
+    private boolean showErrors;
+
+    /**
+     * Whether to show debug statements in the build output.
+     */
+    @Parameter( property = "invoker.debug", defaultValue = "false" )
+    private boolean debug;
+
+    /**
+     * Suppress logging to the <code>build.log</code> file.
+     */
+    @Parameter( property = "invoker.noLog", defaultValue = "false" )
+    private boolean noLog;
+    
+    /**
+     * By default a {@code build.log} is created in the root of the project. By setting this folder 
+     * files are written to a different folder, respecting the structure of the projectsDirectory. 
+     * 
+     * @since 3.2.0
+     */
+    @Parameter
+    private File logDirectory;
+
+    /**
+     * List of profile identifiers to explicitly trigger in the build.
+     *
+     * @since 1.1
+     */
+    @Parameter
+    private List<String> profiles;
+
+    /**
+     * A list of additional properties which will be used to filter tokens in POMs and goal files.
+     *
+     * @since 1.3
+     */
+    @Parameter
+    private Map<String, String> filterProperties;
+
+    /**
+     * The Maven Project Object
+     *
+     * @since 1.1
+     */
+    @Parameter( defaultValue = "${project}", readonly = true, required = true )
+    private MavenProject project;
+
+    @Parameter( defaultValue = "${session}", readonly = true, required = true )
+    private MavenSession session;
+
+    @Parameter( defaultValue = "${mojoExecution}", readonly = true, required = true )
+    private MojoExecution mojoExecution;
+
+    /**
+     * A comma separated list of projectname patterns to run. Specify this parameter to run individual tests by file
+     * name, overriding the {@link #setupIncludes}, {@link #pomIncludes} and {@link #pomExcludes} parameters. Each
+     * pattern you specify here will be used to create an include/exclude pattern formatted like
+     * <code>${projectsDirectory}/<i>pattern</i></code>. To exclude a test, prefix the pattern with a '<code>!</code>'.
+     * So you can just type <nobr><code>-Dinvoker.test=SimpleTest,Comp*Test,!Compare*</code></nobr> to run builds in
+     * <code>${projectsDirectory}/SimpleTest</code> and <code>${projectsDirectory}/ComplexTest</code>, but not
+     * <code>${projectsDirectory}/CompareTest</code>
+     *
+     * @since 1.1 (exclusion since 1.8)
+     */
+    @Parameter( property = "invoker.test" )
+    private String invokerTest;
+
+    /**
+     * Path to an alternate <code>settings.xml</code> to use for Maven invocation with all ITs. Note that the
+     * <code>&lt;localRepository&gt;</code> element of this settings file is always ignored, i.e. the path given by the
+     * parameter {@link #localRepositoryPath} is dominant.
+     *
+     * @since 1.2
+     */
+    @Parameter( property = "invoker.settingsFile" )
+    private File settingsFile;
+
+    /**
+     * The <code>MAVEN_OPTS</code> environment variable to use when invoking Maven. This value can be overridden for
+     * individual integration tests by using {@link #invokerPropertiesFile}.
+     *
+     * @since 1.2
+     */
+    @Parameter( property = "invoker.mavenOpts" )
+    private String mavenOpts;
+
+    /**
+     * The home directory of the Maven installation to use for the forked builds. Defaults to the current Maven
+     * installation.
+     *
+     * @since 1.3
+     */
+    @Parameter( property = "invoker.mavenHome" )
+    private File mavenHome;
+
+    /**
+     * mavenExecutable can either be a file relative to <code>${maven.home}/bin/</code> or an absolute file.
+     *
+     * @since 1.8
+     * @see Invoker#setMavenExecutable(File)
+     */
+    @Parameter( property = "invoker.mavenExecutable" )
+    private String mavenExecutable;
+
+    /**
+     * The <code>JAVA_HOME</code> environment variable to use for forked Maven invocations. Defaults to the current Java
+     * home directory.
+     *
+     * @since 1.3
+     */
+    @Parameter( property = "invoker.javaHome" )
+    private File javaHome;
+
+    /**
+     * The file encoding for the pre-/post-build scripts and the list files for goals and profiles.
+     *
+     * @since 1.2
+     */
+    @Parameter( property = "encoding", defaultValue = "${project.build.sourceEncoding}" )
+    private String encoding;
+
+    /**
+     * The current user system settings for use in Maven.
+     *
+     * @since 1.2
+     */
+    @Parameter( defaultValue = "${settings}", readonly = true, required = true )
+    private Settings settings;
+
+    /**
+     * A flag whether the test class path of the project under test should be included in the class path of the
+     * pre-/post-build scripts. If set to <code>false</code>, the class path of script interpreter consists only of the
+     * <a href="dependencies.html">runtime dependencies</a> of the Maven Invoker Plugin. If set the <code>true</code>,
+     * the project's test class path will be prepended to the interpreter class path. Among others, this feature allows
+     * the scripts to access utility classes from the test sources of your project.
+     *
+     * @since 1.2
+     */
+    @Parameter( property = "invoker.addTestClassPath", defaultValue = "false" )
+    private boolean addTestClassPath;
+
+    /**
+     * The test class path of the project under test.
+     */
+    @Parameter( defaultValue = "${project.testClasspathElements}", readonly = true )
+    private List<String> testClassPath;
+
+    /**
+     * The name of an optional project-specific file that contains properties used to specify settings for an individual
+     * Maven invocation. Any property present in the file will override the corresponding setting from the plugin
+     * configuration. The values of the properties are filtered and may use expressions like
+     * <code>${project.version}</code> to reference project properties or values from the parameter
+     * {@link #filterProperties}.<p/>
+     * 
+     * <p>
+     * As of 3.2.0 it is possible to put this folder in any of the ancestor folders, where properties will be inherited.
+     * This way you can provide a single properties file for a group of projects
+     * </p>
+     *
+     * The snippet below describes the supported properties:
+     * <pre>
+     * # A comma or space separated list of goals/phases to execute, may
+     * # specify an empty list to execute the default goal of the IT project.
+     * # Environment variables used by maven plugins can be added here
+     * invoker.goals = clean install -Dplugin.variable=value
+     *
+     * # Or you can give things like this if you need.
+     * invoker.goals = -T2 clean verify
+     *
+     * # Optionally, a list of goals to run during further invocations of Maven
+     * invoker.goals.2 = ${project.groupId}:${project.artifactId}:${project.version}:run
+     *
+     * # A comma or space separated list of profiles to activate
+     * invoker.profiles = its,jdk15
+     *
+     * # The path to an alternative POM or base directory to invoke Maven on, defaults to the
+     * # project that was originally specified in the plugin configuration
+     * # Since plugin version 1.4
+     * invoker.project = sub-module
+     *
+     * # The value for the environment variable MAVEN_OPTS
+     * invoker.mavenOpts = -Dfile.encoding=UTF-16 -Xms32m -Xmx256m
+     *
+     * # Possible values are &quot;fail-fast&quot; (default), &quot;fail-at-end&quot; and &quot;fail-never&quot;
+     * invoker.failureBehavior = fail-never
+     *
+     * # The expected result of the build, possible values are &quot;success&quot; (default) and &quot;failure&quot;
+     * invoker.buildResult = failure
+     *
+     * # A boolean value controlling the aggregator mode of Maven, defaults to &quot;false&quot;
+     * invoker.nonRecursive = true
+     *
+     * # A boolean value controlling the network behavior of Maven, defaults to &quot;false&quot;
+     * # Since plugin version 1.4
+     * invoker.offline = true
+     *
+     * # The path to the properties file from which to load system properties, defaults to the
+     * # filename given by the plugin parameter testPropertiesFile
+     * # Since plugin version 1.4
+     * invoker.systemPropertiesFile = test.properties
+     *
+     * # An optional human friendly name for this build job to be included in the build reports.
+     * # Since plugin version 1.4
+     * invoker.name = Test Build 01
+     *
+     * # An optional description for this build job to be included in the build reports.
+     * # Since plugin version 1.4
+     * invoker.description = Checks the support for build reports.
+     *
+     * # A comma separated list of JRE versions on which this build job should be run.
+     * # Since plugin version 1.4
+     * invoker.java.version = 1.4+, !1.4.1, 1.7-
+     * 
+     * # A comma separated list of OS families on which this build job should be run.
+     * # Since plugin version 1.4
+     * invoker.os.family = !windows, unix, mac
+     *
+     * # A comma separated list of Maven versions on which this build should be run.
+     * # Since plugin version 1.5
+     * invoker.maven.version = 2.0.10+, !2.1.0, !2.2.0
+     * 
+     * # A mapping for toolchain to ensure it exists
+     * # Since plugin version 3.2.0
+     * invoker.toolchain.&lt;type&gt;.&lt;provides&gt; = value
+     * invoker.toolchain.jdk.version = 11
+     * 
+     * # For java.version, maven.version, os.family and toolchain it is possible to define multiple selectors.
+     * # If one of the indexed selectors matches, the test is executed.
+     * # With the invoker.x.y equivalents you can specify global matchers.  
+     * selector.1.java.version = 1.8+
+     * selector.1.maven.version = 3.2.5+
+     * selector.1.os.family = !windows
+     * selector.2.maven.version = 3.0+
+     * selector.3.java.version = 9+
+     * 
+     * # A boolean value controlling the debug logging level of Maven, , defaults to &quot;false&quot;
+     * # Since plugin version 1.8
+     * invoker.debug = true
+     * 
+     * # Path to an alternate settings.xml to use for Maven invocation with this IT.
+     * # Since plugin version 3.0.1
+     * invoker.settingsFile = ../
+     *
+     * # An integer value to control run order of projects. sorted in the descending order of the ordinal.
+     * # In other words, the BuildJobs with the highest numbers will be executed first
+     * # Since plugin version 3.2.1
+     * invoker.ordinal = 3
+     * invoker.ordinal = 1
+     *
+     * # The additional value for the environment variable.
+     * # Since plugin version 3.2.2
+     * invoker.environmentVariables.&lt;variableName&gt; = variableValue
+     * invoker.environmentVariables.MY_ENV_NAME = myEnvValue
+     *
+     * </pre>
+     *
+     * @since 1.2
+     */
+    @Parameter( property = "invoker.invokerPropertiesFile", defaultValue = "invoker.properties" )
+    private String invokerPropertiesFile;
+
+    /**
+     * flag to enable show mvn version used for running its (cli option : -V,--show-version )
+     *
+     * @since 1.4
+     */
+    @Parameter( property = "invoker.showVersion", defaultValue = "false" )
+    private boolean showVersion;
+
+    /**
+     * <p>Number of threads for running tests in parallel. This will be the number of maven forked process in parallel.
+     * When terminated with "C", the number part is multiplied by the number of processors (cores) available
+     * to the Java virtual machine. Floating point value are only accepted together with "C".</p>
+     *
+     * <p>Example values: "1.5C", "4"</p>
+     *
+     * @since 1.6
+     */
+    @Parameter( property = "invoker.parallelThreads", defaultValue = "1" )
+    private String parallelThreads;
+
+    /**
+     * @since 1.6
+     */
+    @Parameter( property = "plugin.artifacts", required = true, readonly = true )
+    private List<Artifact> pluginArtifacts;
+
+    /**
+     * If enable and if you have a settings file configured for the execution, it will be merged with your user
+     * settings.
+     *
+     * @since 1.6
+     */
+    @Parameter( property = "invoker.mergeUserSettings", defaultValue = "false" )
+    private boolean mergeUserSettings;
+
+    /**
+     * Additional environment variables to set on the command line.
+     *
+     * @since 1.8
+     */
+    @Parameter
+    private Map<String, String> environmentVariables;
+
+    /**
+     * Additional variables for use in the hook scripts.
+     *
+     * @since 1.9
+     */
+    @Parameter
+    private Map<String, String> scriptVariables;
+
+    /**
+     *
+     * @since 3.0.2
+     */
+    @Parameter( defaultValue = "0", property = "invoker.timeoutInSeconds" )
+    private int timeoutInSeconds;
+
+    /**
+     * Write test result in junit format.
+     * @since 3.1.2
+     */
+    @Parameter( defaultValue = "false", property = "invoker.writeJunitReport" )
+    private boolean writeJunitReport;
+
+    /**
+     * The package name use in junit report
+     * @since 3.1.2
+     */
+    @Parameter( defaultValue = "maven.invoker.it", property = "invoker.junitPackageName" )
+    private String junitPackageName = "maven.invoker.it";
+
+    /**
+     * Only invoke maven projects if their sources have been modified since
+     * they were last built. Only works in conjunction with <code>cloneProjectsTo</code>.
+
+     * @since 3.2.2
+     */
+    @Parameter( defaultValue = "false", property = "invoker.updateOnly" )
+    private boolean updateOnly = false;
+
+    /**
+     * The scripter runner that is responsible to execute hook scripts.
+     */
+    private ScriptRunner scriptRunner;
+
+    /**
+     * A string used to prefix the file name of the filtered POMs in case the POMs couldn't be filtered in-place (i.e.
+     * the projects were not cloned to a temporary directory), can be <code>null</code>. This will be set to
+     * <code>null</code> if the POMs have already been filtered during cloning.
+     */
+    private String filteredPomPrefix = "interpolated-";
+
+    /**
+     * The format for elapsed build time.
+     */
+    private final DecimalFormat secFormat = new DecimalFormat( "(0.0 s)", new DecimalFormatSymbols( Locale.ENGLISH ) );
+
+    /**
+     * The version of Maven which is used to run the builds
+     */
+    private String actualMavenVersion;
+
+    /**
+     * Invokes Maven on the configured test projects.
+     *
+     * @throws org.apache.maven.plugin.MojoExecutionException If the goal encountered severe errors.
+     * @throws org.apache.maven.plugin.MojoFailureException If any of the Maven builds failed.
+     */
+    public void execute()
+        throws MojoExecutionException, MojoFailureException
+    {
+        if ( skipInvocation )
+        {
+            getLog().info( "Skipping invocation per configuration."
+                + " If this is incorrect, ensure the skipInvocation parameter is not set to true." );
+            return;
+        }
+
+        if ( StringUtils.isEmpty( encoding ) )
+        {
+            getLog().warn( "File encoding has not been set, using platform encoding " + ReaderFactory.FILE_ENCODING
+                + ", i.e. build is platform dependent!" );
+        }
+
+        // done it here to prevent issues with concurrent access in case of parallel run
+        if ( !disableReports )
+        {
+            setupReportsFolder();
+        }
+
+        List<BuildJob> buildJobs;
+        if ( pom == null )
+        {
+            try
+            {
+                buildJobs = getBuildJobs();
+            }
+            catch ( final IOException e )
+            {
+                throw new MojoExecutionException( "Error retrieving POM list from includes, "
+                    + "excludes, and projects directory. Reason: " + e.getMessage(), e );
+            }
+        }
+        else
+        {
+            try
+            {
+                projectsDirectory = pom.getCanonicalFile().getParentFile();
+            }
+            catch ( IOException e )
+            {
+                throw new MojoExecutionException( "Failed to discover projectsDirectory from "
+                    + "pom File parameter. Reason: " + e.getMessage(), e );
+            }
+
+            buildJobs = Collections.singletonList( new BuildJob( pom.getName(), BuildJob.Type.NORMAL ) );
+        }
+
+        if ( buildJobs.isEmpty() )
+        {
+            doFailIfNoProjects();
+
+            getLog().info( "No projects were selected for execution." );
+            return;
+        }
+
+        handleScriptRunnerWithScriptClassPath();
+
+        Collection<String> collectedProjects = new LinkedHashSet<>();
+        for ( BuildJob buildJob : buildJobs )
+        {
+            collectProjects( projectsDirectory, buildJob.getProject(), collectedProjects, true );
+        }
+
+        File projectsDir = projectsDirectory;
+
+        if ( cloneProjectsTo == null && "maven-plugin".equals( project.getPackaging() ) )
+        {
+            cloneProjectsTo = new File( project.getBuild().getDirectory(), "its" );
+        }
+
+        if ( updateOnly )
+        {
+            if ( cloneProjectsTo == null )
+            {
+                getLog().warn( "updateOnly functionality is not supported without cloning the projects" );
+            }
+            else if ( lastModifiedRecursive( projectsDirectory ) <= lastModifiedRecursive( cloneProjectsTo ) )
+            {
+                getLog().debug( "Skipping invocation as cloned projects are up-to-date "
+                        + "and updateOnly parameter is set to true." );
+                return;
+            }
+            else
+            {
+                getLog().debug( "Cloned projects are out of date" );
+            }
+        }
+
+        if ( cloneProjectsTo != null )
+        {
+            cloneProjects( collectedProjects );
+            projectsDir = cloneProjectsTo;
+        }
+        else
+        {
+            getLog().warn( "Filtering of parent/child POMs is not supported without cloning the projects" );
+        }
+
+        // First run setup jobs.
+        List<BuildJob> setupBuildJobs = null;
+        try
+        {
+            setupBuildJobs = getSetupBuildJobsFromFolders();
+        }
+        catch ( IOException e )
+        {
+            getLog().error( "Failure during scanning of folders.", e );
+            // TODO: Check shouldn't we fail in case of problems?
+        }
+
+        if ( !setupBuildJobs.isEmpty() )
+        {
+            // Run setup jobs in single thread
+            // mode.
+            //
+            // Some Idea about ordering?
+            getLog().info( "Running " + setupBuildJobs.size() + " setup job"
+                + ( ( setupBuildJobs.size() < 2 ) ? "" : "s" ) + ":" );
+            runBuilds( projectsDir, setupBuildJobs, 1 );
+            getLog().info( "Setup done." );
+        }
+
+        // Afterwards run all other jobs.
+        List<BuildJob> nonSetupBuildJobs = getNonSetupJobs( buildJobs );
+        // We will run the non setup jobs with the configured
+        // parallelThreads number.
+        runBuilds( projectsDir, nonSetupBuildJobs, getParallelThreadsCount() );
+
+        writeSummaryFile( nonSetupBuildJobs );
+
+        processResults( new InvokerSession( nonSetupBuildJobs ) );
+
+    }
+
+    /**
+     * Find the latest lastModified recursively within a directory structure.
+     *
+     * @param file the root file to check.
+     * @return the latest lastModified time found.
+     */
+    private long lastModifiedRecursive( File file )
+    {
+        long lastModified = file.lastModified();
+
+        final File[] entries = file.listFiles();
+
+        if ( entries != null )
+        {
+            for ( File entry : entries )
+            {
+                lastModified = Math.max( lastModified, lastModifiedRecursive( entry ) );
+            }
+        }
+
+        return lastModified;
+    }
+
+    /**
+     * This will create the necessary folders for the reports.
+     * 
+     * @throws MojoExecutionException in case of failure during creation of the reports folder.
+     */
+    private void setupReportsFolder()
+        throws MojoExecutionException
+    {
+        // If it exists from previous run...
+        if ( reportsDirectory.exists() )
+        {
+            try
+            {
+                FileUtils.deleteDirectory( reportsDirectory );
+            }
+            catch ( IOException e )
+            {
+                throw new MojoExecutionException( "Failure while trying to delete "
+                    + reportsDirectory.getAbsolutePath(), e );
+            }
+        }
+        if ( !reportsDirectory.mkdirs() )
+        {
+            throw new MojoExecutionException( "Failure while creating the " + reportsDirectory.getAbsolutePath() );
+        }
+    }
+
+    private List<BuildJob> getNonSetupJobs( List<BuildJob> buildJobs )
+    {
+        List<BuildJob> result = new LinkedList<>();
+        for ( BuildJob buildJob : buildJobs )
+        {
+            if ( !buildJob.getType().equals( BuildJob.Type.SETUP ) )
+            {
+                result.add( buildJob );
+            }
+        }
+        return result;
+    }
+
+    private void handleScriptRunnerWithScriptClassPath()
+    {
+        final List<String> scriptClassPath;
+        if ( addTestClassPath )
+        {
+            scriptClassPath = new ArrayList<>( testClassPath );
+            for ( Artifact pluginArtifact : pluginArtifacts )
+            {
+                scriptClassPath.remove( pluginArtifact.getFile().getAbsolutePath() );
+            }
+        }
+        else
+        {
+            scriptClassPath = null;
+        }
+        scriptRunner = new ScriptRunner( );
+        scriptRunner.setScriptEncoding( encoding );
+        scriptRunner.setGlobalVariable( "localRepositoryPath", localRepositoryPath );
+        if ( scriptVariables != null )
+        {
+            for ( Entry<String, String> entry : scriptVariables.entrySet() )
+            {
+                scriptRunner.setGlobalVariable( entry.getKey(), entry.getValue() );
+            }
+        }
+        scriptRunner.setClassPath( scriptClassPath );
+    }
+
+    private void writeSummaryFile( List<BuildJob> buildJobs )
+        throws MojoExecutionException
+    {
+
+        File summaryReportFile = new File( reportsDirectory, "invoker-summary.txt" );
+
+        try ( Writer writer = new BufferedWriter( new FileWriter( summaryReportFile ) ) )
+        {
+            for ( BuildJob buildJob : buildJobs )
+            {
+                if ( !buildJob.getResult().equals( BuildJob.Result.SUCCESS ) )
+                {
+                    writer.append( buildJob.getResult() );
+                    writer.append( " [" );
+                    writer.append( buildJob.getProject() );
+                    writer.append( "] " );
+                    if ( buildJob.getFailureMessage() != null )
+                    {
+                        writer.append( " " );
+                        writer.append( buildJob.getFailureMessage() );
+                    }
+                    writer.append( "\n" );
+                }
+            }
+        }
+        catch ( IOException e )
+        {
+            throw new MojoExecutionException( "Failed to write summary report " + summaryReportFile, e );
+        }
+    }
+
+    protected void doFailIfNoProjects()
+        throws MojoFailureException
+    {
+        // should only be used during run and verify
+    }
+
+    /**
+     * Processes the results of invoking the build jobs.
+     *
+     * @param invokerSession The session with the build jobs, must not be <code>null</code>.
+     * @throws MojoFailureException If the mojo had failed as a result of invoking the build jobs.
+     * @since 1.4
+     */
+    abstract void processResults( InvokerSession invokerSession )
+        throws MojoFailureException;
+
+    /**
+     * Creates a new reader for the specified file, using the plugin's {@link #encoding} parameter.
+     *
+     * @param file The file to create a reader for, must not be <code>null</code>.
+     * @return The reader for the file, never <code>null</code>.
+     * @throws java.io.IOException If the specified file was not found or the configured encoding is not supported.
+     */
+    private Reader newReader( File file )
+        throws IOException
+    {
+        if ( StringUtils.isNotEmpty( encoding ) )
+        {
+            return ReaderFactory.newReader( file, encoding );
+        }
+        else
+        {
+            return ReaderFactory.newPlatformReader( file );
+        }
+    }
+
+    /**
+     * Collects all projects locally reachable from the specified project. The method will as such try to read the POM
+     * and recursively follow its parent/module elements.
+     *
+     * @param projectsDir The base directory of all projects, must not be <code>null</code>.
+     * @param projectPath The relative path of the current project, can denote either the POM or its base directory,
+     *            must not be <code>null</code>.
+     * @param projectPaths The set of already collected projects to add new projects to, must not be <code>null</code>.
+     *            This set will hold the relative paths to either a POM file or a project base directory.
+     * @param included A flag indicating whether the specified project has been explicitly included via the parameter
+     *            {@link #pomIncludes}. Such projects will always be added to the result set even if there is no
+     *            corresponding POM.
+     * @throws org.apache.maven.plugin.MojoExecutionException If the project tree could not be traversed.
+     */
+    private void collectProjects( File projectsDir, String projectPath, Collection<String> projectPaths,
+                                  boolean included )
+        throws MojoExecutionException
+    {
+        projectPath = projectPath.replace( '\\', '/' );
+        File pomFile = new File( projectsDir, projectPath );
+        if ( pomFile.isDirectory() )
+        {
+            pomFile = new File( pomFile, "pom.xml" );
+            if ( !pomFile.exists() )
+            {
+                if ( included )
+                {
+                    projectPaths.add( projectPath );
+                }
+                return;
+            }
+            if ( !projectPath.endsWith( "/" ) )
+            {
+                projectPath += '/';
+            }
+            projectPath += "pom.xml";
+        }
+        else if ( !pomFile.isFile() )
+        {
+            return;
+        }
+        if ( !projectPaths.add( projectPath ) )
+        {
+            return;
+        }
+        getLog().debug( "Collecting parent/child projects of " + projectPath );
+
+        Model model = PomUtils.loadPom( pomFile );
+
+        try
+        {
+            String projectsRoot = projectsDir.getCanonicalPath();
+            String projectDir = pomFile.getParent();
+
+            String parentPath = "../pom.xml";
+            if ( model.getParent() != null && StringUtils.isNotEmpty( model.getParent().getRelativePath() ) )
+            {
+                parentPath = model.getParent().getRelativePath();
+            }
+            String parent = relativizePath( new File( projectDir, parentPath ), projectsRoot );
+            if ( parent != null )
+            {
+                collectProjects( projectsDir, parent, projectPaths, false );
+            }
+
+            Collection<String> modulePaths = new LinkedHashSet<>();
+
+            modulePaths.addAll( model.getModules() );
+
+            for ( Profile profile : model.getProfiles() )
+            {
+                modulePaths.addAll( profile.getModules() );
+            }
+
+            for ( String modulePath : modulePaths )
+            {
+                String module = relativizePath( new File( projectDir, modulePath ), projectsRoot );
+                if ( module != null )
+                {
+                    collectProjects( projectsDir, module, projectPaths, false );
+                }
+            }
+        }
+        catch ( IOException e )
+        {
+            throw new MojoExecutionException( "Failed to analyze POM: " + pomFile, e );
+        }
+    }
+
+    /**
+     * Copies the specified projects to the directory given by {@link #cloneProjectsTo}. A project may either be denoted
+     * by a path to a POM file or merely by a path to a base directory. During cloning, the POM files will be filtered.
+     *
+     * @param projectPaths The paths to the projects to clone, relative to the projects directory, must not be
+     *            <code>null</code> nor contain <code>null</code> elements.
+     * @throws org.apache.maven.plugin.MojoExecutionException If the the projects could not be copied/filtered.
+     */
+    private void cloneProjects( Collection<String> projectPaths )
+        throws MojoExecutionException
+    {
+        if ( !cloneProjectsTo.mkdirs() && cloneClean )
+        {
+            try
+            {
+                FileUtils.cleanDirectory( cloneProjectsTo );
+            }
+            catch ( IOException e )
+            {
+                throw new MojoExecutionException( "Could not clean the cloneProjectsTo directory. Reason: "
+                    + e.getMessage(), e );
+            }
+        }
+
+        // determine project directories to clone
+        Collection<String> dirs = new LinkedHashSet<>();
+        for ( String projectPath : projectPaths )
+        {
+            if ( !new File( projectsDirectory, projectPath ).isDirectory() )
+            {
+                projectPath = getParentPath( projectPath );
+            }
+            dirs.add( projectPath );
+        }
+
+        boolean filter;
+
+        // clone project directories
+        try
+        {
+            filter = !cloneProjectsTo.getCanonicalFile().equals( projectsDirectory.getCanonicalFile() );
+
+            List<String> clonedSubpaths = new ArrayList<>();
+
+            for ( String subpath : dirs )
+            {
+                // skip this project if its parent directory is also scheduled for cloning
+                if ( !".".equals( subpath ) && dirs.contains( getParentPath( subpath ) ) )
+                {
+                    continue;
+                }
+
+                // avoid copying subdirs that are already cloned.
+                if ( !alreadyCloned( subpath, clonedSubpaths ) )
+                {
+                    // avoid creating new files that point to dir/.
+                    if ( ".".equals( subpath ) )
+                    {
+                        String cloneSubdir = relativizePath( cloneProjectsTo, projectsDirectory.getCanonicalPath() );
+
+                        // avoid infinite recursion if the cloneTo path is a subdirectory.
+                        if ( cloneSubdir != null )
+                        {
+                            File temp = Files.createTempDirectory( "pre-invocation-clone." ).toFile();
+
+                            copyDirectoryStructure( projectsDirectory, temp );
+
+                            FileUtils.deleteDirectory( new File( temp, cloneSubdir ) );
+
+                            copyDirectoryStructure( temp, cloneProjectsTo );
+                        }
+                        else
+                        {
+                            copyDirectoryStructure( projectsDirectory, cloneProjectsTo );
+                        }
+                    }
+                    else
+                    {
+                        File srcDir = new File( projectsDirectory, subpath );
+                        File dstDir = new File( cloneProjectsTo, subpath );
+                        copyDirectoryStructure( srcDir, dstDir );
+                    }
+
+                    clonedSubpaths.add( subpath );
+                }
+            }
+        }
+        catch ( IOException e )
+        {
+            throw new MojoExecutionException( "Failed to clone projects from: " + projectsDirectory + " to: "
+                + cloneProjectsTo + ". Reason: " + e.getMessage(), e );
+        }
+
+        // filter cloned POMs
+        if ( filter )
+        {
+            for ( String projectPath : projectPaths )
+            {
+                File pomFile = new File( cloneProjectsTo, projectPath );
+                if ( pomFile.isFile() )
+                {
+                    buildInterpolatedFile( pomFile, pomFile );
+                }
+
+                // MINVOKER-186
+                // The following is a temporary solution to support Maven 3.3.1 (.mvn/extensions.xml) filtering
+                // Will be replaced by MINVOKER-117 with general filtering mechanism
+                File baseDir = pomFile.getParentFile();
+                File mvnDir = new File( baseDir, ".mvn" );
+                if ( mvnDir.isDirectory() )
+                {
+                    File extensionsFile = new File( mvnDir, "extensions.xml" );
+                    if ( extensionsFile.isFile() )
+                    {
+                        buildInterpolatedFile( extensionsFile, extensionsFile );
+                    }
+                }
+                // END MINVOKER-186
+            }
+            filteredPomPrefix = null;
+        }
+    }
+
+    /**
+     * Gets the parent path of the specified relative path.
+     *
+     * @param path The relative path whose parent should be retrieved, must not be <code>null</code>.
+     * @return The parent path or "." if the specified path has no parent, never <code>null</code>.
+     */
+    private String getParentPath( String path )
+    {
+        int lastSep = Math.max( path.lastIndexOf( '/' ), path.lastIndexOf( '\\' ) );
+        return ( lastSep < 0 ) ? "." : path.substring( 0, lastSep );
+    }
+
+    /**
+     * Copied a directory structure with default exclusions (.svn, CVS, etc)
+     *
+     * @param sourceDir The source directory to copy, must not be <code>null</code>.
+     * @param destDir The target directory to copy to, must not be <code>null</code>.
+     * @throws java.io.IOException If the directory structure could not be copied.
+     */
+    private void copyDirectoryStructure( File sourceDir, File destDir )
+        throws IOException
+    {
+        DirectoryScanner scanner = new DirectoryScanner();
+        scanner.setBasedir( sourceDir );
+        if ( !cloneAllFiles )
+        {
+            scanner.addDefaultExcludes();
+        }
+        scanner.scan();
+
+        /*
+         * NOTE: Make sure the destination directory is always there (even if empty) to support POM-less ITs.
+         */
+        destDir.mkdirs();
+        // Create all the directories, including any symlinks present in source
+        FileUtils.mkDirs( sourceDir, scanner.getIncludedDirectories(), destDir );
+
+        for ( String includedFile : scanner.getIncludedFiles() )
+        {
+            File sourceFile = new File( sourceDir, includedFile );
+            File destFile = new File( destDir, includedFile );
+            FileUtils.copyFile( sourceFile, destFile );
+
+            // ensure clone project must be writable for additional changes
+            destFile.setWritable( true );
+        }
+    }
+
+    /**
+     * Determines whether the specified sub path has already been cloned, i.e. whether one of its ancestor directories
+     * was already cloned.
+     *
+     * @param subpath The sub path to check, must not be <code>null</code>.
+     * @param clonedSubpaths The list of already cloned paths, must not be <code>null</code> nor contain
+     *            <code>null</code> elements.
+     * @return <code>true</code> if the specified path has already been cloned, <code>false</code> otherwise.
+     */
+    static boolean alreadyCloned( String subpath, List<String> clonedSubpaths )
+    {
+        for ( String path : clonedSubpaths )
+        {
+            if ( ".".equals( path ) || subpath.equals( path ) || subpath.startsWith( path + File.separator ) )
+            {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Runs the specified build jobs.
+     *
+     * @param projectsDir The base directory of all projects, must not be <code>null</code>.
+     * @param buildJobs The build jobs to run must not be <code>null</code> nor contain <code>null</code> elements.
+     * @throws org.apache.maven.plugin.MojoExecutionException If any build could not be launched.
+     */
+    private void runBuilds( final File projectsDir, List<BuildJob> buildJobs, int runWithParallelThreads )
+        throws MojoExecutionException
+    {
+        if ( !localRepositoryPath.exists() )
+        {
+            localRepositoryPath.mkdirs();
+        }
+
+        // -----------------------------------------------
+        // interpolate settings file
+        // -----------------------------------------------
+
+        File interpolatedSettingsFile = interpolateSettings( settingsFile );
+
+        final File mergedSettingsFile = mergeSettings( interpolatedSettingsFile );
+
+        if ( mavenHome != null )
+        {
+            actualMavenVersion = SelectorUtils.getMavenVersion( mavenHome );
+        }
+        else
+        {
+            actualMavenVersion = SelectorUtils.getMavenVersion();
+        }
+        scriptRunner.setGlobalVariable( "mavenVersion", actualMavenVersion );
+
+        final CharSequence actualJreVersion;
+        // @todo if ( javaVersions ) ... to be picked up from toolchains
+        if ( javaHome != null )
+        {
+            actualJreVersion = resolveExternalJreVersion();
+        }
+        else
+        {
+            actualJreVersion = SelectorUtils.getJreVersion();
+        }
+        
+        final Path projectsPath = this.projectsDirectory.toPath();
+        
+        Set<Path> folderGroupSet = new HashSet<>();
+        folderGroupSet.add( Paths.get( "." ) );
+        for ( BuildJob buildJob : buildJobs )
+        {
+            Path p = Paths.get( buildJob.getProject() );
+            
+            if ( Files.isRegularFile( projectsPath.resolve( p ) ) )
+            {
+                p = p.getParent();
+            }
+            
+            if ( p != null )
+            {
+                p = p.getParent();
+            }
+            
+            while ( p != null && folderGroupSet.add( p ) )
+            {
+                p = p.getParent();
+            }
+        }
+        
+        List<Path> folderGroup = new ArrayList<>( folderGroupSet );
+        Collections.sort( folderGroup );
+
+        final Map<Path, Properties> globalInvokerProperties = new HashMap<>();
+        
+        for ( Path path : folderGroup )
+        {
+            Properties ancestorProperties = globalInvokerProperties.get( projectsPath.resolve( path ).getParent() );
+
+            Path currentInvokerProperties = projectsPath.resolve( path ).resolve( invokerPropertiesFile );
+
+            Properties currentProperties;
+            if ( Files.isRegularFile( currentInvokerProperties ) )
+            {
+                if ( ancestorProperties != null )
+                {
+                    currentProperties = new Properties( ancestorProperties );
+                    
+                }
+                else
+                {
+                    currentProperties = new Properties();
+                }
+            }
+            else
+            {
+                currentProperties = ancestorProperties;
+            }
+
+            if ( Files.isRegularFile( currentInvokerProperties ) )
+            {
+                try ( InputStream in = new FileInputStream( currentInvokerProperties.toFile() ) )
+                {
+                    currentProperties.load( in );
+                }
+                catch ( IOException e )
+                {
+                    throw new MojoExecutionException( "Failed to read invoker properties: "
+                        + currentInvokerProperties );
+                }
+            }
+            
+            if ( currentProperties != null )
+            {
+                globalInvokerProperties.put( projectsPath.resolve( path ).normalize(), currentProperties );
+            }
+        }
+
+        try
+        {
+            if ( runWithParallelThreads > 1 )
+            {
+                getLog().info( "use parallelThreads " + runWithParallelThreads );
+
+                ExecutorService executorService = Executors.newFixedThreadPool( runWithParallelThreads );
+                for ( final BuildJob job : buildJobs )
+                {
+                    executorService.execute( new Runnable()
+                    {
+                        public void run()
+                        {
+                            try
+                            {
+                                Path ancestorFolder = getAncestorFolder( projectsPath.resolve( job.getProject() ) );
+
+                                runBuild( projectsDir, job, mergedSettingsFile, javaHome, actualJreVersion,
+                                          globalInvokerProperties.get( ancestorFolder ) );
+                            }
+                            catch ( MojoExecutionException e )
+                            {
+                                throw new RuntimeException( e.getMessage(), e );
+                            }
+                        }
+                    } );
+                }
+
+                try
+                {
+                    executorService.shutdown();
+                    // TODO add a configurable time out
+                    executorService.awaitTermination( Long.MAX_VALUE, TimeUnit.MILLISECONDS );
+                }
+                catch ( InterruptedException e )
+                {
+                    throw new MojoExecutionException( e.getMessage(), e );
+                }
+            }
+            else
+            {
+                for ( BuildJob job : buildJobs )
+                {
+                    Path ancestorFolder = getAncestorFolder( projectsPath.resolve( job.getProject() ) );
+                    
+                    runBuild( projectsDir, job, mergedSettingsFile, javaHome, actualJreVersion,
+                              globalInvokerProperties.get( ancestorFolder ) );
+                }
+            }
+        }
+        finally
+        {
+            if ( interpolatedSettingsFile != null && cloneProjectsTo == null )
+            {
+                interpolatedSettingsFile.delete();
+            }
+            if ( mergedSettingsFile != null && mergedSettingsFile.exists() )
+            {
+                mergedSettingsFile.delete();
+            }
+        }
+    }
+    
+    private Path getAncestorFolder( Path p )
+    {
+        Path ancestor = p;
+        if ( Files.isRegularFile( ancestor ) )
+        {
+            ancestor = ancestor.getParent();
+        }
+        if ( ancestor != null )
+        {
... 10030 lines suppressed ...