[Git][java-team/maven-verifier][upstream] 4 commits: New upstream version 1.7.0

Emmanuel Bourg (@ebourg) gitlab at salsa.debian.org
Wed Jan 11 15:40:57 GMT 2023



Emmanuel Bourg pushed to branch upstream at Debian Java Maintainers / maven-verifier


Commits:
6b54b9a2 by Emmanuel Bourg at 2023-01-10T10:27:08+01:00
New upstream version 1.7.0
- - - - -
9adc727b by Emmanuel Bourg at 2023-01-10T10:27:15+01:00
New upstream version 1.7.1
- - - - -
61f1a23e by Emmanuel Bourg at 2023-01-10T10:27:19+01:00
New upstream version 1.7.2
- - - - -
28a8c477 by Emmanuel Bourg at 2023-01-10T10:27:30+01:00
New upstream version 1.8.0
- - - - -


28 changed files:

- + .asf.yaml
- + .github/dependabot.yml
- + .github/release-drafter.yml
- + .github/workflows/maven-verify.yml
- + .github/workflows/release-drafter.yml
- + .gitignore
- + Jenkinsfile
- + README.md
- pom.xml
- src/main/java/org/apache/maven/it/Embedded3xLauncher.java
- src/main/java/org/apache/maven/it/ForkedLauncher.java
- src/main/java/org/apache/maven/it/LauncherException.java
- src/main/java/org/apache/maven/it/VerificationException.java
- src/main/java/org/apache/maven/it/Verifier.java
- src/main/java/org/apache/maven/it/util/ResourceExtractor.java
- + src/site/markdown/getting-started.md
- + src/site/markdown/index.md
- src/site/site.xml
- src/site/xdoc/download.xml.vm
- + src/test/java/org/apache/maven/it/Embedded3xLauncherTest.java
- + src/test/java/org/apache/maven/it/ForkedLauncherTest.java
- src/test/java/org/apache/maven/it/VerifierTest.java
- + src/test/resources/maven-home/bin/mvn
- + src/test/resources/maven-home/bin/mvn.cmd
- + src/test/resources/wrapper-project/mvnw
- + src/test/resources/wrapper-project/mvnw.cmd
- + src/test/resources/wrapper-project/mvnwDebug
- + src/test/resources/wrapper-project/mvnwDebug.cmd


Changes:

=====================================
.asf.yaml
=====================================
@@ -0,0 +1,25 @@
+# 
+#  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.
+#
+# see https://s.apache.org/asfyaml
+github:
+  description: "Apache Maven Verifier"
+  homepage: https://maven.apache.org/shared/maven-verifier/
+  labels:
+    - java
+    - build-management
+    - maven-shared
+    - maven


=====================================
.github/dependabot.yml
=====================================
@@ -0,0 +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.
+
+version: 2
+updates:
+  - package-ecosystem: "maven"
+    directory: "/"
+    schedule:
+      interval: "daily"
+  - package-ecosystem: "github-actions"
+    directory: "/"
+    schedule:
+      interval: "daily"


=====================================
.github/release-drafter.yml
=====================================
@@ -0,0 +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.
+
+_extends: maven-gh-actions-shared
+tag-template: maven-verifier-$NEXT_MINOR_VERSION


=====================================
.github/workflows/maven-verify.yml
=====================================
@@ -0,0 +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.
+
+name: Verify
+
+on:
+  push:
+  pull_request:
+
+jobs:
+  build:
+    name: Verify
+    uses: apache/maven-gh-actions-shared/.github/workflows/maven-verify.yml at v2


=====================================
.github/workflows/release-drafter.yml
=====================================
@@ -0,0 +1,25 @@
+# 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.
+   
+name: Release Drafter
+on:
+  push:
+    branches:
+      - master
+jobs:
+   update_release_draft:
+      uses: apache/maven-gh-actions-shared/.github/workflows/release-drafter.yml at v2


=====================================
.gitignore
=====================================
@@ -0,0 +1,15 @@
+target/
+.project
+.classpath
+.settings/
+.svn/
+/bin/
+# Intellij
+*.ipr
+*.iml
+.idea
+out/
+.DS_Store
+/bootstrap
+/dependencies.xml
+.java-version


=====================================
Jenkinsfile
=====================================
@@ -0,0 +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.
+ */
+
+asfMavenTlpStdBuild()


