This is an automated email from the ASF dual-hosted git repository. rfscholte pushed a commit to branch MJLINK-36 in repository https://gitbox.apache.org/repos/asf/maven-jlink-plugin.git
commit c00ec1d4ada4084aad57de249552884aa970c5c1 Author: Benjamin Marwell <[email protected]> AuthorDate: Mon Nov 16 12:04:51 2020 +0100 skip unnecessary jlinkArgsFile. --- .../MJLINK-40_includeLocales/verify.groovy | 16 ++-- .../maven/plugins/jlink/AbstractJLinkExecutor.java | 2 +- .../apache/maven/plugins/jlink/JLinkExecutor.java | 9 ++- .../org/apache/maven/plugins/jlink/JLinkMojo.java | 93 +++++++++------------- .../apache/maven/plugins/jlink/JLinkExecutor.java | 49 +----------- 5 files changed, 52 insertions(+), 117 deletions(-) diff --git a/src/it/projects/MJLINK-40_includeLocales/verify.groovy b/src/it/projects/MJLINK-40_includeLocales/verify.groovy index 1887547..c32508b 100644 --- a/src/it/projects/MJLINK-40_includeLocales/verify.groovy +++ b/src/it/projects/MJLINK-40_includeLocales/verify.groovy @@ -26,21 +26,15 @@ boolean result = false; try { - File target = new File( basedir, "target" ); - if ( !target.exists() || !target.isDirectory() ) + File buildLog = new File( basedir, "build.log" ); + if ( !buildLog.exists() || buildLog.isDirectory() ) { - System.err.println( "target file is missing or not a directory." ); - return false; - } - File jlinkArgs = new File( target, "jlinkArgs" ); - if ( !jlinkArgs.exists() || jlinkArgs.isDirectory() ) - { - System.err.println( "jlinkArgs file is missing or is a directory." ); + System.err.println( "build.log file is missing or is a directory." ); return false; } - def line = jlinkArgs.eachLine { line -> - if (line.equals('en,ja,de,*-IN')) + def line = buildLog.eachLine { line -> + if (line.contains('--include-locales, en,ja,de,*-IN')) { result = true; } diff --git a/src/main/java/org/apache/maven/plugins/jlink/AbstractJLinkExecutor.java b/src/main/java/org/apache/maven/plugins/jlink/AbstractJLinkExecutor.java index 16864b6..f6a6799 100644 --- a/src/main/java/org/apache/maven/plugins/jlink/AbstractJLinkExecutor.java +++ b/src/main/java/org/apache/maven/plugins/jlink/AbstractJLinkExecutor.java @@ -58,7 +58,7 @@ abstract class AbstractJLinkExecutor public abstract Optional<File> getJmodsFolder( /* nullable */ File sourceJdkModules ); - public abstract int executeJlink( File argsFile ) throws MojoExecutionException; + public abstract int executeJlink( List<String> jlinkArgs ) throws MojoExecutionException; public void addAllModules( Collection<String> modulesToAdd ) { diff --git a/src/main/java/org/apache/maven/plugins/jlink/JLinkExecutor.java b/src/main/java/org/apache/maven/plugins/jlink/JLinkExecutor.java index f025458..a9299c3 100644 --- a/src/main/java/org/apache/maven/plugins/jlink/JLinkExecutor.java +++ b/src/main/java/org/apache/maven/plugins/jlink/JLinkExecutor.java @@ -27,6 +27,7 @@ import org.codehaus.plexus.util.cli.Commandline; import java.io.File; import java.io.IOException; +import java.util.List; import java.util.Optional; /** @@ -76,20 +77,20 @@ class JLinkExecutor extends AbstractJLinkExecutor * @return the exit code ({@code 0} on success). */ @Override - public int executeJlink( File argsFile ) + public int executeJlink( List<String> jlinkArgs ) { getLog().info( "Toolchain in maven-jlink-plugin: jlink [ " + this.jLinkExec + " ]" ); - Commandline cmd = createJLinkCommandLine( argsFile ); + Commandline cmd = createJLinkCommandLine( jlinkArgs ); cmd.setExecutable( this.jLinkExec ); throw new UnsupportedOperationException( "not implemented" ); } - private Commandline createJLinkCommandLine( File argsFile ) + private Commandline createJLinkCommandLine( List<String> jlinkArgs ) { Commandline cmd = new Commandline(); - cmd.createArg().setValue( '@' + argsFile.getAbsolutePath() ); + jlinkArgs.forEach( arg -> cmd.createArg().setValue( arg ) ); return cmd; } diff --git a/src/main/java/org/apache/maven/plugins/jlink/JLinkMojo.java b/src/main/java/org/apache/maven/plugins/jlink/JLinkMojo.java index 790859e..c1ebfb6 100644 --- a/src/main/java/org/apache/maven/plugins/jlink/JLinkMojo.java +++ b/src/main/java/org/apache/maven/plugins/jlink/JLinkMojo.java @@ -21,7 +21,6 @@ package org.apache.maven.plugins.jlink; import java.io.File; import java.io.IOException; -import java.io.PrintStream; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -307,17 +306,9 @@ public class JLinkMojo ); jLinkExec.addAllModulePaths( pathsOfModules ); - File argsFile; - try - { - argsFile = createJlinkArgsFile( pathsOfModules, modulesToAdd ); - } - catch ( IOException e ) - { - throw new MojoExecutionException( e.getMessage() ); - } + List<String> jlinkArgs = createJlinkArgs( pathsOfModules, modulesToAdd ); - jLinkExec.executeJlink( argsFile ); + jLinkExec.executeJlink( jlinkArgs ); File createZipArchiveFromImage = createZipArchiveFromImage( buildDirectory, outputDirectoryImage ); @@ -514,126 +505,116 @@ public class JLinkMojo } } - private File createJlinkArgsFile( Collection<String> pathsOfModules, - Collection<String> modulesToAdd ) throws IOException + private List<String> createJlinkArgs( Collection<String> pathsOfModules, + Collection<String> modulesToAdd ) { - File file = new File( this.outputDirectoryImage.getParentFile(), "jlinkArgs" ); - if ( !getLog().isDebugEnabled() ) - { - file.deleteOnExit(); - } - file.getParentFile().mkdirs(); - file.createNewFile(); - - PrintStream argsFile = new PrintStream( file ); + List<String> jlinkArgs = new ArrayList<>(); if ( stripDebug ) { - argsFile.println( "--strip-debug" ); + jlinkArgs.add( "--strip-debug" ); } if ( bindServices ) { - argsFile.println( "--bind-services" ); + jlinkArgs.add( "--bind-services" ); } if ( endian != null ) { - argsFile.println( "--endian" ); - argsFile.println( endian ); + jlinkArgs.add( "--endian" ); + jlinkArgs.add( endian ); } if ( ignoreSigningInformation ) { - argsFile.println( "--ignore-signing-information" ); + jlinkArgs.add( "--ignore-signing-information" ); } if ( compress != null ) { - argsFile.println( "--compress" ); - argsFile.println( compress ); + jlinkArgs.add( "--compress" ); + jlinkArgs.add( compress + "" ); } if ( launcher != null ) { - argsFile.println( "--launcher" ); - argsFile.println( launcher ); + jlinkArgs.add( "--launcher" ); + jlinkArgs.add( launcher ); } if ( disablePlugin != null ) { - argsFile.println( "--disable-plugin" ); - argsFile.append( '"' ).append( disablePlugin ).println( '"' ); + jlinkArgs.add( "--disable-plugin" ); + jlinkArgs.add( disablePlugin ); } if ( pathsOfModules != null ) { // @formatter:off - argsFile.println( "--module-path" ); - argsFile.append( '"' ) - .append( getPlatformDependSeparateList( pathsOfModules ) - .replace( "\\", "\\\\" ) ).println( '"' ); + jlinkArgs.add( "--module-path" ); + jlinkArgs.add( getPlatformDependSeparateList( pathsOfModules ).replace( "\\", "\\\\" ) ); // @formatter:off } if ( noHeaderFiles ) { - argsFile.println( "--no-header-files" ); + jlinkArgs.add( "--no-header-files" ); } if ( noManPages ) { - argsFile.println( "--no-man-pages" ); + jlinkArgs.add( "--no-man-pages" ); } if ( hasSuggestProviders() ) { - argsFile.println( "--suggest-providers" ); + jlinkArgs.add( "--suggest-providers" ); String sb = getCommaSeparatedList( suggestProviders ); - argsFile.println( sb ); + jlinkArgs.add( sb ); } if ( hasLimitModules() ) { - argsFile.println( "--limit-modules" ); + jlinkArgs.add( "--limit-modules" ); String sb = getCommaSeparatedList( limitModules ); - argsFile.println( sb ); + jlinkArgs.add( sb ); } if ( !modulesToAdd.isEmpty() ) { - argsFile.println( "--add-modules" ); + jlinkArgs.add( "--add-modules" ); // This must be name of the module and *NOT* the name of the // file! Can we somehow pre check this information to fail early? String sb = getCommaSeparatedList( modulesToAdd ); - argsFile.append( '"' ).append( sb.replace( "\\", "\\\\" ) ).println( '"' ); + jlinkArgs.add( sb.replace( "\\", "\\\\" ) ); } if ( hasIncludeLocales() ) { - argsFile.println( "--add-modules" ); - argsFile.println( "jdk.localedata" ); - argsFile.println( "--include-locales" ); + jlinkArgs.add( "--add-modules" ); + jlinkArgs.add( "jdk.localedata" ); + jlinkArgs.add( "--include-locales" ); String sb = getCommaSeparatedList( includeLocales ); - argsFile.println( sb ); + jlinkArgs.add( sb ); } if ( pluginModulePath != null ) { - argsFile.println( "--plugin-module-path" ); + jlinkArgs.add( "--plugin-module-path" ); StringBuilder sb = convertSeparatedModulePathToPlatformSeparatedModulePath( pluginModulePath ); - argsFile.append( '"' ).append( sb.toString().replace( "\\", "\\\\" ) ).println( '"' ); + jlinkArgs.add( sb.toString().replace( "\\", "\\\\" ) ); } if ( buildDirectory != null ) { - argsFile.println( "--output" ); - argsFile.println( outputDirectoryImage ); + jlinkArgs.add( "--output" ); + jlinkArgs.add( outputDirectoryImage.getAbsolutePath() ); } if ( verbose ) { - argsFile.println( "--verbose" ); + jlinkArgs.add( "--verbose" ); } - argsFile.close(); - return file; + + return Collections.unmodifiableList( jlinkArgs ); } private boolean hasIncludeLocales() diff --git a/src/main/java9/org/apache/maven/plugins/jlink/JLinkExecutor.java b/src/main/java9/org/apache/maven/plugins/jlink/JLinkExecutor.java index c78b8c3..7310a3e 100644 --- a/src/main/java9/org/apache/maven/plugins/jlink/JLinkExecutor.java +++ b/src/main/java9/org/apache/maven/plugins/jlink/JLinkExecutor.java @@ -28,14 +28,9 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.PrintWriter; -import java.nio.file.Files; -import java.util.ArrayDeque; -import java.util.Deque; import java.util.List; import java.util.Optional; import java.util.spi.ToolProvider; -import java.util.stream.Collectors; -import java.util.stream.Stream; /** * JDK9+ executor for jlink. @@ -73,49 +68,13 @@ class JLinkExecutor extends AbstractJLinkExecutor .orElseThrow( () -> new IllegalStateException( "No jlink tool found." ) ); } - - protected Stream<String> argsfileToArgs( File argsFile ) - { - try - { - List<String> strings = Files.readAllLines( argsFile.toPath() ); - Deque<String> out = new ArrayDeque<>(); - - for ( String line : strings ) - { - if ( line.startsWith( "-" ) ) - { - out.add( line ); - continue; - } - - if ( line.startsWith( "\"" ) && line.endsWith( "\"" ) ) - { - out.add( line.substring( 1, line.lastIndexOf( "\"" ) ) ); - continue; - } - - out.add( line ); - } - - return out.stream(); - } - catch ( IOException e ) - { - throw new IllegalStateException( "Unable to read jlinkArgs file: " + argsFile.getAbsolutePath() ); - } - - } - @Override - public int executeJlink( File argsFile ) throws MojoExecutionException + public int executeJlink( List<String> jlinkArgs ) throws MojoExecutionException { - List<String> actualArgs = this.argsfileToArgs( argsFile ).collect( Collectors.toList() ); - if ( getLog().isDebugEnabled() ) { // no quoted arguments ??? - getLog().debug( this.toolProvider.name() + " " + actualArgs ); + getLog().debug( this.toolProvider.name() + " " + jlinkArgs ); } try ( ByteArrayOutputStream baosErr = new ByteArrayOutputStream(); @@ -123,7 +82,7 @@ class JLinkExecutor extends AbstractJLinkExecutor ByteArrayOutputStream baosOut = new ByteArrayOutputStream(); PrintWriter out = new PrintWriter( baosOut ) ) { - int exitCode = this.toolProvider.run( out, err, actualArgs.toArray( new String[0] ) ); + int exitCode = this.toolProvider.run( out, err, jlinkArgs.toArray( new String[0] ) ); out.flush(); err.flush(); @@ -151,7 +110,7 @@ class JLinkExecutor extends AbstractJLinkExecutor } msg.append( '\n' ); msg.append( "Command line was: " ).append( this.toolProvider.name() ).append( ' ' ).append( - actualArgs ).append( '\n' ).append( '\n' ); + jlinkArgs ).append( '\n' ).append( '\n' ); throw new MojoExecutionException( msg.toString() ); }
