diff --git a/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProvider.java b/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProvider.java index 9f075c7918..12db34cc0c 100644 --- a/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProvider.java +++ b/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/JUnitPlatformProvider.java @@ -111,17 +111,7 @@ public Iterable> getSuites() } finally { - if ( launcher instanceof AutoCloseable ) - { - try - { - ( (AutoCloseable) launcher ).close(); - } - catch ( Exception e ) - { - throw new SurefireReflectionException( e ); - } - } + closeLauncher(); } } @@ -156,17 +146,6 @@ else if ( forkTestSet == null ) finally { runResult = reporterFactory.close(); - if ( launcher instanceof AutoCloseable ) - { - try - { - ( (AutoCloseable) launcher ).close(); - } - catch ( Exception e ) - { - throw new SurefireReflectionException( e ); - } - } } return runResult; } @@ -182,22 +161,37 @@ private TestsToRun scanClasspath() private void invokeAllTests( TestsToRun testsToRun, RunListener runListener ) { RunListenerAdapter adapter = new RunListenerAdapter( runListener ); - execute( testsToRun, adapter ); + try + { + execute( testsToRun, adapter ); + } + finally + { + closeLauncher(); + } // Rerun failing tests if requested int count = parameters.getTestRequest().getRerunFailingTestsCount(); if ( count > 0 && adapter.hasFailingTests() ) { for ( int i = 0; i < count; i++ ) { - // Replace the "discoveryRequest" so that it only specifies the failing tests - LauncherDiscoveryRequest discoveryRequest = buildLauncherDiscoveryRequestForRerunFailures( adapter ); - // Reset adapter's recorded failures and invoke the failed tests again - adapter.reset(); - launcher.execute( discoveryRequest, adapter ); - // If no tests fail in the rerun, we're done - if ( !adapter.hasFailingTests() ) + try + { + // Replace the "discoveryRequest" so that it only specifies the failing tests + LauncherDiscoveryRequest discoveryRequest = + buildLauncherDiscoveryRequestForRerunFailures( adapter ); + // Reset adapter's recorded failures and invoke the failed tests again + adapter.reset(); + launcher.execute( discoveryRequest, adapter ); + // If no tests fail in the rerun, we're done + if ( !adapter.hasFailingTests() ) + { + break; + } + } + finally { - break; + closeLauncher(); } } } @@ -231,6 +225,21 @@ private void execute( TestsToRun testsToRun, RunListenerAdapter adapter ) } ); } } + + private void closeLauncher() + { + if ( launcher instanceof AutoCloseable ) + { + try + { + ( (AutoCloseable) launcher ).close(); + } + catch ( Exception e ) + { + throw new SurefireReflectionException( e ); + } + } + } private LauncherDiscoveryRequest buildLauncherDiscoveryRequestForRerunFailures( RunListenerAdapter adapter ) { diff --git a/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/LazyLauncher.java b/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/LazyLauncher.java index caf28b95c3..6a1a3b3b38 100644 --- a/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/LazyLauncher.java +++ b/surefire-providers/surefire-junit-platform/src/main/java/org/apache/maven/surefire/junitplatform/LazyLauncher.java @@ -79,6 +79,8 @@ public void close() throws Exception if ( launcherSession != null ) { launcherSession.close(); + launcherSession = null; } + launcher = null; } }