Skip to content

Commit 8536ecd

Browse files
Merge pull request #609 from houcine7/fix-path-whitespaces-args
2 parents 2c8c2a7 + cdfcfa2 commit 8536ecd

File tree

4 files changed

+62
-10
lines changed

4 files changed

+62
-10
lines changed

native-maven-plugin/src/functionalTest/groovy/org/graalvm/buildtools/maven/JavaApplicationFunctionalTest.groovy

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,4 +131,16 @@ class JavaApplicationFunctionalTest extends AbstractGraalVMMavenFunctionalTest {
131131
file("target/").listFiles().findAll(x->x.name.contains("native-image") && x.name.endsWith(".args")).size() == 1
132132
}
133133
134+
def "can handle spaces when writing the args file"() {
135+
withSpacesInProjectDir()
136+
withSample("java-application")
137+
138+
when:
139+
mvn '-DquickBuild', '-Pnative', 'native:write-args-file'
140+
141+
then:
142+
buildSucceeded
143+
outputContains "Args file written to: target" + File.separator + "native-image"
144+
}
145+
134146
}

native-maven-plugin/src/main/java/org/graalvm/buildtools/maven/AbstractNativeImageMojo.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -242,9 +242,7 @@ protected List<String> getBuildArgs() throws MojoExecutionException {
242242
}
243243

244244
if (buildArgs != null && !buildArgs.isEmpty()) {
245-
for (String buildArg : buildArgs) {
246-
cliArgs.addAll(Arrays.asList(buildArg.split("\\s+")));
247-
}
245+
cliArgs.addAll(processBuildArgs(buildArgs));
248246
}
249247

250248
List<String> actualCliArgs;
@@ -262,6 +260,18 @@ protected List<String> getBuildArgs() throws MojoExecutionException {
262260
return Collections.unmodifiableList(actualCliArgs);
263261
}
264262

263+
static List<String> processBuildArgs(List<String> buildArgs) {
264+
var result = new ArrayList<String>();
265+
for (String buildArg : buildArgs) {
266+
if(buildArg.startsWith("\\Q") || buildArg.startsWith("-H:ConfigurationFileDirectories")) {
267+
result.add(buildArg);
268+
} else {
269+
result.addAll(Arrays.asList(buildArg.split("\\s+", 2)));
270+
}
271+
}
272+
return result;
273+
}
274+
265275
protected Path processSupportedArtifacts(Artifact artifact) throws MojoExecutionException {
266276
return processArtifact(artifact, "jar", "test-jar", "war");
267277
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.graalvm.buildtools.maven
2+
3+
import spock.lang.Specification
4+
5+
class AbstractNativeImageMojoTest extends Specification {
6+
7+
void "it can process build args"() {
8+
given:
9+
def buildArgs = [
10+
"--exclude-config",
11+
"\\QC:\\Users\\Lahoucine EL ADDALI\\.m2\\repository\\io\\netty\\netty-transport\\4.1.108.Final\\netty-transport-4.1.108.Final.jar\\E",
12+
"^/META-INF/native-image/",
13+
"-cp C:\\Users\\Lahoucine EL ADDALI\\Desktop\\outdir\\target/java-application-with-custom-packaging-0.1.jar",
14+
"-H:ConfigurationFileDirectories=C:\\Users\\Lahoucine EL ADDALI\\Downloads\\4.5.0.0_kubernetes_kubernetes-demo-java-maven\\api\\target\\native\\generated\\generateResourceConfig"
15+
]
16+
17+
when:
18+
def processedArgs = AbstractNativeImageMojo.processBuildArgs(buildArgs)
19+
20+
then:
21+
processedArgs == [
22+
"--exclude-config",
23+
"\\QC:\\Users\\Lahoucine EL ADDALI\\.m2\\repository\\io\\netty\\netty-transport\\4.1.108.Final\\netty-transport-4.1.108.Final.jar\\E",
24+
"^/META-INF/native-image/",
25+
"-cp",
26+
"C:\\Users\\Lahoucine EL ADDALI\\Desktop\\outdir\\target/java-application-with-custom-packaging-0.1.jar",
27+
"-H:ConfigurationFileDirectories=C:\\Users\\Lahoucine EL ADDALI\\Downloads\\4.5.0.0_kubernetes_kubernetes-demo-java-maven\\api\\target\\native\\generated\\generateResourceConfig"
28+
]
29+
}
30+
}

native-maven-plugin/src/testFixtures/groovy/org/graalvm/buildtools/maven/AbstractGraalVMMavenFunctionalTest.groovy

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ package org.graalvm.buildtools.maven
4343

4444
import org.eclipse.jetty.server.Server
4545
import org.eclipse.jetty.server.ServerConnector
46-
import org.eclipse.jetty.server.SymlinkAllowedResourceAliasChecker
4746
import org.eclipse.jetty.server.handler.ContextHandler
4847
import org.eclipse.jetty.server.handler.ResourceHandler
4948
import spock.lang.Specification
@@ -57,7 +56,7 @@ abstract class AbstractGraalVMMavenFunctionalTest extends Specification {
5756
@TempDir
5857
Path testDirectory
5958

60-
Path testOrigin;
59+
Path testOrigin
6160

6261
private IsolatedMavenExecutor executor
6362

@@ -66,9 +65,9 @@ abstract class AbstractGraalVMMavenFunctionalTest extends Specification {
6665
Server server
6766
ServerConnector connector
6867

69-
boolean IS_WINDOWS = System.getProperty("os.name", "unknown").contains("Windows");
70-
boolean IS_LINUX = System.getProperty("os.name", "unknown").contains("Linux");
71-
boolean IS_MAC = System.getProperty("os.name", "unknown").contains("Mac");
68+
boolean IS_WINDOWS = System.getProperty("os.name", "unknown").contains("Windows")
69+
boolean IS_LINUX = System.getProperty("os.name", "unknown").contains("Linux")
70+
boolean IS_MAC = System.getProperty("os.name", "unknown").contains("Mac")
7271

7372
def setup() {
7473
executor = new IsolatedMavenExecutor(
@@ -154,12 +153,13 @@ abstract class AbstractGraalVMMavenFunctionalTest extends Specification {
154153
}
155154

156155
void mvn(List<String> args, Map<String, String> systemProperties) {
157-
System.out.println("Running copy of maven project `" + testOrigin + "` with " + args);
156+
println("Running copy of maven project ${testOrigin} in ${testDirectory} with $args")
158157
var resultingSystemProperties = [
159158
"common.repo.uri": System.getProperty("common.repo.uri"),
160159
"seed.repo.uri": System.getProperty("seed.repo.uri"),
161160
"maven.repo.local": testDirectory.resolve("local-repo").toFile().absolutePath
162161
]
162+
println "Using local repo: ${resultingSystemProperties['maven.repo.local']}"
163163
resultingSystemProperties.putAll(systemProperties)
164164

165165
result = executor.execute(
@@ -169,7 +169,7 @@ abstract class AbstractGraalVMMavenFunctionalTest extends Specification {
169169
*args],
170170
new File(System.getProperty("maven.settings"))
171171
)
172-
System.out.println("Exit code is ${result.exitCode}")
172+
println "Exit code is ${result.exitCode}"
173173

174174
}
175175

0 commit comments

Comments
 (0)