=====================================
README.md
=====================================
@@ -0,0 +1,100 @@
+<!---
+ 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.
+-->
+Contributing to [Apache Maven Verifier](https://maven.apache.org/shared/maven-verifier/)
+======================
+
+[![ASF Jira](https://img.shields.io/endpoint?url=https%3A%2F%2Fmaven.apache.org%2Fbadges%2Fasf_jira-MSHARED.json)][jira]
+[![Apache License, Version 2.0, January 2004](https://img.shields.io/github/license/apache/maven.svg?label=License)][license]
+[![Maven Central](https://img.shields.io/maven-central/v/org.apache.maven.shared/maven-verifier.svg?label=Maven%20Central)](https://search.maven.org/artifact/org.apache.maven.shared/maven-verifier)
+[![Reproducible Builds](https://img.shields.io/badge/Reproducible_Builds-ok-green?labelColor=blue)](https://github.com/jvm-repo-rebuild/reproducible-central#org.apache.maven.shared:maven-verifier)
+[![Jenkins Status](https://img.shields.io/jenkins/s/https/ci-maven.apache.org/job/Maven/job/maven-box/job/maven-verifier/job/master.svg)][build]
+[![Jenkins tests](https://img.shields.io/jenkins/t/https/ci-maven.apache.org/job/Maven/job/maven-box/job/maven-verifier/job/master.svg)][test-results]
+
+
+You have found a bug or you have an idea for a cool new feature? Contributing
+code is a great way to give something back to the open source community. Before
+you dig right into the code, there are a few guidelines that we need
+contributors to follow so that we can have a chance of keeping on top of
+things.
+
+Getting Started
+---------------
+
++ Make sure you have a [JIRA account](https://issues.apache.org/jira/).
++ Make sure you have a [GitHub account](https://github.com/signup/free).
++ If you're planning to implement a new feature, it makes sense to discuss your changes 
+  on the [dev list][ml-list] first. 
+  This way you can make sure you're not wasting your time on something that isn't 
+  considered to be in Apache Maven's scope.
++ Submit a ticket for your issue, assuming one does not already exist.
+  + Clearly describe the issue, including steps to reproduce when it is a bug.
+  + Make sure you fill in the earliest version that you know has the issue.
++ Fork the repository on GitHub.
+
+Making and Submitting Changes
+--------------
+
+We accept Pull Requests via GitHub. The [developer mailing list][ml-list] is the
+main channel of communication for contributors.  
+There are some guidelines which will make applying PRs easier for us:
++ Create a topic branch from where you want to base your work (this is usually the master branch).
+  Push your changes to a topic branch in your fork of the repository.
++ Make commits of logical units.
++ Respect the original code style: by using the same [codestyle][code-style],
+  patches should only highlight the actual difference, not being disturbed by any formatting issues:
+  + Only use spaces for indentation.
+  + Create minimal diffs - disable on save actions like reformat source code or organize imports. 
+    If you feel the source code should be reformatted, create a separate PR for this change.
+  + Check for unnecessary whitespace with `git diff --check` before committing.
++ Make sure your commit messages are in the proper format. Your commit message should contain the key of the JIRA issue.
+```
+[MSHARED-XXX] - Subject of the JIRA Ticket
+ Optional supplemental description.
+```
++ Make sure you have added the necessary tests (JUnit/IT) for your changes.
++ Run all the tests with `mvn -Prun-its verify` to assure nothing else was accidentally broken.
++ Submit a pull request to the repository in the Apache organization.
++ Update your JIRA ticket and include a link to the pull request in the ticket.
+
+If you plan to contribute on a regular basis, please consider filing a [contributor license agreement][cla].
+
+Making Trivial Changes
+----------------------
+
+For changes of a trivial nature to comments and documentation, it is not always
+necessary to create a new ticket in JIRA.  In this case, it is appropriate to
+start the first line of a commit with '(doc)' instead of a ticket number.
+
+Additional Resources
+--------------------
+
++ [Contributing patches](https://maven.apache.org/guides/development/guide-maven-development.html#Creating_and_submitting_a_patch)
++ [Apache Maven Shared Components project page][jira]
++ [Contributor License Agreement][cla]
++ [General GitHub documentation](https://help.github.com/)
++ [GitHub pull request documentation](https://help.github.com/send-pull-requests/)
++ [Apache Maven Twitter Account](https://twitter.com/ASFMavenProject)
++ #Maven IRC channel on freenode.org
+
+[jira]: https://issues.apache.org/jira/projects/MSHARED/
+[license]: https://www.apache.org/licenses/LICENSE-2.0
+[ml-list]: https://maven.apache.org/mailing-lists.html
+[code-style]: https://maven.apache.org/developers/conventions/code.html
+[cla]: https://www.apache.org/licenses/#clas
+[maven-wiki]: https://cwiki.apache.org/confluence/display/MAVEN/Index
+[test-results]: https://ci-maven.apache.org/job/Maven/job/maven-box/job/maven-verifier/job/master/lastCompletedBuild/testReport/
+[build]: https://ci-maven.apache.org/job/Maven/job/maven-box/job/maven-verifier/job/master/


=====================================
pom.xml
=====================================
@@ -23,16 +23,21 @@
   <parent>
     <groupId>org.apache.maven.shared</groupId>
     <artifactId>maven-shared-components</artifactId>
-    <version>21</version>
-    <relativePath>../maven-shared-components</relativePath>
+    <version>35</version>
+    <relativePath />
   </parent>
 
   <artifactId>maven-verifier</artifactId>
-  <version>1.6</version>
+  <version>1.8.0</version>
 
   <name>Apache Maven Verifier Component</name>
   <description>Provides a test harness for Maven integration tests.</description>
 
+  <properties>
+    <javaVersion>7</javaVersion>
+    <project.build.outputTimestamp>2022-03-19T12:57:38Z</project.build.outputTimestamp>
+  </properties>
+
   <contributors>
     <contributor>
       <name>Mikolaj Izdebski</name>
@@ -40,18 +45,23 @@
   </contributors>
 
   <scm>
-    <connection>scm:svn:http://svn.apache.org/repos/asf/maven/shared/tags/maven-verifier-1.6</connection>
-    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/shared/tags/maven-verifier-1.6</developerConnection>
-    <url>http://svn.apache.org/viewvc/maven/shared/tags/maven-verifier-1.6</url>
+    <connection>scm:git:https://gitbox.apache.org/repos/asf/maven-verifier.git</connection>
+    <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/maven-verifier.git</developerConnection>
+    <url>https://github.com/apache/maven-verifier/tree/${project.scm.tag}</url>
+    <tag>maven-verifier-1.8.0</tag>
   </scm>
   <issueManagement>
-    <system>jira</system>
-    <url>https://issues.apache.org/jira/browse/MSHARED/component/12326443</url>
+    <system>Jira</system>
+    <url>https://issues.apache.org/jira/issues/?jql=project+%3D+MSHARED+AND+component+%3D+maven-verifier</url>
   </issueManagement>
+  <ciManagement>
+    <system>Jenkins</system>
+    <url>https://ci-maven.apache.org/job/Maven/job/maven-box/job/maven-verifier/</url>
+  </ciManagement>
   <distributionManagement>
     <site>
       <id>apache.website</id>
-      <url>scm:svn:https://svn.apache.org/repos/infra/websites/production/maven/components/${maven.site.path}</url>
+      <url>scm:svn:https://svn.apache.org/repos/asf/maven/website/components/${maven.site.path}</url>
     </site>
   </distributionManagement>
 
@@ -59,19 +69,74 @@
     <dependency>
       <groupId>org.apache.maven.shared</groupId>
       <artifactId>maven-shared-utils</artifactId>
-      <version>0.8</version>
+      <version>3.3.4</version>
     </dependency>
 
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
-      <version>3.8.2</version>
+      <version>4.13.2</version>
+    </dependency>
+    <dependency>
+      <groupId>org.hamcrest</groupId>
+      <artifactId>hamcrest-core</artifactId>
+      <version>2.2</version>
+    </dependency>
+    <!-- embedder for testing Embedded3xLauncher with classpath -->
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-embedder</artifactId>
+      <version>3.8.4</version>
+      <scope>test</scope>
+    </dependency>
+    <!-- START transitive dependencies of embedder -->
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-simple</artifactId>
+      <version>1.7.36</version>
+      <scope>test</scope>
+    </dependency>
+    <!-- required due to https://issues.apache.org/jira/browse/MNG-6561 -->
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-compat</artifactId>
+      <version>3.8.4</version>
+      <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-connector-basic</artifactId>
+      <version>1.6.3</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-transport-http</artifactId>
+      <version>1.6.3</version>
+      <scope>test</scope>
+    </dependency>
+    <!-- END transitive dependencies of embedder -->
   </dependencies>
 
   <build>
     <pluginManagement>
       <plugins>
+        <!-- TODO check with next parent -->
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>3.10.1</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-pmd-plugin</artifactId>
+          <version>3.16.0</version>
+        </plugin>
+        <plugin>
+          <groupId>org.codehaus.mojo</groupId>
+          <artifactId>taglist-maven-plugin</artifactId>
+          <version>3.0.0</version>
+        </plugin>
         <plugin>
           <groupId>org.apache.rat</groupId>
           <artifactId>apache-rat-plugin</artifactId>
@@ -81,11 +146,18 @@
                 The manifest specification does not describe any method for writing comments into the manifest.
               -->
               <exclude>src/test/resources/META-INF/MANIFEST.MF</exclude>
-              <!-- hudson creates this file -->
-              <exclude>.maven/spy.log</exclude>
             </excludes>
           </configuration>
         </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <configuration>
+            <systemPropertyVariables>
+              <maven.home>${maven.home}</maven.home>
+            </systemPropertyVariables>
+          </configuration>
+        </plugin>
       </plugins>
     </pluginManagement>
   </build>


=====================================
src/main/java/org/apache/maven/it/Embedded3xLauncher.java
=====================================
@@ -93,11 +93,11 @@ class Embedded3xLauncher
 
             configure.invoke( launcher, new Object[] { new FileInputStream( config ) } );
 
-            Method getWorld = launcherClass.getMethod( "getWorld", null );
-            Object classWorld = getWorld.invoke( launcher, null );
+            Method getWorld = launcherClass.getMethod( "getWorld" );
+            Object classWorld = getWorld.invoke( launcher );
 
-            Method getMainClass = launcherClass.getMethod( "getMainClass", null );
-            Class<?> cliClass = (Class<?>) getMainClass.invoke( launcher, null );
+            Method getMainClass = launcherClass.getMethod( "getMainClass" );
+            Class<?> cliClass = (Class<?>) getMainClass.invoke( launcher );
 
             Constructor<?> newMavenCli = cliClass.getConstructor( new Class[] { classWorld.getClass() } );
             Object mavenCli = newMavenCli.newInstance( new Object[] { classWorld } );
@@ -107,29 +107,9 @@ class Embedded3xLauncher
 
             return new Embedded3xLauncher( mavenCli, doMain );
         }
-        catch ( ClassNotFoundException e )
+        catch ( ReflectiveOperationException | IOException e )
         {
-            throw new LauncherException( "Invalid Maven home directory " + mavenHome, e );
-        }
-        catch ( InstantiationException e )
-        {
-            throw new LauncherException( "Invalid Maven home directory " + mavenHome, e );
-        }
-        catch ( IllegalAccessException e )
-        {
-            throw new LauncherException( "Invalid Maven home directory " + mavenHome, e );
-        }
-        catch ( NoSuchMethodException e )
-        {
-            throw new LauncherException( "Invalid Maven home directory " + mavenHome, e );
-        }
-        catch ( InvocationTargetException e )
-        {
-            throw new LauncherException( "Invalid Maven home directory " + mavenHome, e );
-        }
-        catch ( IOException e )
-        {
-            throw new LauncherException( "Invalid Maven home directory " + mavenHome, e );
+            throw new LauncherException( "Failed to initialize Laucher", e );
         }
         finally
         {
@@ -157,19 +137,7 @@ class Embedded3xLauncher
 
             return new Embedded3xLauncher( mavenCli, doMain );
         }
-        catch ( ClassNotFoundException e )
-        {
-            throw new LauncherException( e.getMessage(), e );
-        }
-        catch ( NoSuchMethodException e )
-        {
-            throw new LauncherException( e.getMessage(), e );
-        }
-        catch ( InstantiationException e )
-        {
-            throw new LauncherException( e.getMessage(), e );
-        }
-        catch ( IllegalAccessException e )
+        catch ( ReflectiveOperationException e )
         {
             throw new LauncherException( e.getMessage(), e );
         }
@@ -228,10 +196,13 @@ class Embedded3xLauncher
         PrintStream out = ( logFile != null ) ? new PrintStream( new FileOutputStream( logFile ) ) : System.out;
         try
         {
+            File workingDirectoryPath = new File( workingDirectory );
             Properties originalProperties = System.getProperties();
             System.setProperties( null );
             System.setProperty( "maven.home", originalProperties.getProperty( "maven.home", "" ) );
-            System.setProperty( "user.dir", new File( workingDirectory ).getAbsolutePath() );
+            System.setProperty( "user.dir", workingDirectoryPath.getAbsolutePath() );
+            System.setProperty( "maven.multiModuleProjectDirectory", 
+                    findProjectBaseDirectory( workingDirectoryPath ).getAbsolutePath() );
 
             for ( Object o : systemProperties.keySet() )
             {
@@ -255,11 +226,7 @@ class Embedded3xLauncher
                 System.setProperties( originalProperties );
             }
         }
-        catch ( IllegalAccessException e )
-        {
-            throw new LauncherException( "Failed to run Maven: " + e.getMessage(), e );
-        }
-        catch ( InvocationTargetException e )
+        catch ( IllegalAccessException | InvocationTargetException e )
         {
             throw new LauncherException( "Failed to run Maven: " + e.getMessage(), e );
         }
@@ -304,4 +271,26 @@ class Embedded3xLauncher
         throw new LauncherException( "Could not determine embedded Maven version" );
     }
 
+    /**
+     * Replicates the logic from <a href="https://git.io/JSMug">Maven start script</a> to find 
+     * the project's base directory.
+     * @param workingDirectory the working directory
+     * @return the project's base directory
+     */
+    private static File findProjectBaseDirectory( File workingDirectory )
+    {
+        File currentDirectory = workingDirectory;
+        // traverses directory structure from process work directory to filesystem root
+        // first directory with .mvn subdirectory is considered project base directory
+        while ( currentDirectory != null && currentDirectory.getParentFile() != null )
+        {
+            // see if /.mvn exists
+            if ( new File( currentDirectory, ".mvn" ).isDirectory() )
+            {
+                return currentDirectory;
+            }
+            currentDirectory = currentDirectory.getParentFile();
+        }
+        return workingDirectory;
+    }
 }


=====================================
src/main/java/org/apache/maven/it/ForkedLauncher.java
=====================================
@@ -26,6 +26,7 @@ import java.io.Writer;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Properties;
 import java.util.regex.Matcher;
@@ -52,25 +53,50 @@ class ForkedLauncher
 
     private final Map<String, String> envVars;
 
-    public ForkedLauncher( String mavenHome )
+    ForkedLauncher( String mavenHome )
     {
         this( mavenHome, Collections.<String, String>emptyMap(), false );
     }
 
-    public ForkedLauncher( String mavenHome, Map<String, String> envVars, boolean debugJvm )
+    ForkedLauncher( String mavenHome, Map<String, String> envVars, boolean debugJvm )
+    {
+        this( mavenHome, envVars, debugJvm, false );
+    }
+
+    ForkedLauncher( String mavenHome, Map<String, String> envVars, boolean debugJvm, boolean wrapper )
     {
         this.mavenHome = mavenHome;
         this.envVars = envVars;
 
-        String script = debugJvm ? "mvnDebug" : "mvn";
-
-        if ( mavenHome != null )
+        if ( wrapper )
         {
-            executable = new File( mavenHome, "bin/" + script ).getPath();
+            final StringBuilder script = new StringBuilder();
+            
+            if ( !isWindows() )
+            {
+                script.append( "./" );
+            }
+            
+            script.append( "mvnw" );
+            
+            if ( debugJvm )
+            {
+                script.append( "Debug" );
+            }
+            executable = script.toString();
         }
         else
         {
-            executable = script;
+            String script = "mvn" + ( debugJvm ? "Debug" : "" );
+
+            if ( mavenHome != null )
+            {
+                executable = new File( mavenHome, "bin/" + script ).getPath();
+            }
+            else
+            {
+                executable = script;
+            }
         }
     }
 
@@ -195,5 +221,12 @@ class ForkedLauncher
 
         return version;
     }
+    
+    private static boolean isWindows()
+    {
+        String osName = System.getProperty( "os.name" ).toLowerCase( Locale.US );
+
+        return ( osName.indexOf( "windows" ) > -1 );
+    }
 
 }


=====================================
src/main/java/org/apache/maven/it/LauncherException.java
=====================================
@@ -25,13 +25,17 @@ package org.apache.maven.it;
 class LauncherException
     extends Exception
 {
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 1L;
 
-    public LauncherException( String message )
+    LauncherException( String message )
     {
         super( message );
     }
 
-    public LauncherException( String message, Throwable cause )
+    LauncherException( String message, Throwable cause )
     {
         super( message, cause );
     }


=====================================
src/main/java/org/apache/maven/it/VerificationException.java
=====================================
@@ -21,11 +21,15 @@ package org.apache.maven.it;
 
 /**
  * @author Jason van Zyl
- * @version $Id: VerificationException.java 609583 2008-01-07 12:18:57Z vsiveton $
  */
 public class VerificationException
     extends Exception
 {
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 1L;
+
     public VerificationException()
     {
     }


=====================================
src/main/java/org/apache/maven/it/Verifier.java
=====================================
@@ -34,6 +34,8 @@ import java.io.PrintStream;
 import java.io.Writer;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.text.DecimalFormat;
 import java.text.NumberFormat;
 import java.util.ArrayList;
@@ -50,8 +52,6 @@ import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
 
-import junit.framework.Assert;
-
 import org.apache.maven.shared.utils.StringUtils;
 import org.apache.maven.shared.utils.cli.CommandLineException;
 import org.apache.maven.shared.utils.cli.CommandLineUtils;
@@ -59,7 +59,7 @@ import org.apache.maven.shared.utils.cli.Commandline;
 import org.apache.maven.shared.utils.cli.StreamConsumer;
 import org.apache.maven.shared.utils.cli.WriterStreamConsumer;
 import org.apache.maven.shared.utils.io.FileUtils;
-import org.apache.maven.shared.utils.io.IOUtil;
+import org.junit.Assert;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
@@ -68,8 +68,6 @@ import org.xml.sax.helpers.DefaultHandler;
 /**
  * @author Jason van Zyl
  * @author <a href="mailto:brett at apache.org">Brett Porter</a>
- * @version $Id: Verifier.java 1683864 2015-06-05 20:41:57Z tibordigana $
- * @noinspection UseOfSystemOutOrSystemErr, RefusedBequest, UnusedDeclaration
  */
 public class Verifier
 {
@@ -105,23 +103,32 @@ public class Verifier
 
     private boolean debug;
 
+    /** 
+     * If {@code true} uses {@link ForkedLauncher}, if {@code false} uses {@link Embedded3xLauncher},
+     * otherwise considers the value {@link #forkMode}.
+     */
     private Boolean forkJvm;
 
     private String logFileName = LOG_FILENAME;
 
-    private String defaultMavenHome;
-
-    private String defaultClassworldConf;
-
-    private String defaultClasspath;
+    private String mavenHome;
 
     // will launch mvn with --debug 
     private boolean mavenDebug = false;
 
+    /**
+     * Either "auto" (use {@link ForkedLauncher} when {@link #environmentVariables} is not empty,
+     * otherwise use {@link Embedded3xLauncher}) , "embedder" (always use {@link Embedded3xLauncher})
+     * or something else (always use {@link ForkedLauncher}).
+     * Set through system property {@code verifier.forkMode}.
+     * Only relevant if {@link #forkJvm} is {@code null}.
+     */
     private String forkMode;
 
     private boolean debugJvm = false;
 
+    private boolean useWrapper;
+
     private static MavenLauncher embeddedLauncher;
 
     public Verifier( String basedir )
@@ -163,11 +170,23 @@ public class Verifier
     public Verifier( String basedir, String settingsFile, boolean debug, boolean forkJvm, String[] defaultCliOptions )
         throws VerificationException
     {
-        this( basedir, settingsFile, debug, (Boolean) forkJvm, defaultCliOptions );
+        this( basedir, settingsFile, debug, forkJvm, defaultCliOptions, null );
+    }
+
+    public Verifier( String basedir, String settingsFile, boolean debug, String mavenHome ) 
+            throws VerificationException
+    {
+        this( basedir, settingsFile, debug, null, DEFAULT_CLI_OPTIONS, mavenHome );
     }
 
-    private Verifier( String basedir, String settingsFile, boolean debug, Boolean forkJvm, String[] defaultCliOptions )
+    public Verifier( String basedir, String settingsFile, boolean debug, String mavenHome, String[] defaultCliOptions ) 
         throws VerificationException
+    {
+        this( basedir, settingsFile, debug, null, defaultCliOptions, mavenHome );
+    }
+
+    private Verifier( String basedir, String settingsFile, boolean debug, Boolean forkJvm, String[] defaultCliOptions,
+            String mavenHome ) throws VerificationException
     {
         this.basedir = basedir;
 
@@ -184,9 +203,18 @@ public class Verifier
         setDebug( debug );
 
         findLocalRepo( settingsFile );
-        findDefaultMavenHome();
+        if ( mavenHome == null )
+        {
+            this.mavenHome = getDefaultMavenHome();
+            useWrapper = Files.exists( Paths.get( getBasedir(), "mvnw" ) );
+        }
+        else
+        {
+            this.mavenHome = mavenHome;
+            useWrapper = false;
+        }
 
-        if ( StringUtils.isEmpty( defaultMavenHome ) && StringUtils.isEmpty( forkMode ) )
+        if ( StringUtils.isEmpty( mavenHome ) && StringUtils.isEmpty( forkMode ) )
         {
             forkMode = "auto";
         }
@@ -194,12 +222,9 @@ public class Verifier
         this.defaultCliOptions = defaultCliOptions == null ? new String[0] : defaultCliOptions.clone();
     }
 
-    private void findDefaultMavenHome()
-        throws VerificationException
+    private static String getDefaultMavenHome()
     {
-        defaultClasspath = System.getProperty( "maven.bootclasspath" );
-        defaultClassworldConf = System.getProperty( "classworlds.conf" );
-        defaultMavenHome = System.getProperty( "maven.home" );
+        String defaultMavenHome = System.getProperty( "maven.home" );
 
         if ( defaultMavenHome == null )
         {
@@ -215,6 +240,7 @@ public class Verifier
                 defaultMavenHome = f.getAbsolutePath();
             }
         }
+        return defaultMavenHome;
     }
 
     public void setLocalRepo( String localRepo )
@@ -281,7 +307,7 @@ public class Verifier
         for ( String line : lines )
         {
             // A hack to keep stupid velocity resource loader errors from triggering failure
-            if ( line.contains( "[ERROR]" ) && !isVelocityError( line ) )
+            if ( stripAnsi( line ).contains( "[ERROR]" ) && !isVelocityError( line ) )
             {
                 throw new VerificationException( "Error in execution: " + line );
             }
@@ -304,7 +330,7 @@ public class Verifier
      * Throws an exception if the text is not present in the log.
      *
      * @param text the text to assert present
-     * @throws VerificationException
+     * @throws VerificationException if text is not found in log
      */
     public void verifyTextInLog( String text )
         throws VerificationException
@@ -314,7 +340,7 @@ public class Verifier
         boolean result = false;
         for ( String line : lines )
         {
-            if ( line.contains( text ) )
+            if ( stripAnsi( line ).contains( text ) )
             {
                 result = true;
                 break;
@@ -326,30 +352,20 @@ public class Verifier
         }
     }
 
+    public static String stripAnsi( String msg )
+    {
+        return msg.replaceAll( "\u001B\\[[;\\d]*[ -/]*[@-~]", "" );
+    }
+
     public Properties loadProperties( String filename )
         throws VerificationException
     {
         Properties properties = new Properties();
 
-        try
+        File propertiesFile = new File( getBasedir(), filename );
+        try ( FileInputStream fis = new FileInputStream( propertiesFile ) ) 
         {
-            File propertiesFile = new File( getBasedir(), filename );
-            if ( propertiesFile.exists() )
-            {
-                FileInputStream fis = new FileInputStream( propertiesFile );
-                try
-                {
-                    properties.load( fis );
-                }
-                finally
-                {
-                    fis.close();
-                }
-            }
-        }
-        catch ( FileNotFoundException e )
-        {
-            throw new VerificationException( "Error reading properties file", e );
+            properties.load( fis );
         }
         catch ( IOException e )
         {
@@ -374,20 +390,8 @@ public class Verifier
     {
         List<String> lines = new ArrayList<String>();
 
-        File file = new File( getBasedir(), filename );
-
-        BufferedReader reader = null;
-        try
+        try ( BufferedReader reader = getReader( filename, encoding ) )
         {
-            if ( StringUtils.isNotEmpty( encoding ) )
-            {
-                reader = new BufferedReader( new InputStreamReader( new FileInputStream( file ), encoding ) );
-            }
-            else
-            {
-                reader = new BufferedReader( new FileReader( file ) );
-            }
-
             String line;
             while ( ( line = reader.readLine() ) != null )
             {
@@ -397,14 +401,24 @@ public class Verifier
                 }
             }
         }
-        finally
-        {
-            IOUtil.close( reader );
-        }
 
         return lines;
     }
 
+    private BufferedReader getReader( String filename, String encoding ) throws IOException
+    {
+        File file = new File( getBasedir(), filename );
+
+        if ( StringUtils.isNotEmpty( encoding ) )
+        {
+            return new BufferedReader( new InputStreamReader( new FileInputStream( file ), encoding ) );
+        }
+        else
+        {
+            return new BufferedReader( new FileReader( file ) );
+        }
+    }
+
     public List<String> loadFile( String basedir, String filename, boolean hasCommand )
         throws VerificationException
     {
@@ -416,14 +430,10 @@ public class Verifier
     {
         List<String> lines = new ArrayList<String>();
 
-        BufferedReader reader = null;
-
         if ( file.exists() )
         {
-            try
+            try ( BufferedReader reader = new BufferedReader( new FileReader( file ) ) )
             {
-                reader = new BufferedReader( new FileReader( file ) );
-
                 String line = reader.readLine();
 
                 while ( line != null )
@@ -436,8 +446,6 @@ public class Verifier
                     }
                     line = reader.readLine();
                 }
-
-                reader.close();
             }
             catch ( FileNotFoundException e )
             {
@@ -447,10 +455,6 @@ public class Verifier
             {
                 throw new VerificationException( e );
             }
-            finally
-            {
-                IOUtil.close( reader );
-            }
         }
 
         return lines;
@@ -547,16 +551,16 @@ public class Verifier
             a[i] = tok.nextToken();
         }
 
-        String org = a[0];
-        String name = a[1];
+        String groupId = a[0];
+        String artifactId = a[1];
         String version = a[2];
         String ext = a[3];
-        return getArtifactPath( org, name, version, ext );
+        return getArtifactPath( groupId, artifactId, version, ext );
     }
 
-    public String getArtifactPath( String org, String name, String version, String ext )
+    public String getArtifactPath( String groupId, String artifactId, String version, String ext )
     {
-        return getArtifactPath( org, name, version, ext, null );
+        return getArtifactPath( groupId, artifactId, version, ext, null );
     }
 
     /**
@@ -793,23 +797,22 @@ public class Verifier
 
             cli.setWorkingDirectory( basedir );
 
-            Writer logWriter = new FileWriter( new File( basedir, LOG_FILENAME ) );
-
-            StreamConsumer out = new WriterStreamConsumer( logWriter );
-
-            StreamConsumer err = new WriterStreamConsumer( logWriter );
+            try ( Writer logWriter = new FileWriter( new File( basedir, LOG_FILENAME ) ) ) 
+            {
+                StreamConsumer out = new WriterStreamConsumer( logWriter );
 
-            System.out.println( "Command: " + CommandLineUtils.toString( cli.getCommandline() ) );
+                StreamConsumer err = new WriterStreamConsumer( logWriter );
 
-            int ret = CommandLineUtils.executeCommandLine( cli, out, err );
+                System.out.println( "Command: " + CommandLineUtils.toString( cli.getCommandline() ) );
 
-            logWriter.close();
+                int ret = CommandLineUtils.executeCommandLine( cli, out, err );
 
-            if ( ret > 0 )
-            {
-                System.err.println( "Exit code: " + ret );
+                if ( ret > 0 )
+                {
+                    System.err.println( "Exit code: " + ret );
 
-                throw new VerificationException();
+                    throw new VerificationException();
+                }
             }
         }
         catch ( CommandLineException e )
@@ -984,8 +987,18 @@ public class Verifier
      * There are 226 references to this method in Maven core ITs. In most (all?) cases it is used together with
      * {@link #newDefaultFilterProperties()}. Need to remove both methods and update all clients eventually/
      * 
+     * @param srcPath          The path to the input file, relative to the base directory, must not be
+     *                         <code>null</code>.
+     * @param dstPath          The path to the output file, relative to the base directory and possibly equal to the
+     *                         input file, must not be <code>null</code>.
+     * @param fileEncoding     The file encoding to use, may be <code>null</code> or empty to use the platform's default
+     *                         encoding.
+     * @param filterProperties The mapping from tokens to replacement values, must not be <code>null</code>.
+     * @return The path to the filtered output file, never <code>null</code>.
+     * @throws IOException If the file could not be filtered.
      * @deprecated use {@link #filterFile(String, String, String, Map)}
      */
+    @Deprecated
     @SuppressWarnings( { "rawtypes", "unchecked" } )
     public File filterFile( String srcPath, String dstPath, String fileEncoding, Properties filterProperties )
         throws IOException
@@ -1022,11 +1035,28 @@ public class Verifier
         return filterProperties;
     }
 
+    /**
+     * Verifies that the given file exists.
+     * 
+     * @param file the path of the file to check
+     * @throws VerificationException in case the given file does not exist
+     */
+    public void verifyFilePresent( String file ) throws VerificationException
+    {
+        verifyFilePresence( file, true );
+    }
+
+    /**
+     * 
+     * @param file the path of the file to check
+     * @deprecated Use {@link #verifyFilePresent(String)} instead.
+     */
+    @Deprecated
     public void assertFilePresent( String file )
     {
         try
         {
-            verifyExpectedResult( file, true );
+            verifyFilePresent( file );
         }
         catch ( VerificationException e )
         {
@@ -1035,35 +1065,75 @@ public class Verifier
     }
 
     /**
-     * Check that given file's content matches an regular expression. Note this method also checks that the file exists
-     * and is readable.
+     * Verifies the given file's content matches an regular expression. 
+     * Note this method also checks that the file exists and is readable.
      *
-     * @param file  the file to check.
-     * @param regex a regular expression.
+     * @param file the path of the file to check
+     * @param regex a regular expression
+     * @throws VerificationException in case the file was not found or its content does not match the given pattern
      * @see Pattern
      */
-    public void assertFileMatches( String file, String regex )
+    public void verifyFileContentMatches( String file, String regex ) throws VerificationException
     {
-        assertFilePresent( file );
+        verifyFilePresent( file );
         try
         {
             String content = FileUtils.fileRead( file );
             if ( !Pattern.matches( regex, content ) )
             {
-                Assert.fail( "Content of " + file + " does not match " + regex );
+                throw new VerificationException( "Content of " + file + " does not match " + regex );
             }
         }
         catch ( IOException e )
+        {
+            throw new VerificationException( "Could not read from " + file + ": " + e.getMessage(), e );
+        }
+    }
+
+    /**
+     * Check the given file's content matches a regular expression. Note this method also checks that the file exists
+     * and is readable.
+     *
+     * @param file the path of the file to check
+     * @param regex a regular expression that the file's contents should match
+     * @see Pattern
+     * @deprecated Use {@link #verifyFileContentMatches(String, String)} instead.
+     */
+    @Deprecated
+    public void assertFileMatches( String file, String regex )
+    {
+        try
+        {
+            verifyFileContentMatches( file, regex );
+        }
+        catch ( VerificationException e )
         {
             Assert.fail( e.getMessage() );
         }
     }
 
+    /**
+     * Verifies that the given file does not exist.
+     * 
+     * @param file the path of the file to check
+     * @throws VerificationException if the given file exists
+     */
+    public void verifyFileNotPresent( String file ) throws VerificationException
+    {
+        verifyFilePresence( file, false );
+    }
+
+    /**
+     * 
+     * @param file the path of the file to check
+     * @deprecated Use {@link #verifyFileNotPresent(String)} instead.
+     */
+    @Deprecated
     public void assertFileNotPresent( String file )
     {
         try
         {
-            verifyExpectedResult( file, false );
+            verifyFileNotPresent( file );
         }
         catch ( VerificationException e )
         {
@@ -1071,30 +1141,74 @@ public class Verifier
         }
     }
 
-    private void verifyArtifactPresence( boolean wanted, String org, String name, String version, String ext )
+    private void verifyArtifactPresence( boolean wanted, String groupId, String artifactId, String version, String ext )
+                    throws VerificationException
     {
-        List<String> files = getArtifactFileNameList( org, name, version, ext );
+        List<String> files = getArtifactFileNameList( groupId, artifactId, version, ext );
         for ( String fileName : files )
         {
-            try
-            {
-                verifyExpectedResult( fileName, wanted );
-            }
-            catch ( VerificationException e )
-            {
-                Assert.fail( e.getMessage() );
-            }
+            verifyFilePresence( fileName, wanted );
+        }
+    }
+
+    /**
+     * Verifies that the artifact given through its Maven coordinates exists.
+     * 
+     * @param groupId the groupId of the artifact (must not be null)
+     * @param artifactId the artifactId of the artifact (must not be null)
+     * @param version the version of the artifact (must not be null)
+     * @param ext the extension of the artifact (must not be null)
+     * @throws VerificationException if the given artifact does not exist
+     */
+    public void verifyArtifactPresent( String groupId, String artifactId, String version, String ext )
+                    throws VerificationException
+    {
+        verifyArtifactPresence( true, groupId, artifactId, version, ext );
+    }
+
+    /**
+     * Verifies that the artifact given through its Maven coordinates does not exist.
+     * 
+     * @param groupId the groupId of the artifact (must not be null)
+     * @param artifactId the artifactId of the artifact (must not be null)
+     * @param version the version of the artifact (must not be null)
+     * @param ext the extension of the artifact (must not be null)
+     * @throws VerificationException if the given artifact exists
+     */
+    public void verifyArtifactNotPresent( String groupId, String artifactId, String version, String ext )
+                    throws VerificationException
+    {
+        verifyArtifactPresence( false, groupId, artifactId, version, ext );
+    }
+
+    private void assertArtifactPresence( boolean wanted, String org, String name, String version, String ext )
+    {
+        try
+        {
+            verifyArtifactPresence( wanted, org, name, version, ext );
+        }
+        catch ( VerificationException e )
+        {
+            Assert.fail( e.getMessage() );
         }
     }
 
+    /**
+     * @deprecated Use {@link #verifyArtifactPresent(String, String, String, String)} instead.
+     */
+    @Deprecated
     public void assertArtifactPresent( String org, String name, String version, String ext )
     {
-        verifyArtifactPresence( true, org, name, version, ext );
+        assertArtifactPresence( true, org, name, version, ext );
     }
 
+    /**
+     * @deprecated Use {@link #verifyArtifactNotPresent(String, String, String, String)} instead.
+     */
+    @Deprecated
     public void assertArtifactNotPresent( String org, String name, String version, String ext )
     {
-        verifyArtifactPresence( false, org, name, version, ext );
+        assertArtifactPresence( false, org, name, version, ext );
     }
 
     private void verifyExpectedResult( String line )
@@ -1107,15 +1221,15 @@ public class Verifier
             wanted = false;
         }
 
-        verifyExpectedResult( line, wanted );
+        verifyFilePresence( line, wanted );
     }
 
-    private void verifyExpectedResult( String line, boolean wanted )
+    private void verifyFilePresence( String filePath, boolean wanted )
         throws VerificationException
     {
-        if ( line.indexOf( "!/" ) > 0 )
+        if ( filePath.indexOf( "!/" ) > 0 )
         {
-            String urlString = "jar:file:" + getBasedir() + "/" + line;
+            String urlString = "jar:file:" + getBasedir() + "/" + filePath;
 
             InputStream is = null;
             try
@@ -1128,14 +1242,14 @@ public class Verifier
                 {
                     if ( wanted )
                     {
-                        throw new VerificationException( "Expected JAR resource was not found: " + line );
+                        throw new VerificationException( "Expected JAR resource was not found: " + filePath );
                     }
                 }
                 else
                 {
                     if ( !wanted )
                     {
-                        throw new VerificationException( "Unwanted JAR resource was found: " + line );
+                        throw new VerificationException( "Unwanted JAR resource was found: " + filePath );
                     }
                 }
             }
@@ -1147,7 +1261,7 @@ public class Verifier
             {
                 if ( wanted )
                 {
-                    throw new VerificationException( "Error looking for JAR resource: " + line );
+                    throw new VerificationException( "Error looking for JAR resource: " + filePath );
                 }
             }
             finally
@@ -1167,15 +1281,15 @@ public class Verifier
         }
         else
         {
-            File expectedFile = new File( line );
+            File expectedFile = new File( filePath );
 
             // NOTE: On Windows, a path with a leading (back-)slash is relative to the current drive
             if ( !expectedFile.isAbsolute() && !expectedFile.getPath().startsWith( File.separator ) )
             {
-                expectedFile = new File( getBasedir(), line );
+                expectedFile = new File( getBasedir(), filePath );
             }
 
-            if ( line.indexOf( '*' ) > -1 )
+            if ( filePath.indexOf( '*' ) > -1 )
             {
                 File parent = expectedFile.getParentFile();
 
@@ -1265,8 +1379,6 @@ public class Verifier
         // Use a strategy for finding the maven executable, John has a simple method like this
         // but a little strategy + chain of command would be nicer.
 
-        String mavenHome = defaultMavenHome;
-
         if ( mavenHome != null )
         {
             return mavenHome + "/bin/mvn";
@@ -1367,7 +1479,7 @@ public class Verifier
             System.err.println( "Exit code: " + ret );
 
             throw new VerificationException(
-                "Exit code was non-zero: " + ret + "; command line and log = \n" + new File( defaultMavenHome,
+                "Exit code was non-zero: " + ret + "; command line and log = \n" + new File( mavenHome,
                                                                                              "bin/mvn" ) + " "
                     + StringUtils.join( args.iterator(), " " ) + "\n" + getLogContents( logFile ) );
         }
@@ -1377,7 +1489,11 @@ public class Verifier
         throws LauncherException
     {
         boolean fork;
-        if ( forkJvm != null )
+        if ( useWrapper )
+        {
+            fork = true;
+        }
+        else if ( forkJvm != null )
         {
             fork = forkJvm;
         }
@@ -1413,7 +1529,7 @@ public class Verifier
         }
         else
         {
-            return new ForkedLauncher( defaultMavenHome, envVars, debugJvm );
+            return new ForkedLauncher( mavenHome, envVars, debugJvm, useWrapper );
         }
     }
 
@@ -1422,39 +1538,41 @@ public class Verifier
     {
         if ( embeddedLauncher == null )
         {
-            if ( StringUtils.isEmpty( defaultMavenHome ) )
+            if ( StringUtils.isEmpty( mavenHome ) )
             {
                 embeddedLauncher = Embedded3xLauncher.createFromClasspath();
             }
             else
             {
-                embeddedLauncher =
-                    Embedded3xLauncher.createFromMavenHome( defaultMavenHome, defaultClassworldConf, getClasspath() );
+                String defaultClasspath = System.getProperty( "maven.bootclasspath" );
+                String defaultClassworldConf = System.getProperty( "classworlds.conf" );
+                embeddedLauncher = Embedded3xLauncher.createFromMavenHome( mavenHome, defaultClassworldConf, 
+                        parseClasspath( defaultClasspath ) );
             }
         }
     }
 
-    private List<URL> getClasspath()
+    private static List<URL> parseClasspath( String classpath )
         throws LauncherException
     {
-        if ( defaultClasspath == null )
+        if ( classpath == null )
         {
             return null;
         }
-        ArrayList<URL> classpath = new ArrayList<URL>();
-        StringTokenizer st = new StringTokenizer( defaultClasspath, File.pathSeparator );
+        ArrayList<URL> classpathUrls = new ArrayList<URL>();
+        StringTokenizer st = new StringTokenizer( classpath, File.pathSeparator );
         while ( st.hasMoreTokens() )
         {
             try
             {
-                classpath.add( new File( st.nextToken() ).toURI().toURL() );
+                classpathUrls.add( new File( st.nextToken() ).toURI().toURL() );
             }
             catch ( MalformedURLException e )
             {
-                throw new LauncherException( "Invalid launcher classpath " + defaultClasspath, e );
+                throw new LauncherException( "Invalid launcher classpath " + classpath, e );
             }
         }
-        return classpath;
+        return classpathUrls;
     }
 
     public String getMavenVersion()
@@ -1524,30 +1642,22 @@ public class Verifier
     private void displayLogFile()
     {
         System.out.println( "Log file contents:" );
-        BufferedReader reader = null;
-        try
+
+        try ( BufferedReader reader = 
+                        new BufferedReader( new FileReader( new File( getBasedir(), getLogFileName() ) ) ) )
         {
-            reader = new BufferedReader( new FileReader( new File( getBasedir(), getLogFileName() ) ) );
             String line = reader.readLine();
+            
             while ( line != null )
             {
                 System.out.println( line );
                 line = reader.readLine();
             }
-            reader.close();
-        }
-        catch ( FileNotFoundException e )
-        {
-            System.err.println( "Error: " + e );
         }
         catch ( IOException e )
         {
             System.err.println( "Error: " + e );
         }
-        finally
-        {
-            IOUtil.close( reader );
-        }
     }
 
     // ----------------------------------------------------------------------
@@ -1785,6 +1895,31 @@ public class Verifier
         System.out.println( "OK" );
     }
 
+    /**
+     * Verifies that the artifact given by its Maven coordinates exists and contains the given content.
+     * 
+     * @param groupId the groupId of the artifact (must not be null)
+     * @param artifactId the artifactId of the artifact (must not be null)
+     * @param version the version of the artifact (must not be null)
+     * @param ext the extension of the artifact (must not be null)
+     * @param content the expected content
+     * @throws IOException if reading from the artifact fails 
+     * @throws VerificationException if the content of the artifact differs
+     */
+    public void verifyArtifactContent( String groupId, String artifactId, String version, String ext, String content )
+        throws IOException, VerificationException
+    {
+        String fileName = getArtifactPath( groupId, artifactId, version, ext );
+        if ( content.equals( FileUtils.fileRead( fileName ) ) )
+        {
+            throw new VerificationException( "Content of " + fileName + " does not equal " + content );
+        }
+    }
+
+    /**
+     * @deprecated Use {@link #verifyArtifactContent(String, String, String, String, String)} instead.
+     */
+    @Deprecated
     public void assertArtifactContents( String org, String artifact, String version, String type, String contents )
         throws IOException
     {


=====================================
src/main/java/org/apache/maven/it/util/ResourceExtractor.java
=====================================
@@ -33,7 +33,7 @@ import org.apache.maven.shared.utils.io.IOUtil;
 
 
 /**
- *  @todo this can be replaced with plexus-archiver
+ *  TODO this can be replaced with plexus-archiver
  */
 public class ResourceExtractor
 {
@@ -141,6 +141,7 @@ public class ResourceExtractor
                         finally
                         {
                             IOUtil.close( fos );
+                            z.close();
                         }
                     }
                 }
@@ -156,6 +157,7 @@ public class ResourceExtractor
             finally
             {
                 IOUtil.close( fos );
+                z.close();
             }
         }
     }


=====================================
src/site/markdown/getting-started.md
=====================================
@@ -0,0 +1,150 @@
+<!--
+#
+# 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.
+#
+-->
+
+# Getting Started
+
+## Overview
+
+Using the `Verifier` consists out of three different phases
+
+1. Configure
+2. Run
+3. Verify
+
+## Configure
+
+The `Verifier` instance is constructed in the simplest case with just one argument taking the path name of the base directory containing the `pom.xml` of the project you want to build.
+
+```
+String baseDir = ...
+Verifier verifier = new Verifier( baseDir );
+```
+
+The configuration can be further tweaked with additional setter methods and/or constructors taking more parameters.
+
+### System Properties
+
+The following system properties are evaluated. None of them are required and in most cases the same behavior can also be achieved through constructor or setter method programmatically.
+
+| System Property | Description | Default Value |
+| --- | --- |
+| `verifier.forkMode` | The following values are supported: <br/>`auto` uses the forked launcher when environment variables are set<br/>`embedder` always uses the embedded launcher<br/>any other value leads to always using the forked launcher | `auto` |
+| `maven.home` | The directory containing the Maven executable in `bin/mvn` | not set |
+| `user.home` | Set by JRE, used for determining Maven default local repository path or the fallback Maven executable | always set by JRE |
+| `maven.bootclasspath` | Only relevant if Maven home could be determined and the embedded launcher is being used. Determines the classpath of the launcher. May contain multiple paths separated by the system specific path separator. | not set (using all JARs below `<Maven Home>/boot` as class path) |
+| `classworlds.conf` | Only relevant if Maven home could be determined and the embedded launcher is being used. The configuration file used by [Plexus Classworlds Loader][plexus-classwords]. | `<Maven Home>/bin/m2.conf`
+| `maven.repo.local` | Contains the path of the local Maven repository | Either repository path set in `settings.xml` or `<User Home>/.m2/repository` |
+| `maven.repo.local.layout` | Layout of the local Maven repository. Either `legacy` or `default` | `default` |
+
+### Finding Maven Executable
+
+The following mechanism determines the binary which is used for executing Maven. This is 
+
+- either the embedded launcher which uses
+    -  the `org.apache.maven.cli.MavenCli` class loaded from the context class loader (in case Maven Home could not be determined) or 
+    -  the [Plexus Classworlds Loader][plexus-classwords] (in case Maven Home could be determined)
+-  or the forked launcher
+
+Whether the embedded or the forked launcher are used depends on the field `forkJvm` set through the constructor or `setForkJvm` or as fallback on the value of system property `verifier.forkMode`.
+
+### Determining Maven Home Directory
+
+The following directories are considered as potential Maven home directory (relevant for both forked launcher and embedded launcher with  [Plexus Classworlds Loader][plexus-classwords]). The first existing directory from the list is used.
+
+1. Maven Home path given in the constructor
+2. System property `maven.home`
+3. Environment variable `M2_HOME`
+4. System property `user.home` suffixed with `/m2` (only considered if it contains `bin/mvn`)
+
+### Setting Maven Home for Embedded Launcher
+
+In order to pass `Maven Home` used for executing project itself to tests execution, `maven-surefire` can be configured like:
+
+```
+  <plugin>
+    <groupId>org.apache.maven.plugins</groupId>
+    <artifactId>maven-surefire-plugin</artifactId>
+    <configuration>
+      <systemPropertyVariables>
+        <maven.home>${maven.home}</maven.home>
+      </systemPropertyVariables>
+    </configuration>
+  </plugin>
+```
+
+### Class Path For Embedded Launcher
+
+In case when `Maven Home Directory` can not be determined, to use the embedded launcher it is important that some artifacts are in the class path. 
+For the Context Class Loader case this would mean the following dependencies are needed at least (for Maven 3.8.4):
+
+```
+<!-- embedder for testing Embedded3xLauncher with classpath -->
+<dependency>
+  <groupId>org.apache.maven</groupId>
+  <artifactId>maven-embedder</artifactId>
+  <version>3.8.4</version>
+  <scope>test</scope>
+</dependency>
+<!-- START transitive dependencies of embedder -->
+<dependency>
+  <groupId>org.slf4j</groupId>
+  <artifactId>slf4j-simple</artifactId>
+  <version>1.7.32</version>
+  <scope>test</scope>
+</dependency>
+<!-- required due to https://issues.apache.org/jira/browse/MNG-6561 -->
+<dependency>
+  <groupId>org.apache.maven</groupId>
+  <artifactId>maven-compat</artifactId>
+  <version>3.8.4</version>
+  <scope>test</scope>
+</dependency>
+<dependency>
+  <groupId>org.apache.maven.resolver</groupId>
+  <artifactId>maven-resolver-connector-basic</artifactId>
+  <version>1.6.3</version>
+  <scope>test</scope>
+</dependency>
+<dependency>
+  <groupId>org.apache.maven.resolver</groupId>
+  <artifactId>maven-resolver-transport-http</artifactId>
+  <version>1.6.3</version>
+  <scope>test</scope>
+</dependency>
+```
+
+## Run
+
+Calling `executeGoals` runs Maven with the given goals or phases and optionally some additional environment variables. It throws a `VerificationException` in case the execution is not successful (e.g. binary not found or exit code > 0). It is either using a forked JVM or is executed in the same JVM depending on the configuration.
+
+```
+verifier.executeGoals( "package" );
+```
+
+## Verify
+
+After executing the Maven goals there are several methods starting with prefix `verify` which allow you to check for the build result, check the log for certain contents and the existence of generated artifacts.
+
+The main method `verify(boolean)` takes into consideration a file named `expected-results.txt` being located in the base directory. Each line consists of a file path (optionally prefixed by `!`) and it is automatically verified that the file exists or is missing (in case the path starts with `!`).
+
+```
+verifier.verify( true ); // if true, throws an exception in case of errors in the build log
+```
+
+[plexus-classwords]: https://codehaus-plexus.github.io/plexus-classworlds/launcher.html


=====================================
src/site/markdown/index.md
=====================================
@@ -0,0 +1,24 @@
+<!--
+#
+# 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.
+#
+-->
+
+# About Apache Maven Verifier Component
+
+Provides a test harness for Maven integration tests. This is a library which can be used in own Java-based integration tests. Look at the [Getting Started guide](./getting-started.html) for more information on how to use it.
+
+More complex example usages can be found in the the [different integration tests](https://github.com/apache/maven-integration-testing/tree/master/core-it-suite/src/test/java/org/apache/maven/it) of [Maven Core Integration Tests](https://github.com/apache/maven-integration-testing). 
\ No newline at end of file


=====================================
src/site/site.xml
=====================================
@@ -24,10 +24,11 @@ under the License.
   <body>
     <menu name="Overview">
       <item name="Introduction" href="index.html"/>
+      <item name="Getting Started" href="getting-started.html" />
       <item name="JavaDocs" href="apidocs/index.html"/>
       <item name="Source Xref" href="xref/index.html"/>
       <!--item name="FAQ" href="faq.html"/-->
-      <!-- According to http://jira.codehaus.org/browse/MNGSITE-152 -->
+      <!-- According to https://issues.apache.org/jira/browse/MNGSITE-152 -->
       <item name="License" href="http://www.apache.org/licenses/"/>
       <item name="Download" href="download.html"/>
     </menu>


=====================================
src/site/xdoc/download.xml.vm
=====================================
@@ -34,7 +34,7 @@ under the License.
 
       <p>In order to guard against corrupted downloads/installations, it is highly recommended to
       <a href="http://www.apache.org/dev/release-signing#verifying-signature">verify the signature</a>
-      of the release bundles against the public <a href="http://www.apache.org/dist/maven/KEYS">KEYS</a> used by the Apache Maven
+      of the release bundles against the public <a href="https://www.apache.org/dist/maven/KEYS">KEYS</a> used by the Apache Maven
       developers.</p>
 
       <p>${project.name} is distributed under the <a href="http://www.apache.org/licenses/">Apache License, version 2.0</a>.</p>
@@ -108,8 +108,8 @@ under the License.
           <tr>
             <td>${project.name} ${project.version} (Source zip)</td>
             <td><a href="[preferred]maven/shared/${project.artifactId}-${project.version}-source-release.zip">maven/shared/${project.artifactId}-${project.version}-source-release.zip</a></td>
-            <td><a href="http://www.apache.org/dist/maven/shared/${project.artifactId}-${project.version}-source-release.zip.md5">maven/shared/${project.artifactId}-${project.version}-source-release.zip.md5</a></td>
-            <td><a href="http://www.apache.org/dist/maven/shared/${project.artifactId}-${project.version}-source-release.zip.asc">maven/shared/${project.artifactId}-${project.version}-source-release.zip.asc</a></td>
+            <td><a href="https://www.apache.org/dist/maven/shared/${project.artifactId}-${project.version}-source-release.zip.sha512">maven/shared/${project.artifactId}-${project.version}-source-release.zip.sha512</a></td>
+            <td><a href="https://www.apache.org/dist/maven/shared/${project.artifactId}-${project.version}-source-release.zip.asc">maven/shared/${project.artifactId}-${project.version}-source-release.zip.asc</a></td>
           </tr>
         </tbody>
       </table>


=====================================
src/test/java/org/apache/maven/it/Embedded3xLauncherTest.java
=====================================
@@ -0,0 +1,66 @@
+package org.apache.maven.it;
+
+/*
+ * 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 java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Properties;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+
+public class Embedded3xLauncherTest
+{
+    @Rule
+    public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+
+    private final String workingDir = Paths.get( "src/test/resources" ).toAbsolutePath().toString();
+
+    @Test
+    public void testWithClasspath() throws Exception
+    {
+        MavenLauncher launcher = Embedded3xLauncher.createFromClasspath();
+        runLauncher( launcher );
+    }
+
+    @Test
+    public void testWithMavenHome() throws Exception
+    {
+        MavenLauncher launcher = Embedded3xLauncher.createFromMavenHome(
+            System.getProperty( "maven.home" ), null, null );
+        runLauncher( launcher );
+    }
+
+    private void runLauncher( MavenLauncher launcher ) throws Exception
+    {
+        File logFile = temporaryFolder.newFile( "build.log" );
+
+        int exitCode = launcher.run( new String[] {"clean"}, new Properties(), workingDir, logFile );
+
+        assertThat( "exit code unexpected, build log: " + System.lineSeparator() +
+                        new String( Files.readAllBytes( logFile.toPath() ) ), exitCode, is( 0 ) );
+    }
+}


=====================================
src/test/java/org/apache/maven/it/ForkedLauncherTest.java
=====================================
@@ -0,0 +1,99 @@
+package org.apache.maven.it;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/*
+ * 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 static org.hamcrest.Matchers.is;
+import static org.junit.Assert.fail;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Properties;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+public class ForkedLauncherTest
+{
+    @Rule
+    public TemporaryFolder temporaryFolder = new TemporaryFolder();
+    
+    private ForkedLauncher launcher;
+    
+    private final String workingDir = Paths.get( "src/test/resources/wrapper-project" ).toAbsolutePath().toString();
+    
+    @Test
+    public void mvnw() throws Exception
+    {
+        launcher = new ForkedLauncher( ".", Collections.<String, String>emptyMap(), false, true );
+        File logFile = temporaryFolder.newFile( "build.log" );
+
+        int exitCode = launcher.run( new String[0], new Properties(), workingDir, logFile );
+
+        // most likely this contains the exception in case exitCode != 0
+        expectFileLine( logFile, "Hello World" );
+
+        assertThat( "exit code", exitCode, is ( 0 ) );
+    }
+
+    @Test
+    public void mvnwDebug() throws Exception
+    {
+        launcher = new ForkedLauncher( ".", Collections.<String, String>emptyMap(), true, true );
+        File logFile = temporaryFolder.newFile( "build.log" );
+
+        int exitCode = launcher.run( new String[0], new Properties(), workingDir, logFile );
+
+        // most likely this contains the exception in case exitCode != 0
+        expectFileLine( logFile, "Hello World" );
+
+        assertThat( "exit code", exitCode , is ( 0 ) );
+    }
+
+    static void expectFileLine( File file, String expectedline ) throws IOException
+    {
+        try ( FileReader fr = new FileReader( file );
+              BufferedReader br = new BufferedReader( fr ) )
+        {
+            Collection<String> text = new ArrayList<>();
+            String line;
+            while ( ( line = br.readLine() ) != null )
+            {
+                if ( expectedline.equals( line ) )
+                {
+                    return;
+                }
+                text.add( line );
+            }
+
+            String message = "%s doesn't contain '%s', was:\n%s";
+            fail( String.format( message, file.getName(), expectedline, text ) );
+        }
+    }
+
+}


=====================================
src/test/java/org/apache/maven/it/VerifierTest.java
=====================================
@@ -19,25 +19,51 @@ package org.apache.maven.it;
  * under the License.
  */
 
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.nio.file.Paths;
 import java.util.Arrays;
+import java.util.Properties;
 
-import junit.framework.TestCase;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.junit.rules.TemporaryFolder;
+
+import static org.hamcrest.CoreMatchers.isA;
+import static org.junit.Assert.assertEquals;
 
 public class VerifierTest
-    extends TestCase
 {
+    @Rule
+    public final ExpectedException exception = ExpectedException.none();
+
+    @Rule
+    public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
     private void check( String expected, String... lines )
     {
         assertEquals( expected, ForkedLauncher.extractMavenVersion( Arrays.asList( lines ) ) );
     }
 
+    @Test
     public void testSunBug9009028ForJdk()
     {
-        final String version = System.getProperty( "java.version" );
-        System.setProperties( null );
-        assertEquals( version, System.getProperty( "java.version" ) );
+        Properties oldProperties = System.getProperties();
+        try
+        {
+            final String version = System.getProperty( "java.version" );
+            System.setProperties( null );
+            assertEquals( version, System.getProperty( "java.version" ) );
+        }
+        finally
+        {
+            System.setProperties( oldProperties );
+        }
     }
 
+    @Test
     public void testExtractMavenVersion()
     {
         check( "2.0.6", "Maven version: 2.0.6" );
@@ -58,6 +84,7 @@ public class VerifierTest
                "OS name: \"linux\" version: \"3.11.0-13-generic\" arch: \"amd64\" Family: \"unix\"" );
     }
 
+    @Test
     public void testFileInJarPresent()
         throws VerificationException
     {
@@ -67,4 +94,31 @@ public class VerifierTest
         verifier.assertFileNotPresent( "mshared104.jar!/fud.xml" );
     }
 
+    @Test
+    public void testStripAnsi()
+    {
+        assertEquals( "--- plugin:version:goal (id) @ artifactId ---",
+                      Verifier.stripAnsi( "\u001B[1m--- \u001B[0;32mplugin:version:goal\u001B[0;1m (id)\u001B[m @ "
+                                              + "\u001B[36martifactId\u001B[0;1m ---\u001B[m" ) );
+    }
+
+    @Test
+    public void testLoadPropertiesFNFE() throws VerificationException
+    {
+        exception.expectCause( isA( FileNotFoundException.class ) );
+
+        Verifier verifier = new Verifier( "src/test/resources" );
+        verifier.loadProperties( "unknown.properties" );
+    }
+
+    @Test
+    public void testDedicatedMavenHome() throws VerificationException, IOException
+    {
+        String mavenHome = Paths.get( "src/test/resources/maven-home" ).toAbsolutePath().toString();
+        Verifier verifier = new Verifier( temporaryFolder.getRoot().toString(), null, false, mavenHome );
+        verifier.executeGoal( "some-goal" );
+        File logFile = new File( verifier.getBasedir(), verifier.getLogFileName() );
+        ForkedLauncherTest.expectFileLine( logFile, "Hello World from Maven Home" );
+    }
+
 }


=====================================
src/test/resources/maven-home/bin/mvn
=====================================
@@ -0,0 +1,20 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# 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.
+# ----------------------------------------------------------------------------
+echo Hello World from Maven Home


=====================================
src/test/resources/maven-home/bin/mvn.cmd
=====================================
@@ -0,0 +1,21 @@
+ at REM ----------------------------------------------------------------------------
+ at REM Licensed to the Apache Software Foundation (ASF) under one
+ at REM or more contributor license agreements.  See the NOTICE file
+ at REM distributed with this work for additional information
+ at REM regarding copyright ownership.  The ASF licenses this file
+ at REM to you under the Apache License, Version 2.0 (the
+ at REM "License"); you may not use this file except in compliance
+ at REM with the License.  You may obtain a copy of the License at
+ at REM
+ at REM    http://www.apache.org/licenses/LICENSE-2.0
+ at REM
+ at REM Unless required by applicable law or agreed to in writing,
+ at REM software distributed under the License is distributed on an
+ at REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ at REM KIND, either express or implied.  See the License for the
+ at REM specific language governing permissions and limitations
+ at REM under the License.
+ at REM ----------------------------------------------------------------------------
+ at echo off
+ at ECHO Hello World from Maven Home
+ at echo on
\ No newline at end of file


=====================================
src/test/resources/wrapper-project/mvnw
=====================================
@@ -0,0 +1,20 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# 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.
+# ----------------------------------------------------------------------------
+echo Hello World


=====================================
src/test/resources/wrapper-project/mvnw.cmd
=====================================
@@ -0,0 +1,21 @@
+ at REM ----------------------------------------------------------------------------
+ at REM Licensed to the Apache Software Foundation (ASF) under one
+ at REM or more contributor license agreements.  See the NOTICE file
+ at REM distributed with this work for additional information
+ at REM regarding copyright ownership.  The ASF licenses this file
+ at REM to you under the Apache License, Version 2.0 (the
+ at REM "License"); you may not use this file except in compliance
+ at REM with the License.  You may obtain a copy of the License at
+ at REM
+ at REM    http://www.apache.org/licenses/LICENSE-2.0
+ at REM
+ at REM Unless required by applicable law or agreed to in writing,
+ at REM software distributed under the License is distributed on an
+ at REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ at REM KIND, either express or implied.  See the License for the
+ at REM specific language governing permissions and limitations
+ at REM under the License.
+ at REM ----------------------------------------------------------------------------
+ at echo off
+ at ECHO Hello World
+ at echo on
\ No newline at end of file


=====================================
src/test/resources/wrapper-project/mvnwDebug
=====================================
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# -----------------------------------------------------------------------------
+# Apache Maven Debug Script
+#
+# Environment Variable Prerequisites
+#
+#   JAVA_HOME       Must point at your Java Development Kit installation.
+#   MAVEN_OPTS      (Optional) Java runtime options used when Maven is executed.
+#   MAVEN_SKIP_RC   (Optional) Flag to disable loading of mavenrc files.
+# -----------------------------------------------------------------------------
+
+MAVEN_DEBUG_OPTS=
+
+echo Preparing to execute Maven Wrapper in debug mode
+
+env MAVEN_OPTS="$MAVEN_OPTS" MAVEN_DEBUG_OPTS="$MAVEN_DEBUG_OPTS" "`dirname "$0"`/mvnw" "$@"


=====================================
src/test/resources/wrapper-project/mvnwDebug.cmd
=====================================
@@ -0,0 +1,33 @@
+ at REM Licensed to the Apache Software Foundation (ASF) under one
+ at REM or more contributor license agreements.  See the NOTICE file
+ at REM distributed with this work for additional information
+ at REM regarding copyright ownership.  The ASF licenses this file
+ at REM to you under the Apache License, Version 2.0 (the
+ at REM "License"); you may not use this file except in compliance
+ at REM with the License.  You may obtain a copy of the License at
+ at REM
+ at REM    http://www.apache.org/licenses/LICENSE-2.0
+ at REM
+ at REM Unless required by applicable law or agreed to in writing,
+ at REM software distributed under the License is distributed on an
+ at REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ at REM KIND, either express or implied.  See the License for the
+ at REM specific language governing permissions and limitations
+ at REM under the License.
+
+ at REM -----------------------------------------------------------------------------
+ at REM Apache Maven Debug Script
+ at REM
+ at REM Environment Variable Prerequisites
+ at REM
+ at REM   JAVA_HOME          Must point at your Java Development Kit installation.
+ at REM   MAVEN_BATCH_ECHO  (Optional) Set to 'on' to enable the echoing of the batch commands.
+ at REM   MAVEN_BATCH_PAUSE (Optional) set to 'on' to wait for a key stroke before ending.
+ at REM   MAVEN_OPTS        (Optional) Java runtime options used when Maven is executed.
+ at REM   MAVEN_SKIP_RC     (Optional) Flag to disable loading of mavenrc files.
+ at REM -----------------------------------------------------------------------------
+
+ at setlocal
+ at set MAVEN_DEBUG_OPTS=
+
+ at call "%~dp0"mvnw.cmd %*



View it on GitLab: https://salsa.debian.org/java-team/maven-verifier/-/compare/1ca7787075ca9c6e0f2e7df4354ba500b0ed4d17...28a8c4775b657d21600fc06806e2fc6a52f04d55

-- 
View it on GitLab: https://salsa.debian.org/java-team/maven-verifier/-/compare/1ca7787075ca9c6e0f2e7df4354ba500b0ed4d17...28a8c4775b657d21600fc06806e2fc6a52f04d55
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-java-commits/attachments/20230111/9c1bb778/attachment.htm>


More information about the pkg-java-commits mailing list