From 90abd0bc59d62e7e497922c22a43fdfc1999de7c Mon Sep 17 00:00:00 2001 From: Lahoucine EL ADDALI Date: Tue, 9 Jul 2024 01:11:28 +0100 Subject: [PATCH 01/10] fix buildArgs with whitespaces in path --- .../maven/AbstractNativeImageMojo.java | 26 +++++++++++++++++-- .../AbstractGraalVMMavenFunctionalTest.groovy | 3 +-- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java b/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java index fa5e563bd..29d1d57b8 100644 --- a/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java +++ b/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java @@ -240,10 +240,32 @@ protected List getBuildArgs() throws MojoExecutionException { .collect(Collectors.joining(",")) ); } - + logger.debug("ARGS:" + buildArgs); if (buildArgs != null && !buildArgs.isEmpty()) { for (String buildArg : buildArgs) { - cliArgs.addAll(Arrays.asList(buildArg.split("\\s+"))); + if(buildArg.startsWith("\\Q") || + buildArg.startsWith("--H:ConfigurationFileDirectories")) { + continue; + } + String[] args = buildArg.split("\\s+"); + int i=0; + while(i < args.length) { + String a =args[i]; + if (a.startsWith(""+System.getProperty("user.home").charAt(0))) { + StringBuilder path = new StringBuilder(a); + i++; + String tempArg = args[i].trim().toLowerCase(); + while(i < args.length && tempArg.charAt(0) <= 'z' && + tempArg.charAt(0) >= 'a') { + path.append(" ").append(args[i]); + i++; + } + cliArgs.add(path.toString()); + } else { + cliArgs.add(a); + i++; + } + } } } diff --git a/native-maven-plugin/src/testFixtures/groovy/org/graalvm/buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy b/native-maven-plugin/src/testFixtures/groovy/org/graalvm/buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy index 00c593bc6..a030091db 100644 --- a/native-maven-plugin/src/testFixtures/groovy/org/graalvm/buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy +++ b/native-maven-plugin/src/testFixtures/groovy/org/graalvm/buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy @@ -54,8 +54,7 @@ import java.nio.file.Path import java.nio.file.StandardCopyOption abstract class AbstractGraalVMMavenFunctionalTest extends Specification { - @TempDir - Path testDirectory + Path testDirectory = Path.of("C:\\Users\\Lahoucine EL ADDALI\\Desktop\\tests"); Path testOrigin; From 311c8ad59ed0ab7cae53e36145146505041cd2ed Mon Sep 17 00:00:00 2001 From: Lahoucine EL ADDALI Date: Tue, 9 Jul 2024 01:12:50 +0100 Subject: [PATCH 02/10] revert to use tempdir for testing --- .../buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/native-maven-plugin/src/testFixtures/groovy/org/graalvm/buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy b/native-maven-plugin/src/testFixtures/groovy/org/graalvm/buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy index a030091db..00c593bc6 100644 --- a/native-maven-plugin/src/testFixtures/groovy/org/graalvm/buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy +++ b/native-maven-plugin/src/testFixtures/groovy/org/graalvm/buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy @@ -54,7 +54,8 @@ import java.nio.file.Path import java.nio.file.StandardCopyOption abstract class AbstractGraalVMMavenFunctionalTest extends Specification { - Path testDirectory = Path.of("C:\\Users\\Lahoucine EL ADDALI\\Desktop\\tests"); + @TempDir + Path testDirectory Path testOrigin; From 19d8fde860c13d1a5167808c5c6ccc9359e387b8 Mon Sep 17 00:00:00 2001 From: Lahoucine EL ADDALI Date: Tue, 9 Jul 2024 10:35:30 +0100 Subject: [PATCH 03/10] fix failing tests --- .../graalvm/buildtools/maven/AbstractNativeImageMojo.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java b/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java index 29d1d57b8..766cecd51 100644 --- a/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java +++ b/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java @@ -254,9 +254,8 @@ protected List getBuildArgs() throws MojoExecutionException { if (a.startsWith(""+System.getProperty("user.home").charAt(0))) { StringBuilder path = new StringBuilder(a); i++; - String tempArg = args[i].trim().toLowerCase(); - while(i < args.length && tempArg.charAt(0) <= 'z' && - tempArg.charAt(0) >= 'a') { + while( i< args.length && args[i].toLowerCase().charAt(0) <= 'z' && + args[i].toLowerCase().charAt(0) >= 'a') { path.append(" ").append(args[i]); i++; } From 4b8987b8ab3524e0c91d741004f4c209f1603f53 Mon Sep 17 00:00:00 2001 From: Lahoucine EL ADDALI Date: Tue, 9 Jul 2024 10:36:35 +0100 Subject: [PATCH 04/10] refactor --- .../org/graalvm/buildtools/maven/AbstractNativeImageMojo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java b/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java index 766cecd51..888ec2569 100644 --- a/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java +++ b/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java @@ -240,7 +240,7 @@ protected List getBuildArgs() throws MojoExecutionException { .collect(Collectors.joining(",")) ); } - logger.debug("ARGS:" + buildArgs); + if (buildArgs != null && !buildArgs.isEmpty()) { for (String buildArg : buildArgs) { if(buildArg.startsWith("\\Q") || From 49b26ad61f1831eb87689373f302527d71b70085 Mon Sep 17 00:00:00 2001 From: Lahoucine EL ADDALI Date: Wed, 10 Jul 2024 12:27:00 +0100 Subject: [PATCH 05/10] fix add missing build args --- .../org/graalvm/buildtools/maven/AbstractNativeImageMojo.java | 1 + 1 file changed, 1 insertion(+) diff --git a/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java b/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java index 888ec2569..9404bdba0 100644 --- a/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java +++ b/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java @@ -245,6 +245,7 @@ protected List getBuildArgs() throws MojoExecutionException { for (String buildArg : buildArgs) { if(buildArg.startsWith("\\Q") || buildArg.startsWith("--H:ConfigurationFileDirectories")) { + cliArgs.add(buildArg); continue; } String[] args = buildArg.split("\\s+"); From 988cfadae7c7cd3ba75c9ed038ce7fd074d938cb Mon Sep 17 00:00:00 2001 From: Lahoucine EL ADDALI Date: Tue, 23 Jul 2024 23:32:29 +0100 Subject: [PATCH 06/10] add workflow for whitespace home folders --- .../actions/prepare-environment/action.yml | 1 + .../workflows/test-native-maven-plugin.yml | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/.github/actions/prepare-environment/action.yml b/.github/actions/prepare-environment/action.yml index e23595052..18627d6a4 100644 --- a/.github/actions/prepare-environment/action.yml +++ b/.github/actions/prepare-environment/action.yml @@ -52,3 +52,4 @@ runs: git config --global user.name 'graalvm bot' git config --global user.email 'graalvmbot@users.noreply.github.com' echo "org.ajoberstar.grgit.auth.command.allow=true" >> gradle.properties + mkdir -p ~/test with whitespaces/.m2 diff --git a/.github/workflows/test-native-maven-plugin.yml b/.github/workflows/test-native-maven-plugin.yml index 3e13d60dd..874fcb9a1 100644 --- a/.github/workflows/test-native-maven-plugin.yml +++ b/.github/workflows/test-native-maven-plugin.yml @@ -68,3 +68,30 @@ jobs: with: name: maven-functional-tests-results-${{ matrix.os }} path: native-maven-plugin/build/reports/tests/ + + test-native-maven-plugin-with-whitespaces: + name: "๐Ÿงช Maven: ${{ matrix.test }} on ${{ matrix.os }}" + runs-on: ${{ matrix.os }} + timeout-minutes: 60 + needs: populate-matrix + strategy: + fail-fast: false + matrix: ${{fromJson(needs.populate-matrix.outputs.matrix)}} + steps: + - name: "โ˜๏ธ Checkout repository" + uses: actions/checkout@v4 + - name: "๐Ÿ”ง Prepare environment" + uses: ./.github/actions/prepare-environment + with: + java-version: ${{ matrix.java-version }} + github-token: ${{ secrets.GITHUB_TOKEN }} + - name: "Set .m2 location to a folder with whitespaces" + run: echo "MAVEN_OPTS=-Dmaven.repo.local=~/test with whitespaces/.m2" >> $GITHUB_ENV + - name: "โ“ Check and test the plugin" + run: ./gradlew :native-maven-plugin:functionalTest --no-daemon --fail-fast --tests ${{ matrix.test }} + - name: "๐Ÿ“œ Upload unit test results" + if: always() + uses: actions/upload-artifact@v3 + with: + name: maven-functional-tests-results-${{ matrix.os }} + path: native-maven-plugin/build/reports/tests/ From c87de637419173f095a11ddd2a6e1586f699dc35 Mon Sep 17 00:00:00 2001 From: Lahoucine EL ADDALI Date: Sun, 28 Jul 2024 15:01:48 +0100 Subject: [PATCH 07/10] change testing dir and use repo with whitespaces --- .../actions/prepare-environment/action.yml | 1 - .../workflows/test-native-maven-plugin.yml | 27 ----------------- .../maven/AbstractNativeImageMojo.java | 4 +-- .../AbstractGraalVMMavenFunctionalTest.groovy | 29 +++++++++++++++++-- 4 files changed, 29 insertions(+), 32 deletions(-) diff --git a/.github/actions/prepare-environment/action.yml b/.github/actions/prepare-environment/action.yml index 18627d6a4..e23595052 100644 --- a/.github/actions/prepare-environment/action.yml +++ b/.github/actions/prepare-environment/action.yml @@ -52,4 +52,3 @@ runs: git config --global user.name 'graalvm bot' git config --global user.email 'graalvmbot@users.noreply.github.com' echo "org.ajoberstar.grgit.auth.command.allow=true" >> gradle.properties - mkdir -p ~/test with whitespaces/.m2 diff --git a/.github/workflows/test-native-maven-plugin.yml b/.github/workflows/test-native-maven-plugin.yml index 874fcb9a1..3e13d60dd 100644 --- a/.github/workflows/test-native-maven-plugin.yml +++ b/.github/workflows/test-native-maven-plugin.yml @@ -68,30 +68,3 @@ jobs: with: name: maven-functional-tests-results-${{ matrix.os }} path: native-maven-plugin/build/reports/tests/ - - test-native-maven-plugin-with-whitespaces: - name: "๐Ÿงช Maven: ${{ matrix.test }} on ${{ matrix.os }}" - runs-on: ${{ matrix.os }} - timeout-minutes: 60 - needs: populate-matrix - strategy: - fail-fast: false - matrix: ${{fromJson(needs.populate-matrix.outputs.matrix)}} - steps: - - name: "โ˜๏ธ Checkout repository" - uses: actions/checkout@v4 - - name: "๐Ÿ”ง Prepare environment" - uses: ./.github/actions/prepare-environment - with: - java-version: ${{ matrix.java-version }} - github-token: ${{ secrets.GITHUB_TOKEN }} - - name: "Set .m2 location to a folder with whitespaces" - run: echo "MAVEN_OPTS=-Dmaven.repo.local=~/test with whitespaces/.m2" >> $GITHUB_ENV - - name: "โ“ Check and test the plugin" - run: ./gradlew :native-maven-plugin:functionalTest --no-daemon --fail-fast --tests ${{ matrix.test }} - - name: "๐Ÿ“œ Upload unit test results" - if: always() - uses: actions/upload-artifact@v3 - with: - name: maven-functional-tests-results-${{ matrix.os }} - path: native-maven-plugin/build/reports/tests/ diff --git a/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java b/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java index 9404bdba0..c05e2f37e 100644 --- a/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java +++ b/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java @@ -244,7 +244,7 @@ protected List getBuildArgs() throws MojoExecutionException { if (buildArgs != null && !buildArgs.isEmpty()) { for (String buildArg : buildArgs) { if(buildArg.startsWith("\\Q") || - buildArg.startsWith("--H:ConfigurationFileDirectories")) { + buildArg.startsWith("-H:ConfigurationFileDirectories")) { cliArgs.add(buildArg); continue; } @@ -252,7 +252,7 @@ protected List getBuildArgs() throws MojoExecutionException { int i=0; while(i < args.length) { String a =args[i]; - if (a.startsWith(""+System.getProperty("user.home").charAt(0))) { + if (a.charAt(0) == System.getProperty("user.home").charAt(0)) { StringBuilder path = new StringBuilder(a); i++; while( i< args.length && args[i].toLowerCase().charAt(0) <= 'z' && diff --git a/native-maven-plugin/src/testFixtures/groovy/org/graalvm/buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy b/native-maven-plugin/src/testFixtures/groovy/org/graalvm/buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy index 00c593bc6..8bd27d470 100644 --- a/native-maven-plugin/src/testFixtures/groovy/org/graalvm/buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy +++ b/native-maven-plugin/src/testFixtures/groovy/org/graalvm/buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy @@ -49,12 +49,15 @@ import org.eclipse.jetty.server.handler.ResourceHandler import spock.lang.Specification import spock.lang.TempDir +import java.nio.file.FileVisitResult import java.nio.file.Files import java.nio.file.Path +import java.nio.file.SimpleFileVisitor import java.nio.file.StandardCopyOption +import java.nio.file.attribute.BasicFileAttributes abstract class AbstractGraalVMMavenFunctionalTest extends Specification { - @TempDir + Path testDirectory Path testOrigin; @@ -71,6 +74,13 @@ abstract class AbstractGraalVMMavenFunctionalTest extends Specification { boolean IS_MAC = System.getProperty("os.name", "unknown").contains("Mac"); def setup() { + var home_dir = Path.of(System.getProperty("user.home")) + testDirectory = home_dir.resolve("tests") + + if (Files.notExists(testDirectory)) { + Files.createDirectory(testDirectory) + } + executor = new IsolatedMavenExecutor( new File(System.getProperty("java.executable")), testDirectory.resolve("m2-home").toFile(), @@ -79,6 +89,21 @@ abstract class AbstractGraalVMMavenFunctionalTest extends Specification { } def cleanup() { + + //cleanup test directory and all it's sub directories + Files.walkFileTree(testDirectory, new SimpleFileVisitor() { + @Override + FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + Files.delete(file); + return FileVisitResult.CONTINUE; + } + @Override + FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { + Files.delete(dir); + return FileVisitResult.CONTINUE; + } + }); + if (server != null) { server.stop() server.destroy() @@ -158,7 +183,7 @@ abstract class AbstractGraalVMMavenFunctionalTest extends Specification { var resultingSystemProperties = [ "common.repo.uri": System.getProperty("common.repo.uri"), "seed.repo.uri": System.getProperty("seed.repo.uri"), - "maven.repo.local": testDirectory.resolve("local-repo").toFile().absolutePath + "maven.repo.local": testDirectory.resolve("local repo").toFile().absolutePath ] resultingSystemProperties.putAll(systemProperties) From 5a865160f4c9c3c904e4fa0fcdfcbc01b64666f9 Mon Sep 17 00:00:00 2001 From: lahoucine el addali Date: Tue, 6 Aug 2024 14:48:15 +0100 Subject: [PATCH 08/10] split build arguments correcltly --- .../maven/AbstractNativeImageMojo.java | 22 ++----------------- .../AbstractGraalVMMavenFunctionalTest.groovy | 6 ++--- 2 files changed, 4 insertions(+), 24 deletions(-) diff --git a/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java b/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java index c05e2f37e..339ae4a3a 100644 --- a/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java +++ b/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java @@ -243,29 +243,11 @@ protected List getBuildArgs() throws MojoExecutionException { if (buildArgs != null && !buildArgs.isEmpty()) { for (String buildArg : buildArgs) { - if(buildArg.startsWith("\\Q") || - buildArg.startsWith("-H:ConfigurationFileDirectories")) { + if(buildArg.startsWith("\\Q") || buildArg.startsWith("-H")) { cliArgs.add(buildArg); continue; } - String[] args = buildArg.split("\\s+"); - int i=0; - while(i < args.length) { - String a =args[i]; - if (a.charAt(0) == System.getProperty("user.home").charAt(0)) { - StringBuilder path = new StringBuilder(a); - i++; - while( i< args.length && args[i].toLowerCase().charAt(0) <= 'z' && - args[i].toLowerCase().charAt(0) >= 'a') { - path.append(" ").append(args[i]); - i++; - } - cliArgs.add(path.toString()); - } else { - cliArgs.add(a); - i++; - } - } + cliArgs.addAll(Arrays.asList(buildArg.split("\\s+", 2))); } } diff --git a/native-maven-plugin/src/testFixtures/groovy/org/graalvm/buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy b/native-maven-plugin/src/testFixtures/groovy/org/graalvm/buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy index 8bd27d470..eea14f561 100644 --- a/native-maven-plugin/src/testFixtures/groovy/org/graalvm/buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy +++ b/native-maven-plugin/src/testFixtures/groovy/org/graalvm/buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy @@ -74,8 +74,8 @@ abstract class AbstractGraalVMMavenFunctionalTest extends Specification { boolean IS_MAC = System.getProperty("os.name", "unknown").contains("Mac"); def setup() { - var home_dir = Path.of(System.getProperty("user.home")) - testDirectory = home_dir.resolve("tests") + Path HomeDir = Path.of(System.getProperty("user.home")) + testDirectory = HomeDir.resolve("tests") if (Files.notExists(testDirectory)) { Files.createDirectory(testDirectory) @@ -89,8 +89,6 @@ abstract class AbstractGraalVMMavenFunctionalTest extends Specification { } def cleanup() { - - //cleanup test directory and all it's sub directories Files.walkFileTree(testDirectory, new SimpleFileVisitor() { @Override FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { From 27986882a3e797b39ee5783a76706622791db347 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20S=C3=A1nchez-Mariscal?= Date: Wed, 4 Sep 2024 11:09:23 +0200 Subject: [PATCH 09/10] Cleanup tests --- .../JavaApplicationFunctionalTest.groovy | 12 ++++++ .../AbstractGraalVMMavenFunctionalTest.groovy | 41 ++++--------------- 2 files changed, 21 insertions(+), 32 deletions(-) diff --git a/native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/JavaApplicationFunctionalTest.groovy b/native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/JavaApplicationFunctionalTest.groovy index 2b8aa6280..88b943bf2 100644 --- a/native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/JavaApplicationFunctionalTest.groovy +++ b/native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/JavaApplicationFunctionalTest.groovy @@ -131,4 +131,16 @@ class JavaApplicationFunctionalTest extends AbstractGraalVMMavenFunctionalTest { file("target/").listFiles().findAll(x->x.name.contains("native-image") && x.name.endsWith(".args")).size() == 1 } + def "can handle spaces when writing the args file"() { + withSpacesInProjectDir() + withSample("java-application") + + when: + mvn '-DquickBuild', '-Pnative', 'native:write-args-file' + + then: + buildSucceeded + outputContains "Args file written to: target" + File.separator + "native-image" + } + } diff --git a/native-maven-plugin/src/testFixtures/groovy/org/graalvm/buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy b/native-maven-plugin/src/testFixtures/groovy/org/graalvm/buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy index eea14f561..a02de1d93 100644 --- a/native-maven-plugin/src/testFixtures/groovy/org/graalvm/buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy +++ b/native-maven-plugin/src/testFixtures/groovy/org/graalvm/buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy @@ -43,24 +43,20 @@ package org.graalvm.buildtools.maven import org.eclipse.jetty.server.Server import org.eclipse.jetty.server.ServerConnector -import org.eclipse.jetty.server.SymlinkAllowedResourceAliasChecker import org.eclipse.jetty.server.handler.ContextHandler import org.eclipse.jetty.server.handler.ResourceHandler import spock.lang.Specification import spock.lang.TempDir -import java.nio.file.FileVisitResult import java.nio.file.Files import java.nio.file.Path -import java.nio.file.SimpleFileVisitor import java.nio.file.StandardCopyOption -import java.nio.file.attribute.BasicFileAttributes abstract class AbstractGraalVMMavenFunctionalTest extends Specification { - + @TempDir Path testDirectory - Path testOrigin; + Path testOrigin private IsolatedMavenExecutor executor @@ -69,18 +65,11 @@ abstract class AbstractGraalVMMavenFunctionalTest extends Specification { Server server ServerConnector connector - boolean IS_WINDOWS = System.getProperty("os.name", "unknown").contains("Windows"); - boolean IS_LINUX = System.getProperty("os.name", "unknown").contains("Linux"); - boolean IS_MAC = System.getProperty("os.name", "unknown").contains("Mac"); + boolean IS_WINDOWS = System.getProperty("os.name", "unknown").contains("Windows") + boolean IS_LINUX = System.getProperty("os.name", "unknown").contains("Linux") + boolean IS_MAC = System.getProperty("os.name", "unknown").contains("Mac") def setup() { - Path HomeDir = Path.of(System.getProperty("user.home")) - testDirectory = HomeDir.resolve("tests") - - if (Files.notExists(testDirectory)) { - Files.createDirectory(testDirectory) - } - executor = new IsolatedMavenExecutor( new File(System.getProperty("java.executable")), testDirectory.resolve("m2-home").toFile(), @@ -89,19 +78,6 @@ abstract class AbstractGraalVMMavenFunctionalTest extends Specification { } def cleanup() { - Files.walkFileTree(testDirectory, new SimpleFileVisitor() { - @Override - FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { - Files.delete(file); - return FileVisitResult.CONTINUE; - } - @Override - FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { - Files.delete(dir); - return FileVisitResult.CONTINUE; - } - }); - if (server != null) { server.stop() server.destroy() @@ -177,12 +153,13 @@ abstract class AbstractGraalVMMavenFunctionalTest extends Specification { } void mvn(List args, Map systemProperties) { - System.out.println("Running copy of maven project `" + testOrigin + "` with " + args); + println("Running copy of maven project ${testOrigin} in ${testDirectory} with $args") var resultingSystemProperties = [ "common.repo.uri": System.getProperty("common.repo.uri"), "seed.repo.uri": System.getProperty("seed.repo.uri"), - "maven.repo.local": testDirectory.resolve("local repo").toFile().absolutePath + "maven.repo.local": testDirectory.resolve("local-repo").toFile().absolutePath ] + println "Using local repo: ${resultingSystemProperties['maven.repo.local']}" resultingSystemProperties.putAll(systemProperties) result = executor.execute( @@ -192,7 +169,7 @@ abstract class AbstractGraalVMMavenFunctionalTest extends Specification { *args], new File(System.getProperty("maven.settings")) ) - System.out.println("Exit code is ${result.exitCode}") + println "Exit code is ${result.exitCode}" } From cdfcfa20574139d6bbf7f2ab7f7a2e0047d0c23e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20S=C3=A1nchez-Mariscal?= Date: Wed, 4 Sep 2024 11:59:51 +0200 Subject: [PATCH 10/10] Unit test code --- .../maven/AbstractNativeImageMojo.java | 20 ++++++++----- .../maven/AbstractNativeImageMojoTest.groovy | 30 +++++++++++++++++++ 2 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 native-maven-plugin/src/test/groovy/org/graalvm/buildtools/maven/AbstractNativeImageMojoTest.groovy diff --git a/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java b/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java index 339ae4a3a..35a09382b 100644 --- a/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java +++ b/native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java @@ -242,13 +242,7 @@ protected List getBuildArgs() throws MojoExecutionException { } if (buildArgs != null && !buildArgs.isEmpty()) { - for (String buildArg : buildArgs) { - if(buildArg.startsWith("\\Q") || buildArg.startsWith("-H")) { - cliArgs.add(buildArg); - continue; - } - cliArgs.addAll(Arrays.asList(buildArg.split("\\s+", 2))); - } + cliArgs.addAll(processBuildArgs(buildArgs)); } List actualCliArgs; @@ -266,6 +260,18 @@ protected List getBuildArgs() throws MojoExecutionException { return Collections.unmodifiableList(actualCliArgs); } + static List processBuildArgs(List buildArgs) { + var result = new ArrayList(); + for (String buildArg : buildArgs) { + if(buildArg.startsWith("\\Q") || buildArg.startsWith("-H:ConfigurationFileDirectories")) { + result.add(buildArg); + } else { + result.addAll(Arrays.asList(buildArg.split("\\s+", 2))); + } + } + return result; + } + protected Path processSupportedArtifacts(Artifact artifact) throws MojoExecutionException { return processArtifact(artifact, "jar", "test-jar", "war"); } diff --git a/native-maven-plugin/src/test/groovy/org/graalvm/buildtools/maven/AbstractNativeImageMojoTest.groovy b/native-maven-plugin/src/test/groovy/org/graalvm/buildtools/maven/AbstractNativeImageMojoTest.groovy new file mode 100644 index 000000000..dc2df79ce --- /dev/null +++ b/native-maven-plugin/src/test/groovy/org/graalvm/buildtools/maven/AbstractNativeImageMojoTest.groovy @@ -0,0 +1,30 @@ +package org.graalvm.buildtools.maven + +import spock.lang.Specification + +class AbstractNativeImageMojoTest extends Specification { + + void "it can process build args"() { + given: + def buildArgs = [ + "--exclude-config", + "\\QC:\\Users\\Lahoucine EL ADDALI\\.m2\\repository\\io\\netty\\netty-transport\\4.1.108.Final\\netty-transport-4.1.108.Final.jar\\E", + "^/META-INF/native-image/", + "-cp C:\\Users\\Lahoucine EL ADDALI\\Desktop\\outdir\\target/java-application-with-custom-packaging-0.1.jar", + "-H:ConfigurationFileDirectories=C:\\Users\\Lahoucine EL ADDALI\\Downloads\\4.5.0.0_kubernetes_kubernetes-demo-java-maven\\api\\target\\native\\generated\\generateResourceConfig" + ] + + when: + def processedArgs = AbstractNativeImageMojo.processBuildArgs(buildArgs) + + then: + processedArgs == [ + "--exclude-config", + "\\QC:\\Users\\Lahoucine EL ADDALI\\.m2\\repository\\io\\netty\\netty-transport\\4.1.108.Final\\netty-transport-4.1.108.Final.jar\\E", + "^/META-INF/native-image/", + "-cp", + "C:\\Users\\Lahoucine EL ADDALI\\Desktop\\outdir\\target/java-application-with-custom-packaging-0.1.jar", + "-H:ConfigurationFileDirectories=C:\\Users\\Lahoucine EL ADDALI\\Downloads\\4.5.0.0_kubernetes_kubernetes-demo-java-maven\\api\\target\\native\\generated\\generateResourceConfig" + ] + } +}