This is an automated email from the ASF dual-hosted git repository. tibordigana pushed a commit to branch 3.0.0-M2 in repository https://gitbox.apache.org/repos/asf/maven-surefire.git
commit 85105161f413f9cfa160a4a86c6d6a5926c0d6f9 Author: Tibor17 <tibordig...@apache.org> AuthorDate: Sun Nov 11 23:38:32 2018 +0100 [SUREFIRE-1597] ModularClasspathForkConfiguration with debug logs (@args file and its path on file system) --- .../booterclient/DefaultForkConfiguration.java | 9 ++- .../ModularClasspathForkConfiguration.java | 83 ++++++++++++---------- .../ModularClasspathForkConfigurationTest.java | 51 ++++++++----- 3 files changed, 88 insertions(+), 55 deletions(-) diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/DefaultForkConfiguration.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/DefaultForkConfiguration.java index 8722f52..fa99451 100644 --- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/DefaultForkConfiguration.java +++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/DefaultForkConfiguration.java @@ -149,6 +149,11 @@ public abstract class DefaultForkConfiguration return cli; } + protected ConsoleLogger getLogger() + { + return log; + } + @Nonnull protected List<String> toCompleteClasspath( StartupConfiguration conf ) throws SurefireBooterForkException { @@ -163,8 +168,8 @@ public abstract class DefaultForkConfiguration Classpath providerClasspath = pathConfig.getProviderClasspath(); Classpath completeClasspath = join( join( bootClasspath, testClasspath ), providerClasspath ); - log.debug( completeClasspath.getLogMessage( "boot classpath:" ) ); - log.debug( completeClasspath.getCompactLogMessage( "boot(compact) classpath:" ) ); + getLogger().debug( completeClasspath.getLogMessage( "boot classpath:" ) ); + getLogger().debug( completeClasspath.getCompactLogMessage( "boot(compact) classpath:" ) ); return completeClasspath.getClassPath(); } diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/ModularClasspathForkConfiguration.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/ModularClasspathForkConfiguration.java index 59f86de..fb8c86a 100644 --- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/ModularClasspathForkConfiguration.java +++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/booterclient/ModularClasspathForkConfiguration.java @@ -35,7 +35,6 @@ import org.objectweb.asm.ModuleVisitor; import javax.annotation.Nonnegative; import javax.annotation.Nonnull; import javax.annotation.Nullable; -import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; @@ -49,6 +48,8 @@ import java.util.Properties; import static java.io.File.createTempFile; import static java.io.File.pathSeparatorChar; import static org.apache.maven.plugin.surefire.SurefireHelper.escapeToPlatformPath; +import static org.apache.maven.shared.utils.StringUtils.replace; +import static org.apache.maven.surefire.util.internal.StringUtils.NL; import static org.objectweb.asm.Opcodes.ASM7; /** @@ -116,86 +117,94 @@ public class ModularClasspathForkConfiguration throws IOException { File surefireArgs = createTempFile( "surefireargs", "", getTempDirectory() ); - if ( !isDebug() ) + if ( isDebug() ) + { + getLogger().debug( "Path to args file: " + surefireArgs.getCanonicalPath() ); + } + else { surefireArgs.deleteOnExit(); } - try ( BufferedWriter writer = new BufferedWriter( new FileWriter( surefireArgs ), 64 * 1024 ) ) + try ( FileWriter io = new FileWriter( surefireArgs ) ) { + StringBuilder args = new StringBuilder( 64 * 1024 ); if ( !modulePath.isEmpty() ) { - writer.write( "--module-path" ); - writer.newLine(); + args.append( "--module-path" ) + .append( ' ' ); for ( Iterator<String> it = modulePath.iterator(); it.hasNext(); ) { - writer.append( it.next() ); + args.append( it.next() ); if ( it.hasNext() ) { - writer.append( pathSeparatorChar ); + args.append( pathSeparatorChar ); } } - writer.newLine(); + args.append( NL ); } if ( !classPath.isEmpty() ) { - writer.write( "--class-path" ); - writer.newLine(); + args.append( "--class-path" ) + .append( ' ' ); for ( Iterator<String> it = classPath.iterator(); it.hasNext(); ) { - writer.append( it.next() ); + args.append( it.next() ); if ( it.hasNext() ) { - writer.append( pathSeparatorChar ); + args.append( pathSeparatorChar ); } } - writer.newLine(); + args.append( NL ); } final String moduleName = toModuleName( moduleDescriptor ); - writer.write( "--patch-module" ); - writer.newLine(); - writer.append( moduleName ) + args.append( "--patch-module" ) + .append( ' ' ) + .append( moduleName ) .append( '=' ) - .append( patchFile.getPath() ); - - writer.newLine(); + .append( patchFile.getPath() ) + .append( NL ); for ( String pkg : packages ) { - writer.write( "--add-exports" ); - writer.newLine(); - writer.append( moduleName ) + args.append( "--add-exports" ) + .append( ' ' ) + .append( moduleName ) .append( '/' ) .append( pkg ) .append( '=' ) - .append( "ALL-UNNAMED" ); - - writer.newLine(); + .append( "ALL-UNNAMED" ) + .append( NL ); } - writer.write( "--add-modules" ); - writer.newLine(); - writer.append( moduleName ); + args.append( "--add-modules" ) + .append( ' ' ) + .append( moduleName ) + .append( NL ); - writer.newLine(); - - writer.write( "--add-reads" ); - writer.newLine(); - writer.append( moduleName ) + args.append( "--add-reads" ) + .append( ' ' ) + .append( moduleName ) .append( '=' ) - .append( "ALL-UNNAMED" ); + .append( "ALL-UNNAMED" ) + .append( NL ); + + args.append( startClassName ); - writer.newLine(); + String argsFileContent = args.toString(); - writer.write( startClassName ); + if ( isDebug() ) + { + getLogger().debug( "args file content: " + replace( argsFileContent, NL, "; " ) ); + } - writer.newLine(); + io.write( argsFileContent ); return surefireArgs; } diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ModularClasspathForkConfigurationTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ModularClasspathForkConfigurationTest.java index 04145d9..c2b327e 100644 --- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ModularClasspathForkConfigurationTest.java +++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ModularClasspathForkConfigurationTest.java @@ -84,23 +84,42 @@ public class ModularClasspathForkConfigurationTest File jigsawArgsFile = config.createArgsFile( descriptor, modulePath, classPath, packages, patchFile, startClassName ); - assertThat( jigsawArgsFile ).isNotNull(); + assertThat( jigsawArgsFile ) + .isNotNull(); + List<String> argsFileLines = readAllLines( jigsawArgsFile.toPath(), UTF_8 ); - assertThat( argsFileLines ).hasSize( 13 ); - assertThat( argsFileLines.get( 0 ) ).isEqualTo( "--module-path" ); - assertThat( argsFileLines.get( 1 ) ).isEqualTo( "modular.jar" + pathSeparator + "target/classes" ); - assertThat( argsFileLines.get( 2 ) ).isEqualTo( "--class-path" ); + + assertThat( argsFileLines ) + .hasSize( 7 ); + + assertThat( argsFileLines.get( 0 ) ) + .isEqualTo( "--module-path" + + " modular.jar" + + pathSeparator + + "target/classes" ); + + assertThat( argsFileLines.get( 1 ) ) + .isEqualTo( "--class-path" + + " booter.jar" + + pathSeparator + + "non-modular.jar" + + pathSeparator + + patchFile.getPath() ); + + assertThat( argsFileLines.get( 2 ) ) + .isEqualTo( "--patch-module abc=" + patchFile.getPath() ); + assertThat( argsFileLines.get( 3 ) ) - .isEqualTo( "booter.jar" + pathSeparator + "non-modular.jar" + pathSeparator + patchFile.getPath() ); - assertThat( argsFileLines.get( 4 ) ).isEqualTo( "--patch-module" ); - assertThat( argsFileLines.get( 5 ) ).isEqualTo( "abc=" + patchFile.getPath() ); - assertThat( argsFileLines.get( 6 ) ).isEqualTo( "--add-exports" ); - assertThat( argsFileLines.get( 7 ) ).isEqualTo( "abc/org.apache.abc=ALL-UNNAMED" ); - assertThat( argsFileLines.get( 8 ) ).isEqualTo( "--add-modules" ); - assertThat( argsFileLines.get( 9 ) ).isEqualTo( "abc" ); - assertThat( argsFileLines.get( 10 ) ).isEqualTo( "--add-reads" ); - assertThat( argsFileLines.get( 11 ) ).isEqualTo( "abc=ALL-UNNAMED" ); - assertThat( argsFileLines.get( 12 ) ).isEqualTo( ForkedBooter.class.getName() ); + .isEqualTo( "--add-exports abc/org.apache.abc=ALL-UNNAMED" ); + + assertThat( argsFileLines.get( 4 ) ) + .isEqualTo( "--add-modules abc" ); + + assertThat( argsFileLines.get( 5 ) ) + .isEqualTo( "--add-reads abc=ALL-UNNAMED" ); + + assertThat( argsFileLines.get( 6 ) ) + .isEqualTo( ForkedBooter.class.getName() ); ModularClasspath modularClasspath = new ModularClasspath( descriptor, modulePath, packages, patchFile ); Classpath testClasspathUrls = new Classpath( singleton( "target" + separator + "test-classes" ) ); @@ -121,7 +140,7 @@ public class ModularClasspathForkConfigurationTest File argFile = new File( cli.getArguments()[0].substring( 1 ) ); assertThat( argFile ).isFile(); List<String> argsFileLines2 = readAllLines( argFile.toPath(), UTF_8 ); - assertThat( argsFileLines2 ).hasSize( 13 ); + assertThat( argsFileLines2 ).hasSize( 7 ); for ( int i = 0; i < argsFileLines2.size(); i++ ) { String line = argsFileLines2.get( i );